@globalpayments/vega 2.13.1 → 2.15.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.
- package/dist/cjs/{app-globals-9633dc88.js → app-globals-6b5136b1.js} +4 -4
- package/dist/cjs/{childNodesEventPreventSlimmer-29128c2a.js → childNodesEventPreventSlimmer-5b352793.js} +1 -1
- package/dist/cjs/{componentUsageRuntimeMetrics-b21c694f.js → componentUsageRuntimeMetrics-1a2a592d.js} +1 -1
- package/dist/cjs/{designToken-91ea7c25.js → designToken-1e1dc648.js} +6 -83
- package/dist/cjs/{elementAppenderSlimmer-31397fa9.js → elementAppenderSlimmer-0590af69.js} +1 -1
- package/dist/cjs/{eventEmitSlimmer-da0b3b8b.js → eventEmitSlimmer-ea57144a.js} +1 -1
- package/dist/cjs/{featureFlagController-44d5e755.js → featureFlagController-ab94fd4f.js} +1 -1
- package/dist/cjs/{formFieldControllerSlimmer-b451c7a5.js → formFieldControllerSlimmer-9271a8b8.js} +4 -3
- package/dist/cjs/index-1299d729.js +8 -0
- package/dist/cjs/{index-672f20ec.js → index-3183748d.js} +27 -11
- package/dist/cjs/{index-1aa6f0c9.js → index-b8881ddc.js} +3 -3
- package/dist/cjs/index.cjs.js +9 -7
- package/dist/cjs/{internalVegaEventManager-a3672e0c.js → internalVegaEventManager-543c20cb.js} +2 -1
- package/dist/cjs/{legendInputProcessor-b1c5958c.js → legendInputProcessor-76d1eab6.js} +5 -32
- package/dist/cjs/loader.cjs.js +7 -7
- package/dist/cjs/mutationObserverFilters-dd88e5fe.js +45 -0
- package/dist/cjs/{mutationObserverFilters-5beee7b8.js → mutationObserverSlimmer-8d99123c.js} +4 -43
- package/dist/cjs/pixel-98f2a10c.js +72 -0
- package/dist/cjs/{responsiveFormatFacade-12dd896d.js → responsiveFormatFacade-037c9c80.js} +3 -43
- package/dist/cjs/stateBackgroundColorFormatter-96a26ee7.js +85 -0
- package/dist/cjs/{stringInputFormatterSlimmer-e15e55cd.js → stringInputFormatterSlimmer-afdb5cfd.js} +2 -0
- package/dist/cjs/{subStateObserverSlimmer-e61bda94.js → subStateObserverSlimmer-48ad20a1.js} +1 -1
- package/dist/cjs/timer-5f33058b.js +24 -0
- package/dist/cjs/vega-accordion.cjs.entry.js +9 -7
- package/dist/cjs/vega-app-footer.cjs.entry.js +1 -1
- package/dist/cjs/vega-app-header-button.cjs.entry.js +9 -7
- package/dist/cjs/vega-backdrop.cjs.entry.js +1 -1
- package/dist/cjs/vega-banner.cjs.entry.js +4 -4
- package/dist/cjs/vega-bar-chart.cjs.entry.js +4 -3
- package/dist/cjs/vega-box.cjs.entry.js +5 -3
- package/dist/cjs/vega-breadcrumb.cjs.entry.js +5 -5
- package/dist/cjs/vega-button-circle.cjs.entry.js +9 -7
- package/dist/cjs/vega-button-group_2.cjs.entry.js +7 -7
- package/dist/cjs/vega-button-link.cjs.entry.js +5 -5
- package/dist/cjs/vega-button.cjs.entry.js +7 -6
- package/dist/cjs/vega-calendar_2.cjs.entry.js +2927 -0
- package/dist/cjs/vega-card.cjs.entry.js +5 -3
- package/dist/cjs/vega-carousel.cjs.entry.js +6 -5
- package/dist/cjs/vega-checkbox_2.cjs.entry.js +9 -8
- package/dist/cjs/vega-chip.cjs.entry.js +9 -7
- package/dist/cjs/vega-color-picker.cjs.entry.js +8 -7
- package/dist/cjs/vega-combo-box.cjs.entry.js +9 -8
- package/dist/cjs/vega-counter-badge.cjs.entry.js +1 -1
- package/dist/cjs/vega-date-picker_2.cjs.entry.js +13 -11
- package/dist/cjs/vega-dialog_2.cjs.entry.js +9 -7
- package/dist/cjs/vega-divider.cjs.entry.js +5 -3
- package/dist/cjs/vega-dropdown_5.cjs.entry.js +38 -39
- package/dist/cjs/vega-field-error.cjs.entry.js +1 -1
- package/dist/cjs/vega-field-label.cjs.entry.js +5 -5
- package/dist/cjs/vega-flex.cjs.entry.js +7 -5
- package/dist/cjs/vega-font.cjs.entry.js +5 -3
- package/dist/cjs/vega-form.cjs.entry.js +9 -8
- package/dist/cjs/vega-grid.cjs.entry.js +5 -3
- package/dist/cjs/vega-icon.cjs.entry.js +5 -3
- package/dist/cjs/vega-image-uploader.cjs.entry.js +11 -9
- package/dist/cjs/vega-input-credit-card.cjs.entry.js +11 -10
- package/dist/cjs/vega-input-range.cjs.entry.js +9 -8
- package/dist/cjs/vega-input-select.cjs.entry.js +11 -9
- package/dist/cjs/vega-input.cjs.entry.js +9 -8
- package/dist/cjs/vega-item-toggle.cjs.entry.js +4 -4
- package/dist/cjs/vega-left-nav_5.cjs.entry.js +9 -7
- package/dist/cjs/vega-line-chart.cjs.entry.js +4 -3
- package/dist/cjs/vega-loader-wrapper_2.cjs.entry.js +3 -2
- package/dist/cjs/vega-page-notification_2.cjs.entry.js +2 -2
- package/dist/cjs/vega-pagination.cjs.entry.js +5 -5
- package/dist/cjs/vega-pie-chart.cjs.entry.js +3 -2
- package/dist/cjs/vega-popover_2.cjs.entry.js +7 -6
- package/dist/cjs/vega-progress-tracker.cjs.entry.js +4 -4
- package/dist/cjs/vega-radio_2.cjs.entry.js +10 -9
- package/dist/cjs/vega-section-title.cjs.entry.js +1 -1
- package/dist/cjs/vega-segment-control.cjs.entry.js +4 -4
- package/dist/cjs/vega-selection-tile_2.cjs.entry.js +10 -9
- package/dist/cjs/vega-skeleton.cjs.entry.js +326 -0
- package/dist/cjs/vega-slot-container.cjs.entry.js +1 -1
- package/dist/cjs/vega-stepper.cjs.entry.js +9 -8
- package/dist/cjs/vega-tab-group_2.cjs.entry.js +21 -42
- package/dist/cjs/vega-table_8.cjs.entry.js +23 -19
- package/dist/cjs/vega-text.cjs.entry.js +1 -1
- package/dist/cjs/vega-textarea.cjs.entry.js +9 -8
- package/dist/cjs/vega-time-picker_2.cjs.entry.js +12 -10
- package/dist/cjs/vega-toggle-switch.cjs.entry.js +4 -4
- package/dist/cjs/vega-tooltip_2.cjs.entry.js +4 -3
- package/dist/cjs/vega.cjs.js +7 -7
- package/dist/cjs/{vegaEventId-1a0eb6b5.js → vegaEventId-d7774262.js} +2 -0
- package/dist/cjs/{vegaInternalEventId-b27735af.js → vegaInternalEventId-173c4941.js} +2 -0
- package/dist/cjs/{yAxisInputProcessor-da676e61.js → yAxisInputProcessor-8b437e75.js} +1 -1
- package/dist/collection/collection-manifest.json +14 -0
- package/dist/collection/components/vega-calendar/icons/clock-three.js +3 -0
- package/dist/collection/components/vega-calendar/slimmers/common/controllers/vega-calendar-current-period-controller.js +103 -0
- package/dist/collection/components/vega-calendar/slimmers/common/controllers/vega-calendar-event-controller.js +71 -0
- package/dist/collection/components/vega-calendar/slimmers/common/controllers/vega-calendar-event-responsive-controller.js +74 -0
- package/dist/collection/components/vega-calendar/slimmers/common/controllers/vega-calendar-view-controller.js +78 -0
- package/dist/collection/components/vega-calendar/slimmers/common/helpers/calendarEventSorter.js +91 -0
- package/dist/collection/components/vega-calendar/slimmers/common/layout/baseEventLayout.js +11 -0
- package/dist/collection/components/vega-calendar/slimmers/common/layout/baseEventLayoutCell.js +43 -0
- package/dist/collection/components/vega-calendar/slimmers/common/layout/baseEventLayoutGenerator.js +23 -0
- package/dist/collection/components/vega-calendar/slimmers/common/layout/fullDayEventLayout.js +42 -0
- package/dist/collection/components/vega-calendar/slimmers/common/layout/fullDayEventLayoutGenerator.js +84 -0
- package/dist/collection/components/vega-calendar/slimmers/common/layout/fullDayEventLayoutRow.js +41 -0
- package/dist/collection/components/vega-calendar/slimmers/common/layout/test/longEventLayoutGenerator.test.js +99 -0
- package/dist/collection/components/vega-calendar/slimmers/common/renderers/vega-calendar-event-item-renderer.js +39 -0
- package/dist/collection/components/vega-calendar/slimmers/common/renderers/vega-calendar-full-day-event-layout-renderer.js +99 -0
- package/dist/collection/components/vega-calendar/slimmers/common/renderers/vega-calendar-renderer.js +27 -0
- package/dist/collection/components/vega-calendar/slimmers/common/renderers/vega-calendar-switch-panel.js +150 -0
- package/dist/collection/components/vega-calendar/slimmers/common/renderers/vega-calendar-view-renderer.js +30 -0
- package/dist/collection/components/vega-calendar/slimmers/day-view/renderers/full-day-event/vega-calendar-full-day-event-renderer.js +54 -0
- package/dist/collection/components/vega-calendar/slimmers/day-view/renderers/timed-event/layout/dayViewTimedEventLayout.js +35 -0
- package/dist/collection/components/vega-calendar/slimmers/day-view/renderers/timed-event/layout/dayViewTimedEventLayoutColumn.js +50 -0
- package/dist/collection/components/vega-calendar/slimmers/day-view/renderers/timed-event/layout/dayViewTimedEventLayoutGenerator.js +29 -0
- package/dist/collection/components/vega-calendar/slimmers/day-view/renderers/timed-event/layout/test/dayViewEventLayoutGenerator.test.js +77 -0
- package/dist/collection/components/vega-calendar/slimmers/day-view/renderers/timed-event/vega-calendar-day-event-layout-renderer.js +70 -0
- package/dist/collection/components/vega-calendar/slimmers/day-view/renderers/timed-event/vega-calendar-timed-event-renderer.js +52 -0
- package/dist/collection/components/vega-calendar/slimmers/day-view/renderers/vega-calendar-time-line-renderer.js +152 -0
- package/dist/collection/components/vega-calendar/slimmers/day-view/renderers/vega-calendar-view-with-time-renderer.js +88 -0
- package/dist/collection/components/vega-calendar/slimmers/month-view/renderers/vega-calendar-month-event-renderer.js +177 -0
- package/dist/collection/components/vega-calendar/slimmers/month-view/renderers/vega-calendar-month-view-renderer.js +73 -0
- package/dist/collection/components/vega-calendar/utils/index.js +23 -0
- package/dist/collection/components/vega-calendar/vega-calendar-event/slimmers/controllers/vega-calendar-event-bg-color-controller.js +29 -0
- package/dist/collection/components/vega-calendar/vega-calendar-event/slimmers/controllers/vega-calendar-event-title-max-height-controller.js +37 -0
- package/dist/collection/components/vega-calendar/vega-calendar-event/slimmers/controllers/vega-calendar-sub-state-controller.js +28 -0
- package/dist/collection/components/vega-calendar/vega-calendar-event/slimmers/renderers/vega-calendar-event-renderer.js +151 -0
- package/dist/collection/components/vega-calendar/vega-calendar-event/vega-calendar-event.css +342 -0
- package/dist/collection/components/vega-calendar/vega-calendar-event/vega-calendar-event.js +94 -0
- package/dist/collection/components/vega-calendar/vega-calendar.css +602 -0
- package/dist/collection/components/vega-calendar/vega-calendar.js +345 -0
- package/dist/collection/components/vega-dropdown/slimmers/controllers/vega-dropdown-children-controller.js +22 -22
- package/dist/collection/components/vega-dropdown/slimmers/controllers/vega-dropdown-selected-controller.js +0 -1
- package/dist/collection/components/vega-dropdown/slimmers/renderers/vega-dropdown-list-renderer.js +1 -4
- package/dist/collection/components/vega-dropdown/vega-dropdown.js +8 -4
- package/dist/collection/components/vega-skeleton/slimmers/renderers/vega-skeleton-ellipse-renderer.js +33 -0
- package/dist/collection/components/vega-skeleton/slimmers/renderers/vega-skeleton-full-width-paragraph-renderer.js +29 -0
- package/dist/collection/components/vega-skeleton/slimmers/renderers/vega-skeleton-image-renderer.js +33 -0
- package/dist/collection/components/vega-skeleton/slimmers/renderers/vega-skeleton-paragraph-renderer.js +31 -0
- package/dist/collection/components/vega-skeleton/slimmers/renderers/vega-skeleton-renderer-base.abstract.js +23 -0
- package/dist/collection/components/vega-skeleton/slimmers/renderers/vega-skeleton-renderer-manager.js +49 -0
- package/dist/collection/components/vega-skeleton/slimmers/renderers/vega-skeleton-table-renderer.js +42 -0
- package/dist/collection/components/vega-skeleton/slimmers/renderers/vega-skeleton-text-renderer.js +28 -0
- package/dist/collection/components/vega-skeleton/vega-skeleton.css +77 -0
- package/dist/collection/components/vega-skeleton/vega-skeleton.js +163 -0
- package/dist/collection/components/vega-tab-group/slimmers/vega-tab-group/controllers/vega-tab-group-selected-target-controller.js +11 -12
- package/dist/collection/components/vega-tab-group/slimmers/vega-tab-group/renderers/vega-tab-group-direction-button-renderer.js +1 -1
- package/dist/collection/components/vega-tab-group/slimmers/vega-tab-group/renderers/vega-tab-group-tab-list-renderer.js +3 -3
- package/dist/collection/components/vega-table/vega-table-row/slimmers/controllers/vega-table-row-click-controller.js +7 -5
- package/dist/collection/constants/ui.js +2 -0
- package/dist/collection/global/icons/chevron-left.js +3 -0
- package/dist/collection/global/icons/chevron-right.js +3 -0
- package/dist/collection/helpers/calendar/calendar-date.js +103 -0
- package/dist/collection/helpers/calendar/calendar-event.js +256 -0
- package/dist/collection/helpers/calendar/calendar-period/calendar-period.abstract.js +75 -0
- package/dist/collection/helpers/calendar/calendar-period/day-period.js +33 -0
- package/dist/collection/helpers/calendar/calendar-period/month-period.js +35 -0
- package/dist/collection/helpers/calendar/calendar-period/week-period.js +34 -0
- package/dist/collection/helpers/calendar/calendar-view-generator/calendar-view-generator.abstract.js +41 -0
- package/dist/collection/helpers/calendar/calendar-view-generator/day-view-generator.js +13 -0
- package/dist/collection/helpers/calendar/calendar-view-generator/month-view-generator.js +24 -0
- package/dist/collection/helpers/calendar/calendar-view-generator/week-view-generator.js +15 -0
- package/dist/collection/helpers/calendar/calendar-view.js +25 -0
- package/dist/collection/helpers/calendar/index.js +10 -0
- package/dist/collection/helpers/calendar/test/calendar-date.test.js +71 -0
- package/dist/collection/helpers/calendar/test/calendar-event.test.js +130 -0
- package/dist/collection/helpers/calendar/test/calendar-period/day-period.test.js +65 -0
- package/dist/collection/helpers/calendar/test/calendar-period/month-period.test.js +60 -0
- package/dist/collection/helpers/calendar/test/calendar-period/week-period.test.js +60 -0
- package/dist/collection/helpers/calendar/test/calendar-view-generator/day-view-generator.test.js +19 -0
- package/dist/collection/helpers/calendar/test/calendar-view-generator/month-view-generator.test.js +73 -0
- package/dist/collection/helpers/calendar/test/calendar-view-generator/week-view-generator.test.js +28 -0
- package/dist/collection/helpers/calendar/test/calendar-view.test.js +9 -0
- package/dist/collection/helpers/calendar/test/index.test.js +13 -0
- package/dist/collection/helpers/calendar/test/utils.test.js +9 -0
- package/dist/collection/helpers/calendar/utils.js +10 -0
- package/dist/collection/helpers/event-manager/eventID/componentEventIdMap.js +2 -1
- package/dist/collection/helpers/event-manager/eventID/vegaEventId.js +2 -0
- package/dist/collection/helpers/event-manager/eventID/vegaInternalEventId.js +1 -0
- package/dist/collection/helpers/formatter/responsive-map-formatter/responsiveWidthAndHeightFormatter.js +3 -25
- package/dist/collection/helpers/slimmers/mutation-observer/mutationObserverSlimmer.js +4 -1
- package/dist/collection/helpers/slimmers/stringInputFormatterSlimmer.js +2 -0
- package/dist/collection/helpers/vega-telemetry-helper/test/vegaEnvManager.test.js +1 -1
- package/dist/collection/helpers/vega-telemetry-helper/vegaEnvManager.js +2 -2
- package/dist/collection/utils/e2eUtils.js +2 -1
- package/dist/collection/utils/pixel.js +21 -0
- package/dist/collection/utils/test/pixel.test.js +9 -1
- package/dist/esm/{app-globals-f49e68bc.js → app-globals-cf903368.js} +4 -4
- package/dist/esm/{childNodesEventPreventSlimmer-86a1593c.js → childNodesEventPreventSlimmer-ca73e6c1.js} +1 -1
- package/dist/esm/{componentUsageRuntimeMetrics-9f888049.js → componentUsageRuntimeMetrics-4f08dec8.js} +1 -1
- package/dist/esm/{designToken-d25f5b1e.js → designToken-edc855d6.js} +4 -81
- package/dist/esm/{elementAppenderSlimmer-ef58e7a4.js → elementAppenderSlimmer-3c05ca9f.js} +2 -2
- package/dist/esm/{eventEmitSlimmer-d5b8d8d7.js → eventEmitSlimmer-9c33f04e.js} +1 -1
- package/dist/esm/{featureFlagController-9df5a1a3.js → featureFlagController-816491ad.js} +1 -1
- package/dist/esm/{formFieldControllerSlimmer-04953f74.js → formFieldControllerSlimmer-85ff874e.js} +3 -2
- package/dist/esm/{index-27e4eb43.js → index-4126a006.js} +27 -11
- package/dist/esm/index-c3505689.js +8 -0
- package/dist/esm/{index-41dc8dc1.js → index-dd06e5e7.js} +3 -3
- package/dist/esm/index.js +10 -8
- package/dist/esm/{internalVegaEventManager-501f9eb9.js → internalVegaEventManager-e1501923.js} +2 -1
- package/dist/esm/{legendInputProcessor-0b8dc09c.js → legendInputProcessor-644350b4.js} +1 -28
- package/dist/esm/loader.js +7 -7
- package/dist/esm/mutationObserverFilters-243934f6.js +42 -0
- package/dist/esm/{mutationObserverFilters-17327079.js → mutationObserverSlimmer-2355cedf.js} +5 -42
- package/dist/esm/pixel-f32c07ce.js +68 -0
- package/dist/esm/{responsiveFormatFacade-7665557d.js → responsiveFormatFacade-ac0b91fc.js} +7 -47
- package/dist/esm/stateBackgroundColorFormatter-e705312f.js +82 -0
- package/dist/esm/{stringInputFormatterSlimmer-9ba33d9e.js → stringInputFormatterSlimmer-e67c7503.js} +3 -1
- package/dist/esm/{subStateObserverSlimmer-71b39ca0.js → subStateObserverSlimmer-354b33f6.js} +1 -1
- package/dist/esm/timer-9321173b.js +22 -0
- package/dist/esm/{typeGuard-ebc62114.js → typeGuard-f33ed2eb.js} +1 -1
- package/dist/esm/vega-accordion.entry.js +10 -8
- package/dist/esm/vega-app-footer.entry.js +1 -1
- package/dist/esm/vega-app-header-button.entry.js +10 -8
- package/dist/esm/vega-backdrop.entry.js +1 -1
- package/dist/esm/vega-banner.entry.js +4 -4
- package/dist/esm/vega-bar-chart.entry.js +4 -3
- package/dist/esm/vega-box.entry.js +6 -4
- package/dist/esm/vega-breadcrumb.entry.js +5 -5
- package/dist/esm/vega-button-circle.entry.js +10 -8
- package/dist/esm/vega-button-group_2.entry.js +7 -7
- package/dist/esm/vega-button-link.entry.js +5 -5
- package/dist/esm/vega-button.entry.js +8 -7
- package/dist/esm/vega-calendar_2.entry.js +2922 -0
- package/dist/esm/vega-card.entry.js +6 -4
- package/dist/esm/vega-carousel.entry.js +7 -6
- package/dist/esm/vega-checkbox_2.entry.js +9 -8
- package/dist/esm/vega-chip.entry.js +10 -8
- package/dist/esm/vega-color-picker.entry.js +8 -7
- package/dist/esm/vega-combo-box.entry.js +10 -9
- package/dist/esm/vega-counter-badge.entry.js +1 -1
- package/dist/esm/vega-date-picker_2.entry.js +14 -12
- package/dist/esm/vega-dialog_2.entry.js +10 -8
- package/dist/esm/vega-divider.entry.js +6 -4
- package/dist/esm/vega-dropdown_5.entry.js +39 -40
- package/dist/esm/vega-field-error.entry.js +1 -1
- package/dist/esm/vega-field-label.entry.js +5 -5
- package/dist/esm/vega-flex.entry.js +8 -6
- package/dist/esm/vega-font.entry.js +6 -4
- package/dist/esm/vega-form.entry.js +9 -8
- package/dist/esm/vega-grid.entry.js +6 -4
- package/dist/esm/vega-icon.entry.js +6 -4
- package/dist/esm/vega-image-uploader.entry.js +12 -10
- package/dist/esm/vega-input-credit-card.entry.js +11 -10
- package/dist/esm/vega-input-range.entry.js +9 -8
- package/dist/esm/vega-input-select.entry.js +12 -10
- package/dist/esm/vega-input.entry.js +10 -9
- package/dist/esm/vega-item-toggle.entry.js +4 -4
- package/dist/esm/vega-left-nav_5.entry.js +10 -8
- package/dist/esm/vega-line-chart.entry.js +4 -3
- package/dist/esm/vega-loader-wrapper_2.entry.js +4 -3
- package/dist/esm/vega-page-notification_2.entry.js +2 -2
- package/dist/esm/vega-pagination.entry.js +5 -5
- package/dist/esm/vega-pie-chart.entry.js +3 -2
- package/dist/esm/vega-popover_2.entry.js +8 -7
- package/dist/esm/vega-progress-tracker.entry.js +4 -4
- package/dist/esm/vega-radio_2.entry.js +9 -8
- package/dist/esm/vega-section-title.entry.js +1 -1
- package/dist/esm/vega-segment-control.entry.js +4 -4
- package/dist/esm/vega-selection-tile_2.entry.js +10 -9
- package/dist/esm/vega-skeleton.entry.js +322 -0
- package/dist/esm/vega-slot-container.entry.js +1 -1
- package/dist/esm/vega-stepper.entry.js +9 -8
- package/dist/esm/vega-tab-group_2.entry.js +20 -41
- package/dist/esm/vega-table_8.entry.js +21 -17
- package/dist/esm/vega-text.entry.js +1 -1
- package/dist/esm/vega-textarea.entry.js +9 -8
- package/dist/esm/vega-time-picker_2.entry.js +13 -11
- package/dist/esm/vega-toggle-switch.entry.js +4 -4
- package/dist/esm/vega-tooltip_2.entry.js +5 -4
- package/dist/esm/vega.js +7 -7
- package/dist/esm/{vegaEventId-c0384a6f.js → vegaEventId-680887e1.js} +2 -1
- package/dist/esm/{vegaInternalEventId-ba0b5623.js → vegaInternalEventId-600b3751.js} +2 -1
- package/dist/esm/{yAxisInputProcessor-1d65dcf9.js → yAxisInputProcessor-2f08ac84.js} +1 -1
- package/dist/types/components/vega-calendar/icons/clock-three.d.ts +3 -0
- package/dist/types/components/vega-calendar/slimmers/common/controllers/vega-calendar-current-period-controller.d.ts +45 -0
- package/dist/types/components/vega-calendar/slimmers/common/controllers/vega-calendar-event-controller.d.ts +36 -0
- package/dist/types/components/vega-calendar/slimmers/common/controllers/vega-calendar-event-responsive-controller.d.ts +25 -0
- package/dist/types/components/vega-calendar/slimmers/common/controllers/vega-calendar-view-controller.d.ts +39 -0
- package/dist/types/components/vega-calendar/slimmers/common/helpers/calendarEventSorter.d.ts +38 -0
- package/dist/types/components/vega-calendar/slimmers/common/layout/baseEventLayout.d.ts +11 -0
- package/dist/types/components/vega-calendar/slimmers/common/layout/baseEventLayoutCell.d.ts +40 -0
- package/dist/types/components/vega-calendar/slimmers/common/layout/baseEventLayoutGenerator.d.ts +16 -0
- package/dist/types/components/vega-calendar/slimmers/common/layout/fullDayEventLayout.d.ts +30 -0
- package/dist/types/components/vega-calendar/slimmers/common/layout/fullDayEventLayoutGenerator.d.ts +39 -0
- package/dist/types/components/vega-calendar/slimmers/common/layout/fullDayEventLayoutRow.d.ts +26 -0
- package/dist/types/components/vega-calendar/slimmers/common/layout/test/longEventLayoutGenerator.test.d.ts +1 -0
- package/dist/types/components/vega-calendar/slimmers/common/renderers/vega-calendar-event-item-renderer.d.ts +23 -0
- package/dist/types/components/vega-calendar/slimmers/common/renderers/vega-calendar-full-day-event-layout-renderer.d.ts +39 -0
- package/dist/types/components/vega-calendar/slimmers/common/renderers/vega-calendar-renderer.d.ts +13 -0
- package/dist/types/components/vega-calendar/slimmers/common/renderers/vega-calendar-switch-panel.d.ts +67 -0
- package/dist/types/components/vega-calendar/slimmers/common/renderers/vega-calendar-view-renderer.d.ts +14 -0
- package/dist/types/components/vega-calendar/slimmers/day-view/renderers/full-day-event/vega-calendar-full-day-event-renderer.d.ts +22 -0
- package/dist/types/components/vega-calendar/slimmers/day-view/renderers/timed-event/layout/dayViewTimedEventLayout.d.ts +20 -0
- package/dist/types/components/vega-calendar/slimmers/day-view/renderers/timed-event/layout/dayViewTimedEventLayoutColumn.d.ts +28 -0
- package/dist/types/components/vega-calendar/slimmers/day-view/renderers/timed-event/layout/dayViewTimedEventLayoutGenerator.d.ts +20 -0
- package/dist/types/components/vega-calendar/slimmers/day-view/renderers/timed-event/layout/test/dayViewEventLayoutGenerator.test.d.ts +1 -0
- package/dist/types/components/vega-calendar/slimmers/day-view/renderers/timed-event/vega-calendar-day-event-layout-renderer.d.ts +27 -0
- package/dist/types/components/vega-calendar/slimmers/day-view/renderers/timed-event/vega-calendar-timed-event-renderer.d.ts +23 -0
- package/dist/types/components/vega-calendar/slimmers/day-view/renderers/vega-calendar-time-line-renderer.d.ts +63 -0
- package/dist/types/components/vega-calendar/slimmers/day-view/renderers/vega-calendar-view-with-time-renderer.d.ts +37 -0
- package/dist/types/components/vega-calendar/slimmers/month-view/renderers/vega-calendar-month-event-renderer.d.ts +66 -0
- package/dist/types/components/vega-calendar/slimmers/month-view/renderers/vega-calendar-month-view-renderer.d.ts +29 -0
- package/dist/types/components/vega-calendar/types.d.ts +58 -0
- package/dist/types/components/vega-calendar/utils/index.d.ts +18 -0
- package/dist/types/components/vega-calendar/vega-calendar-event/slimmers/controllers/vega-calendar-event-bg-color-controller.d.ts +12 -0
- package/dist/types/components/vega-calendar/vega-calendar-event/slimmers/controllers/vega-calendar-event-title-max-height-controller.d.ts +13 -0
- package/dist/types/components/vega-calendar/vega-calendar-event/slimmers/controllers/vega-calendar-sub-state-controller.d.ts +10 -0
- package/dist/types/components/vega-calendar/vega-calendar-event/slimmers/renderers/vega-calendar-event-renderer.d.ts +54 -0
- package/dist/types/components/vega-calendar/vega-calendar-event/vega-calendar-event.d.ts +25 -0
- package/dist/types/components/vega-calendar/vega-calendar.d.ts +107 -0
- package/dist/types/components/vega-dropdown/slimmers/controllers/vega-dropdown-children-controller.d.ts +3 -6
- package/dist/types/components/vega-dropdown/slimmers/renderers/vega-dropdown-list-renderer.d.ts +0 -2
- package/dist/types/components/vega-dropdown/vega-dropdown.d.ts +5 -1
- package/dist/types/components/vega-skeleton/interface.d.ts +5 -0
- package/dist/types/components/vega-skeleton/slimmers/renderers/vega-skeleton-ellipse-renderer.d.ts +12 -0
- package/dist/types/components/vega-skeleton/slimmers/renderers/vega-skeleton-full-width-paragraph-renderer.d.ts +11 -0
- package/dist/types/components/vega-skeleton/slimmers/renderers/vega-skeleton-image-renderer.d.ts +12 -0
- package/dist/types/components/vega-skeleton/slimmers/renderers/vega-skeleton-paragraph-renderer.d.ts +12 -0
- package/dist/types/components/vega-skeleton/slimmers/renderers/vega-skeleton-renderer-base.abstract.d.ts +13 -0
- package/dist/types/components/vega-skeleton/slimmers/renderers/vega-skeleton-renderer-manager.d.ts +21 -0
- package/dist/types/components/vega-skeleton/slimmers/renderers/vega-skeleton-table-renderer.d.ts +14 -0
- package/dist/types/components/vega-skeleton/slimmers/renderers/vega-skeleton-text-renderer.d.ts +11 -0
- package/dist/types/components/vega-skeleton/vega-skeleton.d.ts +41 -0
- package/dist/types/components/vega-tab-group/slimmers/vega-tab-group/controllers/vega-tab-group-selected-target-controller.d.ts +5 -5
- package/dist/types/components/vega-tab-group/slimmers/vega-tab-group/renderers/vega-tab-group-tab-list-renderer.d.ts +1 -1
- package/dist/types/components.d.ts +128 -1
- package/dist/types/constants/ui.d.ts +1 -1
- package/dist/types/global/icons/chevron-left.d.ts +3 -0
- package/dist/types/global/icons/chevron-right.d.ts +3 -0
- package/dist/types/helpers/calendar/calendar-date.d.ts +61 -0
- package/dist/types/helpers/calendar/calendar-event.d.ts +140 -0
- package/dist/types/helpers/calendar/calendar-period/calendar-period.abstract.d.ts +73 -0
- package/dist/types/helpers/calendar/calendar-period/day-period.d.ts +21 -0
- package/dist/types/helpers/calendar/calendar-period/month-period.d.ts +21 -0
- package/dist/types/helpers/calendar/calendar-period/week-period.d.ts +21 -0
- package/dist/types/helpers/calendar/calendar-view-generator/calendar-view-generator.abstract.d.ts +35 -0
- package/dist/types/helpers/calendar/calendar-view-generator/day-view-generator.d.ts +12 -0
- package/dist/types/helpers/calendar/calendar-view-generator/month-view-generator.d.ts +12 -0
- package/dist/types/helpers/calendar/calendar-view-generator/week-view-generator.d.ts +12 -0
- package/dist/types/helpers/calendar/calendar-view.d.ts +21 -0
- package/dist/types/helpers/calendar/index.d.ts +10 -0
- package/dist/types/helpers/calendar/test/calendar-date.test.d.ts +1 -0
- package/dist/types/helpers/calendar/test/calendar-event.test.d.ts +1 -0
- package/dist/types/helpers/calendar/test/calendar-period/day-period.test.d.ts +1 -0
- package/dist/types/helpers/calendar/test/calendar-period/month-period.test.d.ts +1 -0
- package/dist/types/helpers/calendar/test/calendar-period/week-period.test.d.ts +1 -0
- package/dist/types/helpers/calendar/test/calendar-view-generator/day-view-generator.test.d.ts +1 -0
- package/dist/types/helpers/calendar/test/calendar-view-generator/month-view-generator.test.d.ts +1 -0
- package/dist/types/helpers/calendar/test/calendar-view-generator/week-view-generator.test.d.ts +1 -0
- package/dist/types/helpers/calendar/test/calendar-view.test.d.ts +1 -0
- package/dist/types/helpers/calendar/test/index.test.d.ts +1 -0
- package/dist/types/helpers/calendar/test/utils.test.d.ts +1 -0
- package/dist/types/helpers/calendar/utils.d.ts +7 -0
- package/dist/types/helpers/event-manager/eventID/vegaEventId.d.ts +2 -0
- package/dist/types/helpers/event-manager/eventID/vegaInternalEventId.d.ts +1 -0
- package/dist/types/helpers/formatter/responsive-map-formatter/responsiveWidthAndHeightFormatter.d.ts +0 -12
- package/dist/types/types/components.type.d.ts +9 -1
- package/dist/types/utils/pixel.d.ts +11 -0
- package/dist/vega/index.esm.js +1 -1
- package/dist/vega/p-009405b6.entry.js +1 -0
- package/dist/vega/p-01ec38c1.js +1 -0
- package/dist/vega/p-0c667d6a.js +1 -0
- package/dist/vega/{p-d361ef78.js → p-1265732f.js} +1 -1
- package/dist/vega/{p-e80fd0ef.js → p-13ead830.js} +1 -1
- package/dist/vega/{p-d942a746.js → p-16608c5a.js} +1 -1
- package/dist/vega/{p-41413ea4.entry.js → p-1b3a0b54.entry.js} +2 -2
- package/dist/vega/p-1bc5b3bc.js +1 -0
- package/dist/vega/{p-7b127de4.js → p-1c2646d6.js} +1 -1
- package/dist/vega/p-1ced3ae5.js +1 -0
- package/dist/vega/{p-f27998de.entry.js → p-1d628d23.entry.js} +1 -1
- package/dist/vega/p-1dfddf03.entry.js +1 -0
- package/dist/vega/p-23422e56.entry.js +1 -0
- package/dist/vega/{p-797b24d3.entry.js → p-27d76db9.entry.js} +1 -1
- package/dist/vega/p-282648c1.entry.js +1 -0
- package/dist/vega/p-29d2d70a.js +1 -0
- package/dist/vega/p-2bb1c1c1.entry.js +1 -0
- package/dist/vega/{p-cffd96c9.entry.js → p-2c89a9a4.entry.js} +1 -1
- package/dist/vega/p-2e59a4f1.entry.js +1 -0
- package/dist/vega/p-37d3b80c.entry.js +1 -0
- package/dist/vega/p-38a22eb3.entry.js +1 -0
- package/dist/vega/p-38b01f3f.entry.js +1 -0
- package/dist/vega/p-38d19c4f.entry.js +1 -0
- package/dist/vega/p-3a815548.entry.js +1 -0
- package/dist/vega/p-3efc814a.entry.js +1 -0
- package/dist/vega/p-4365b25e.entry.js +1 -0
- package/dist/vega/p-449ad98f.entry.js +1 -0
- package/dist/vega/p-4d2859c9.entry.js +1 -0
- package/dist/vega/p-557516a4.entry.js +1 -0
- package/dist/vega/p-56681feb.js +1 -0
- package/dist/vega/p-57b85af1.entry.js +1 -0
- package/dist/vega/p-592e755b.entry.js +1 -0
- package/dist/vega/{p-210737f2.js → p-5cad29f5.js} +1 -1
- package/dist/vega/p-5eeb2fc1.entry.js +1 -0
- package/dist/vega/p-61c96c79.entry.js +1 -0
- package/dist/vega/p-61f18887.js +1 -0
- package/dist/vega/p-692df03d.entry.js +1 -0
- package/dist/vega/p-6ad96891.entry.js +1 -0
- package/dist/vega/p-6bdc4407.js +1 -0
- package/dist/vega/{p-194a3f8f.entry.js → p-6d482bec.entry.js} +1 -1
- package/dist/vega/{p-5b5625a0.entry.js → p-6e0daee9.entry.js} +1 -1
- package/dist/vega/p-6f7f9cda.entry.js +1 -0
- package/dist/vega/p-7440d7a2.entry.js +1 -0
- package/dist/vega/{p-bbbcfd09.entry.js → p-77b39fe7.entry.js} +1 -1
- package/dist/vega/p-77ff7c72.js +1 -0
- package/dist/vega/{p-e49ec016.entry.js → p-84787f59.entry.js} +1 -1
- package/dist/vega/p-8c62c493.entry.js +1 -0
- package/dist/vega/{p-a03b1bad.entry.js → p-9047ee85.entry.js} +1 -1
- package/dist/vega/p-95bdac84.entry.js +1 -0
- package/dist/vega/{p-3d220905.js → p-999e1318.js} +1 -1
- package/dist/vega/{p-7653f0c2.js → p-99c8fe92.js} +1 -1
- package/dist/vega/{p-e6848e33.entry.js → p-9b396c06.entry.js} +1 -1
- package/dist/vega/p-9e38810c.js +1 -0
- package/dist/vega/{p-f5f0545e.entry.js → p-9f56c3e4.entry.js} +1 -1
- package/dist/vega/p-a6cb10e8.entry.js +1 -0
- package/dist/vega/{p-75c51fe9.js → p-a9c3e9fd.js} +1 -1
- package/dist/vega/{p-8bdb7c1d.entry.js → p-a9f61d9e.entry.js} +1 -1
- package/dist/vega/p-aae8855d.js +1 -0
- package/dist/vega/p-af72a212.entry.js +1 -0
- package/dist/vega/p-b3056874.entry.js +1 -0
- package/dist/vega/{p-fa38e1c8.entry.js → p-b58e2fae.entry.js} +1 -1
- package/dist/vega/{p-86002ca4.entry.js → p-b708b0c2.entry.js} +1 -1
- package/dist/vega/p-b7bde205.entry.js +1 -0
- package/dist/vega/p-ba37eaad.entry.js +1 -0
- package/dist/vega/p-bb761f8f.js +1 -0
- package/dist/vega/p-bfc3450c.entry.js +1 -0
- package/dist/vega/p-c0ca1a1c.entry.js +1 -0
- package/dist/vega/p-c47d4933.js +1 -0
- package/dist/vega/p-c849236f.entry.js +1 -0
- package/dist/vega/{p-c902a586.entry.js → p-cd05ab96.entry.js} +1 -1
- package/dist/vega/{p-31ec4b52.entry.js → p-ceec3241.entry.js} +1 -1
- package/dist/vega/{p-761c458e.entry.js → p-d224e798.entry.js} +1 -1
- package/dist/vega/p-d909c9b4.entry.js +1 -0
- package/dist/vega/p-d978ee2c.entry.js +1 -0
- package/dist/vega/p-de5db6c9.entry.js +1 -0
- package/dist/vega/p-e1a284b1.entry.js +1 -0
- package/dist/vega/p-e4e60c01.entry.js +1 -0
- package/dist/vega/p-eb461dad.entry.js +1 -0
- package/dist/vega/p-eb709bc0.entry.js +1 -0
- package/dist/vega/p-f1d8fd1c.js +1 -0
- package/dist/vega/{p-629acb2e.js → p-f2118771.js} +1 -1
- package/dist/vega/p-f723790c.entry.js +1 -0
- package/dist/vega/{p-6ff07396.js → p-fda33444.js} +1 -1
- package/dist/vega/vega.esm.js +1 -1
- package/package.json +3 -3
- package/dist/vega/p-07abc29b.entry.js +0 -1
- package/dist/vega/p-08b48e61.entry.js +0 -1
- package/dist/vega/p-0d51b10e.entry.js +0 -1
- package/dist/vega/p-0ee347fd.entry.js +0 -1
- package/dist/vega/p-1fe9e4b3.js +0 -1
- package/dist/vega/p-22101a5f.entry.js +0 -1
- package/dist/vega/p-26be7725.js +0 -1
- package/dist/vega/p-2d38dcab.entry.js +0 -1
- package/dist/vega/p-2ea7b083.entry.js +0 -1
- package/dist/vega/p-3185ee03.entry.js +0 -1
- package/dist/vega/p-3205e6ec.entry.js +0 -1
- package/dist/vega/p-33ac74cb.entry.js +0 -1
- package/dist/vega/p-4949df06.js +0 -1
- package/dist/vega/p-4aaa9e0d.entry.js +0 -1
- package/dist/vega/p-5abced5e.entry.js +0 -1
- package/dist/vega/p-5df33dea.entry.js +0 -1
- package/dist/vega/p-60dbd035.entry.js +0 -1
- package/dist/vega/p-64020a69.entry.js +0 -1
- package/dist/vega/p-6cb26711.entry.js +0 -1
- package/dist/vega/p-79ccf076.entry.js +0 -1
- package/dist/vega/p-7d2ed978.entry.js +0 -1
- package/dist/vega/p-8da4b720.js +0 -1
- package/dist/vega/p-91160d38.js +0 -1
- package/dist/vega/p-9745f18f.entry.js +0 -1
- package/dist/vega/p-9820bd52.entry.js +0 -1
- package/dist/vega/p-9c726541.entry.js +0 -1
- package/dist/vega/p-9e70473b.js +0 -1
- package/dist/vega/p-a022bf87.entry.js +0 -1
- package/dist/vega/p-a09efd3b.entry.js +0 -1
- package/dist/vega/p-a62f4fbf.entry.js +0 -1
- package/dist/vega/p-ac23cfa6.js +0 -1
- package/dist/vega/p-ad2d02c5.entry.js +0 -1
- package/dist/vega/p-ade08379.entry.js +0 -1
- package/dist/vega/p-aeef2799.js +0 -1
- package/dist/vega/p-b7a0f473.entry.js +0 -1
- package/dist/vega/p-b7c51304.js +0 -1
- package/dist/vega/p-bbc8b4f5.entry.js +0 -1
- package/dist/vega/p-bd350fb7.entry.js +0 -1
- package/dist/vega/p-bf877997.entry.js +0 -1
- package/dist/vega/p-cb06eb1c.entry.js +0 -1
- package/dist/vega/p-d3605b1a.entry.js +0 -1
- package/dist/vega/p-da12b2da.entry.js +0 -1
- package/dist/vega/p-db6e73fc.entry.js +0 -1
- package/dist/vega/p-e0d2c9f6.entry.js +0 -1
- package/dist/vega/p-e89db39c.entry.js +0 -1
- package/dist/vega/p-eb6c9578.js +0 -1
- package/dist/vega/p-fbc0c261.entry.js +0 -1
- package/dist/vega/p-fc30b986.entry.js +0 -1
- package/dist/vega/p-ff3ae862.entry.js +0 -1
- package/dist/vega/p-ffa25bf2.entry.js +0 -1
|
@@ -0,0 +1,2927 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
const index = require('./index-1299d729.js');
|
|
6
|
+
const component = require('./component-c3bbaf20.js');
|
|
7
|
+
const globalSlimmerRegistry = require('./global-slimmer-registry-fdb2a041.js');
|
|
8
|
+
const componentUsageRuntimeMetrics = require('./componentUsageRuntimeMetrics-1a2a592d.js');
|
|
9
|
+
const domNodeSubjectObserverFactory = require('./domNodeSubjectObserverFactory-2bbdec29.js');
|
|
10
|
+
const vegaEventId = require('./vegaEventId-d7774262.js');
|
|
11
|
+
const internalIconManager = require('./internal-icon-manager-b21347bf.js');
|
|
12
|
+
const date = require('./date-b62fe96f.js');
|
|
13
|
+
const eventEmitSlimmer = require('./eventEmitSlimmer-ea57144a.js');
|
|
14
|
+
const childNodesEventPreventSlimmer = require('./childNodesEventPreventSlimmer-5b352793.js');
|
|
15
|
+
const vegaInternalEventId = require('./vegaInternalEventId-173c4941.js');
|
|
16
|
+
const accessibility = require('./accessibility-bfa227f6.js');
|
|
17
|
+
const misc = require('./misc-0197689b.js');
|
|
18
|
+
const pageResizeObserverSlimmer = require('./pageResizeObserverSlimmer-8d417925.js');
|
|
19
|
+
const timer = require('./timer-5f33058b.js');
|
|
20
|
+
const changeManager = require('./changeManager-7c13d64f.js');
|
|
21
|
+
const subStateObserverSlimmer = require('./subStateObserverSlimmer-48ad20a1.js');
|
|
22
|
+
const typeGuard = require('./typeGuard-b1a74545.js');
|
|
23
|
+
const stateBackgroundColorFormatter = require('./stateBackgroundColorFormatter-96a26ee7.js');
|
|
24
|
+
const pixel = require('./pixel-98f2a10c.js');
|
|
25
|
+
require('./iconManager-a9c2209d.js');
|
|
26
|
+
require('./dynamic-slimmer-d5ea4204.js');
|
|
27
|
+
require('./internalVegaEventManager-543c20cb.js');
|
|
28
|
+
require('./breakpoints-cb3291ba.js');
|
|
29
|
+
require('./ui-077fc009.js');
|
|
30
|
+
require('./ui-fa68545a.js');
|
|
31
|
+
require('./regex-c1f70fd4.js');
|
|
32
|
+
require('./typography-4560e7f1.js');
|
|
33
|
+
|
|
34
|
+
var __decorate$l = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {
|
|
35
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
36
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
37
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
38
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
39
|
+
};
|
|
40
|
+
/** The `VegaCalendarRenderer` class in TypeScript React renders switch panel and view components for a calendar using VegaSlimmer. */
|
|
41
|
+
class VegaCalendarRenderer extends globalSlimmerRegistry.VegaSlimmer {
|
|
42
|
+
/**
|
|
43
|
+
* The render function returns a Fragment containing the rendered output of switchPanelRenderer and viewRenderer components.
|
|
44
|
+
*
|
|
45
|
+
* @returns {HTMLElement} An HTMLElement containing the rendered output of the switchPanelRenderer and viewRenderer components.
|
|
46
|
+
*/
|
|
47
|
+
render() {
|
|
48
|
+
return (index.h(index.Fragment, null,
|
|
49
|
+
this.switchPanelRenderer.render(),
|
|
50
|
+
this.viewRenderer.render()));
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
__decorate$l([
|
|
54
|
+
globalSlimmerRegistry.MapToComponentField()
|
|
55
|
+
], VegaCalendarRenderer.prototype, "switchPanelRenderer", void 0);
|
|
56
|
+
__decorate$l([
|
|
57
|
+
globalSlimmerRegistry.MapToComponentField()
|
|
58
|
+
], VegaCalendarRenderer.prototype, "viewRenderer", void 0);
|
|
59
|
+
|
|
60
|
+
const chevronRight = {
|
|
61
|
+
icon: `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Pro 6.3.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2023 Fonticons, Inc. --><path fill="currentColor" d="M310.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-192 192c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L242.7 256 73.4 86.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l192 192z"/></svg>`,
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
const chevronLeft = {
|
|
65
|
+
icon: `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Pro 6.3.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2023 Fonticons, Inc. --><path fill="currentColor" d="M9.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l192 192c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L77.3 256 246.6 86.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-192 192z"/></svg>`,
|
|
66
|
+
};
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* get month name from the month number
|
|
70
|
+
*
|
|
71
|
+
* @param {Date} date the date object
|
|
72
|
+
* @param {boolean} isShortName short or long name
|
|
73
|
+
* @returns {string} the month English name
|
|
74
|
+
*/
|
|
75
|
+
function getMonthName(date, isShortName = false) {
|
|
76
|
+
return date.toLocaleDateString('en-US', { month: isShortName ? 'short' : 'long' });
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* The function `getTimeIndex` calculates the index of a given time string based on a specified time unit.
|
|
80
|
+
*
|
|
81
|
+
* @param {string} timeString - A string representing a time in the format "HH:MM", where HH is the hour and MM is the minutes.
|
|
82
|
+
* @param {number} [unit=15] - The `unit` parameter in the `getTimeIndex` function is used to specify
|
|
83
|
+
* the interval in minutes for dividing the day. By default, it is set to 15 minutes, meaning that the
|
|
84
|
+
* day will be divided into 15-minute intervals.
|
|
85
|
+
* @returns {number} the index of the given time string based on the specified time unit.
|
|
86
|
+
*/
|
|
87
|
+
function getTimeIndex(timeString, unit = 15) {
|
|
88
|
+
const [hour, minutes] = timeString.split(':');
|
|
89
|
+
return Math.round((Number(hour) * 60 + Number(minutes)) / unit);
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
var __decorate$k = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {
|
|
93
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
94
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
95
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
96
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
97
|
+
};
|
|
98
|
+
/** The `VegaCalendarSwitchPanelRenderer` class in TypeScript React renders a calendar switch panel with date navigation, view selection, and action buttons. */
|
|
99
|
+
class VegaCalendarSwitchPanelRenderer extends globalSlimmerRegistry.VegaSlimmer {
|
|
100
|
+
constructor() {
|
|
101
|
+
super(...arguments);
|
|
102
|
+
/**
|
|
103
|
+
* This function is responsible for updating the `viewMode` property of the `VegaCalendarSwitchPanelRenderer` class with the value extracted from the `input` parameter.
|
|
104
|
+
*
|
|
105
|
+
* @param {NotifyObserverPayload<VegaCalendarViewModeType>} input mark which view should be selected
|
|
106
|
+
*/
|
|
107
|
+
this.handleViewChange = (input) => {
|
|
108
|
+
this.calendarViewController.setViewMode(input.detail);
|
|
109
|
+
};
|
|
110
|
+
/**
|
|
111
|
+
* reset view content to today
|
|
112
|
+
*/
|
|
113
|
+
this.todayButtonClick = () => {
|
|
114
|
+
this.currentPeriodController.setCurrentPeriod(this.currentPeriod.now());
|
|
115
|
+
};
|
|
116
|
+
/**
|
|
117
|
+
* update view content after click next button
|
|
118
|
+
*/
|
|
119
|
+
this.nextButtonClick = () => {
|
|
120
|
+
this.currentPeriodController.setCurrentPeriod(this.currentPeriod.next());
|
|
121
|
+
};
|
|
122
|
+
/**
|
|
123
|
+
* update view content after click previous button
|
|
124
|
+
*/
|
|
125
|
+
this.prevButtonClick = () => {
|
|
126
|
+
this.currentPeriodController.setCurrentPeriod(this.currentPeriod.previous());
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* get the switch panel container element
|
|
131
|
+
*
|
|
132
|
+
* @returns {HTMLElement} container element
|
|
133
|
+
*/
|
|
134
|
+
getSwitchPanelRef() {
|
|
135
|
+
return this.switchPanelRef;
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* calendar switch panel with date switch, view switch, add new button, and more action components.
|
|
139
|
+
*
|
|
140
|
+
* @returns {HTMLElement} html element
|
|
141
|
+
*/
|
|
142
|
+
render() {
|
|
143
|
+
return (index.h("vega-flex", { direction: "row", gap: "size-16", justifyContent: "space-between", alignItems: "center", class: "calendar-switch-panel", ref: (node) => (this.switchPanelRef = node) },
|
|
144
|
+
this.renderDateSwitch(),
|
|
145
|
+
index.h("div", { class: "calendar-view-switch-container" }, this.renderViewSwitch())));
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* The `renderDateSwitch` function returns a container with buttons for switching dates and displaying the current date.
|
|
149
|
+
*
|
|
150
|
+
* @returns {HTMLDivElement} action button elements container.
|
|
151
|
+
*/
|
|
152
|
+
renderDateSwitch() {
|
|
153
|
+
return (index.h("div", { class: "calendar-date-switch-container" },
|
|
154
|
+
index.h("vega-button", { variant: "secondary", size: "small", ref: (button) => {
|
|
155
|
+
domNodeSubjectObserverFactory.DomNodeSubjectObserverFactory.addUniqueObserverToNode(button, vegaEventId.VegaClick, this.todayButtonClick);
|
|
156
|
+
} }, "Today"),
|
|
157
|
+
index.h("vega-button-circle", { variant: "secondary", size: "small", icon: internalIconManager.VegaInternalIconManager.getIconKey('chevron-left'), label: "previous", showTooltip: false, ref: (button) => {
|
|
158
|
+
domNodeSubjectObserverFactory.DomNodeSubjectObserverFactory.addUniqueObserverToNode(button, vegaEventId.VegaClick, this.prevButtonClick);
|
|
159
|
+
} }),
|
|
160
|
+
index.h("vega-button-circle", { variant: "secondary", size: "small", icon: internalIconManager.VegaInternalIconManager.getIconKey('chevron-right'), label: "next", showTooltip: false, ref: (button) => {
|
|
161
|
+
domNodeSubjectObserverFactory.DomNodeSubjectObserverFactory.addUniqueObserverToNode(button, vegaEventId.VegaClick, this.nextButtonClick);
|
|
162
|
+
} }),
|
|
163
|
+
this.renderCurrentPeriod()));
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* The function `renderCurrentPeriod` returns an HTML element displaying the view date content summary info.
|
|
167
|
+
*
|
|
168
|
+
* @returns {HTMLVegaFontElement} The text content inside the element is "Current Date Test".
|
|
169
|
+
*/
|
|
170
|
+
renderCurrentPeriod() {
|
|
171
|
+
return (index.h("vega-font", { class: "calendar-current-date", variant: "font-field-label", color: "text-primary" }, this.getViewDateSummary()));
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* The function `renderViewSwitch` returns a JSX element for rendering a segment control component in a TypeScript React application.
|
|
175
|
+
*
|
|
176
|
+
* @returns {HTMLElement} An HTMLElement containing a vega-segment-control element with specific attributes and event handling.
|
|
177
|
+
*/
|
|
178
|
+
renderViewSwitch() {
|
|
179
|
+
return (index.h("vega-segment-control", { segments: VegaCalendarSwitchPanelRenderer.views, size: "small", variant: "text-only", selected: this.viewMode, ref: (node) => {
|
|
180
|
+
domNodeSubjectObserverFactory.DomNodeSubjectObserverFactory.addUniqueObserverToNode(node, vegaEventId.VegaChange, this.handleViewChange);
|
|
181
|
+
} }));
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Get the view content date summary info, such as `January, 2024` or `10 January, 2024` or `28 December, 2023 - 3 January, 2024`
|
|
185
|
+
*
|
|
186
|
+
* @returns {string} string
|
|
187
|
+
*/
|
|
188
|
+
getViewDateSummary() {
|
|
189
|
+
const currentDate = this.currentPeriod.current;
|
|
190
|
+
let result = '';
|
|
191
|
+
switch (this.viewMode) {
|
|
192
|
+
case 'day':
|
|
193
|
+
result = `${currentDate.date} ${getMonthName(currentDate.toDate())}, ${currentDate.year}`;
|
|
194
|
+
break;
|
|
195
|
+
case 'week': {
|
|
196
|
+
const start = this.currentPeriod.startDate;
|
|
197
|
+
const end = this.currentPeriod.endDate;
|
|
198
|
+
result = `${start.date} ${getMonthName(start.toDate())}${start.year === end.year ? '' : ', ' + start.year} - ${end.date} ${getMonthName(end.toDate())}, ${end.year}`;
|
|
199
|
+
break;
|
|
200
|
+
}
|
|
201
|
+
case 'month':
|
|
202
|
+
result = `${getMonthName(currentDate.toDate())}, ${currentDate.year}`;
|
|
203
|
+
break;
|
|
204
|
+
}
|
|
205
|
+
return result;
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
(() => {
|
|
209
|
+
internalIconManager.VegaInternalIconManager.register({
|
|
210
|
+
'chevron-right': chevronRight,
|
|
211
|
+
'chevron-left': chevronLeft,
|
|
212
|
+
});
|
|
213
|
+
})();
|
|
214
|
+
VegaCalendarSwitchPanelRenderer.views = [
|
|
215
|
+
{ text: 'Day', key: 'day' },
|
|
216
|
+
{ text: 'Week', key: 'week' },
|
|
217
|
+
{ text: 'Month', key: 'month' },
|
|
218
|
+
];
|
|
219
|
+
__decorate$k([
|
|
220
|
+
globalSlimmerRegistry.MapToComponentField()
|
|
221
|
+
], VegaCalendarSwitchPanelRenderer.prototype, "viewMode", void 0);
|
|
222
|
+
__decorate$k([
|
|
223
|
+
globalSlimmerRegistry.MapToComponentField()
|
|
224
|
+
], VegaCalendarSwitchPanelRenderer.prototype, "calendarView", void 0);
|
|
225
|
+
__decorate$k([
|
|
226
|
+
globalSlimmerRegistry.MapToComponentField()
|
|
227
|
+
], VegaCalendarSwitchPanelRenderer.prototype, "currentPeriod", void 0);
|
|
228
|
+
__decorate$k([
|
|
229
|
+
globalSlimmerRegistry.MapToComponentField()
|
|
230
|
+
], VegaCalendarSwitchPanelRenderer.prototype, "currentPeriodController", void 0);
|
|
231
|
+
__decorate$k([
|
|
232
|
+
globalSlimmerRegistry.MapToComponentField()
|
|
233
|
+
], VegaCalendarSwitchPanelRenderer.prototype, "calendarViewController", void 0);
|
|
234
|
+
|
|
235
|
+
var __decorate$j = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {
|
|
236
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
237
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
238
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
239
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
240
|
+
};
|
|
241
|
+
/** renders different views based on the specified view mode using month, week, and day view render. */
|
|
242
|
+
class VegaCalendarViewRenderer extends globalSlimmerRegistry.VegaSlimmer {
|
|
243
|
+
/**
|
|
244
|
+
* render the calendar month/week/day view
|
|
245
|
+
*
|
|
246
|
+
* @returns {HTMLElement} html element
|
|
247
|
+
*/
|
|
248
|
+
render() {
|
|
249
|
+
return (index.h("div", { class: `calendar-view calendar-view-${this.viewMode}` }, this.viewMode === 'month'
|
|
250
|
+
? this.monthViewRenderer.render()
|
|
251
|
+
: this.viewWithTimeRenderer.render()));
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
__decorate$j([
|
|
255
|
+
globalSlimmerRegistry.MapToComponentField()
|
|
256
|
+
], VegaCalendarViewRenderer.prototype, "viewMode", void 0);
|
|
257
|
+
__decorate$j([
|
|
258
|
+
globalSlimmerRegistry.MapToComponentField()
|
|
259
|
+
], VegaCalendarViewRenderer.prototype, "monthViewRenderer", void 0);
|
|
260
|
+
__decorate$j([
|
|
261
|
+
globalSlimmerRegistry.MapToComponentField()
|
|
262
|
+
], VegaCalendarViewRenderer.prototype, "viewWithTimeRenderer", void 0);
|
|
263
|
+
|
|
264
|
+
var __decorate$i = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {
|
|
265
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
266
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
267
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
268
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
269
|
+
};
|
|
270
|
+
/** The code provided is defining a TypeScript class called `VegaCalendarMonthViewRenderer` that extends `VegaSlimmer`. This class is responsible for rendering a month view of a calendar component. */
|
|
271
|
+
class VegaCalendarMonthViewRenderer extends globalSlimmerRegistry.VegaSlimmer {
|
|
272
|
+
/**
|
|
273
|
+
* the HTML elements that represent the month view of a calendar component.
|
|
274
|
+
*
|
|
275
|
+
* @returns {HTMLElement} the month view calendar content
|
|
276
|
+
*/
|
|
277
|
+
render() {
|
|
278
|
+
const weekHead = this.calendarView.weekdays;
|
|
279
|
+
return (index.h("div", { class: "calendar-view-month-container" },
|
|
280
|
+
index.h("div", { class: "calendar-view-row calendar-view-title border-divider-bottom" }, weekHead.map((title) => (index.h("div", { key: title }, title)))),
|
|
281
|
+
this.renderMonthViewContent()));
|
|
282
|
+
}
|
|
283
|
+
/**
|
|
284
|
+
* generating the HTML elements that represent the content of the month view in a calendar component
|
|
285
|
+
*
|
|
286
|
+
* @returns {HTMLElement[]} month view content and event content
|
|
287
|
+
*/
|
|
288
|
+
renderMonthViewContent() {
|
|
289
|
+
const monthSource = this.calendarView.dateItems;
|
|
290
|
+
const currentDate = this.currentPeriod.current;
|
|
291
|
+
return monthSource.map((dateArray, index$1) => {
|
|
292
|
+
const eventsArray = this.monthEventRenderer.getCurrentRowEvents(dateArray);
|
|
293
|
+
const displayEventsArray = this.monthEventRenderer.filterRowDisplayEvents(eventsArray);
|
|
294
|
+
return (index.h("div", { key: index$1, class: "calendar-view-row border-divider-bottom" }, dateArray.map((item, itemIndex) => {
|
|
295
|
+
return (index.h("div", { class: {
|
|
296
|
+
'row-cell border-divider-right': true,
|
|
297
|
+
'current-month-day': item.compare(currentDate).inMonth,
|
|
298
|
+
'active': item.isToday(),
|
|
299
|
+
'disabled': false,
|
|
300
|
+
}, key: `${item.month}-${item.date}` },
|
|
301
|
+
this.renderDateBlock(item),
|
|
302
|
+
this.monthEventRenderer.render(item, eventsArray[itemIndex], displayEventsArray[itemIndex], itemIndex)));
|
|
303
|
+
})));
|
|
304
|
+
});
|
|
305
|
+
}
|
|
306
|
+
/**
|
|
307
|
+
* It takes a `CalendarDate` object as a parameter and returns an HTML element representing a date block in the calendar view.
|
|
308
|
+
*
|
|
309
|
+
* @param {CalendarDate} item the day object
|
|
310
|
+
* @returns {HTMLElement} the date block element
|
|
311
|
+
*/
|
|
312
|
+
renderDateBlock(item) {
|
|
313
|
+
const isMonthFirstDay = item.date === 1;
|
|
314
|
+
return (index.h("div", { class: "date" },
|
|
315
|
+
isMonthFirstDay && index.h("div", { class: "month-block" }, getMonthName(item.toDate(), true)),
|
|
316
|
+
index.h("div", { role: "button", tabIndex: 0, class: "grid-col" }, item.date)));
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
__decorate$i([
|
|
320
|
+
globalSlimmerRegistry.MapToComponentField()
|
|
321
|
+
], VegaCalendarMonthViewRenderer.prototype, "viewMode", void 0);
|
|
322
|
+
__decorate$i([
|
|
323
|
+
globalSlimmerRegistry.MapToComponentField()
|
|
324
|
+
], VegaCalendarMonthViewRenderer.prototype, "calendarView", void 0);
|
|
325
|
+
__decorate$i([
|
|
326
|
+
globalSlimmerRegistry.MapToComponentField()
|
|
327
|
+
], VegaCalendarMonthViewRenderer.prototype, "currentPeriod", void 0);
|
|
328
|
+
__decorate$i([
|
|
329
|
+
globalSlimmerRegistry.MapToComponentField()
|
|
330
|
+
], VegaCalendarMonthViewRenderer.prototype, "calendarViewController", void 0);
|
|
331
|
+
__decorate$i([
|
|
332
|
+
globalSlimmerRegistry.MapToComponentField()
|
|
333
|
+
], VegaCalendarMonthViewRenderer.prototype, "monthEventRenderer", void 0);
|
|
334
|
+
|
|
335
|
+
var __decorate$h = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {
|
|
336
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
337
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
338
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
339
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
340
|
+
};
|
|
341
|
+
/** The `VegaCalendarViewWithTimeRenderer` class in TypeScript React renders a day view for a calendar component with title, content, and hour blocks. */
|
|
342
|
+
class VegaCalendarViewWithTimeRenderer extends globalSlimmerRegistry.VegaSlimmer {
|
|
343
|
+
/**
|
|
344
|
+
* The render function in TypeScript React returns an array of HTMLElements containing the week calendar view for a specific day.
|
|
345
|
+
*
|
|
346
|
+
* @returns {HTMLElement} An array of HTMLElement elements containing the rendered content of a calendar view for a
|
|
347
|
+
* specific day in the week. The content includes the title and the main content of the calendar view
|
|
348
|
+
* for that day.
|
|
349
|
+
*/
|
|
350
|
+
render() {
|
|
351
|
+
return (index.h("div", { class: "calendar-view-container" },
|
|
352
|
+
this.renderViewTitle(),
|
|
353
|
+
this.renderViewContent()));
|
|
354
|
+
}
|
|
355
|
+
/**
|
|
356
|
+
* The function `renderViewTitle` renders a calendar view title and events based on the provided source data.
|
|
357
|
+
*
|
|
358
|
+
* @returns {HTMLElement} The `renderViewTitle` function returns an HTML element (HTMLElement) that contains a calendar view title container with rows for each day's information.
|
|
359
|
+
*/
|
|
360
|
+
renderViewTitle() {
|
|
361
|
+
const source = this.calendarView.dateItems[0];
|
|
362
|
+
const weekHead = this.calendarView.weekdays;
|
|
363
|
+
return (index.h("div", { class: "calendar-view-title-container" },
|
|
364
|
+
index.h("div", { class: "calendar-view-row" },
|
|
365
|
+
index.h("div", { class: "time-line-empty" }),
|
|
366
|
+
index.h("div", { class: "calendar-view-title" }, source.map((item, index$1) => (index.h("div", { key: item.date, class: { active: item.isToday() } },
|
|
367
|
+
index.h("div", null, weekHead[index$1]),
|
|
368
|
+
index.h("div", { class: "week-day" }, item.date)))))),
|
|
369
|
+
index.h("div", { class: "calendar-view-row calendar-view-event-all-container border-divider-bottom" },
|
|
370
|
+
index.h("div", { class: "time-line-all" }, "All Day"),
|
|
371
|
+
this.dayViewFullDayEventRenderer.render())));
|
|
372
|
+
}
|
|
373
|
+
/**
|
|
374
|
+
* The `renderViewContent` function in TypeScript React renders a calendar view with day blocks and time markers based on the provided data.
|
|
375
|
+
*
|
|
376
|
+
* @returns {HTMLElement} An HTMLElement containing a calendar view row with day containers, a timeline renderer, a content container, a day list, and hour blocks for each item in the source array.
|
|
377
|
+
*/
|
|
378
|
+
renderViewContent() {
|
|
379
|
+
const source = this.calendarView.dateItems[0];
|
|
380
|
+
return (index.h("div", { class: "calendar-view-row calendar-view-day-container" },
|
|
381
|
+
this.timeLineRenderer.render(),
|
|
382
|
+
index.h("div", { class: "calendar-view-content-container" },
|
|
383
|
+
index.h("div", { class: "calendar-view-content" }, source.map((item) => {
|
|
384
|
+
return (index.h("div", { class: "grid-col border-divider-left", key: item.date },
|
|
385
|
+
index.h("div", { class: "hour-empty border-divider-top" }),
|
|
386
|
+
this.renderHourBlock()));
|
|
387
|
+
})),
|
|
388
|
+
this.dayViewTimedEventRenderer.render(),
|
|
389
|
+
this.timeLineRenderer.renderTimeMarker(source))));
|
|
390
|
+
}
|
|
391
|
+
/**
|
|
392
|
+
* The function `renderHourBlock` returns an array of HTML elements representing hour blocks with time information.
|
|
393
|
+
*
|
|
394
|
+
* @returns {HTMLElement[]} An array of HTMLElements is being returned. Each HTMLElement represents an hour block with a time value inside a div element.
|
|
395
|
+
*/
|
|
396
|
+
renderHourBlock() {
|
|
397
|
+
const timeLineSource = Array(24).fill('');
|
|
398
|
+
return timeLineSource.map(() => {
|
|
399
|
+
return index.h("div", { class: "grid-cell border-divider-top" });
|
|
400
|
+
});
|
|
401
|
+
}
|
|
402
|
+
}
|
|
403
|
+
__decorate$h([
|
|
404
|
+
globalSlimmerRegistry.MapToComponentField()
|
|
405
|
+
], VegaCalendarViewWithTimeRenderer.prototype, "viewMode", void 0);
|
|
406
|
+
__decorate$h([
|
|
407
|
+
globalSlimmerRegistry.MapToComponentField()
|
|
408
|
+
], VegaCalendarViewWithTimeRenderer.prototype, "timeLineRenderer", void 0);
|
|
409
|
+
__decorate$h([
|
|
410
|
+
globalSlimmerRegistry.MapToComponentField()
|
|
411
|
+
], VegaCalendarViewWithTimeRenderer.prototype, "dayViewTimedEventRenderer", void 0);
|
|
412
|
+
__decorate$h([
|
|
413
|
+
globalSlimmerRegistry.MapToComponentField()
|
|
414
|
+
], VegaCalendarViewWithTimeRenderer.prototype, "dayViewFullDayEventRenderer", void 0);
|
|
415
|
+
__decorate$h([
|
|
416
|
+
globalSlimmerRegistry.MapToComponentField()
|
|
417
|
+
], VegaCalendarViewWithTimeRenderer.prototype, "calendarView", void 0);
|
|
418
|
+
__decorate$h([
|
|
419
|
+
globalSlimmerRegistry.MapToComponentField()
|
|
420
|
+
], VegaCalendarViewWithTimeRenderer.prototype, "calendarViewController", void 0);
|
|
421
|
+
|
|
422
|
+
var __decorate$g = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {
|
|
423
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
424
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
425
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
426
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
427
|
+
};
|
|
428
|
+
/** The `VegaCalendarTimeLineRenderer` class in TypeScript React renders a time line with custom time format options and includes methods for rendering time markers and the time line itself. */
|
|
429
|
+
class VegaCalendarTimeLineRenderer extends globalSlimmerRegistry.VegaSlimmer {
|
|
430
|
+
/**
|
|
431
|
+
* takes an array of `CalendarDate` objects as input and returns an HTML element
|
|
432
|
+
*
|
|
433
|
+
* @param {CalendarDate[]} source
|
|
434
|
+
* @returns {HTMLElement} the html element
|
|
435
|
+
*/
|
|
436
|
+
renderTimeMarker(source) {
|
|
437
|
+
const isVisible = source.findIndex((calendarDate) => calendarDate.isToday()) >= 0;
|
|
438
|
+
return (index.h("div", { class: {
|
|
439
|
+
'time-marker-container': true,
|
|
440
|
+
'hidden': !isVisible,
|
|
441
|
+
} },
|
|
442
|
+
index.h("div", { class: "time-marker", style: { top: this.getTimeMarkerPosition() }, ref: (div) => (this.timeMarkerRef = div) }, source.map((item) => {
|
|
443
|
+
return index.h("div", { key: item.date, class: { active: item.isToday() } });
|
|
444
|
+
}))));
|
|
445
|
+
}
|
|
446
|
+
/**
|
|
447
|
+
* rendering the time line component as an HTML element
|
|
448
|
+
*
|
|
449
|
+
* @returns {HTMLElement} the html element
|
|
450
|
+
*/
|
|
451
|
+
render() {
|
|
452
|
+
const timeLineSource = this.getTimeLineTitles();
|
|
453
|
+
return (index.h("div", { class: "time-line", ref: (div) => (this.timeLineRef = div) },
|
|
454
|
+
index.h("div", { class: "hour-empty" }),
|
|
455
|
+
timeLineSource.map((time, index$1) => {
|
|
456
|
+
return (index.h("div", { key: time },
|
|
457
|
+
index.h("div", { class: "time-text", "data-time": index$1 === 0 ? 24 : index$1 }, time)));
|
|
458
|
+
})));
|
|
459
|
+
}
|
|
460
|
+
/**
|
|
461
|
+
* scroll to current time line block if change view mode to week or day
|
|
462
|
+
*
|
|
463
|
+
* @param {VegaCalendarViewModeType} viewMode the view mode
|
|
464
|
+
*/
|
|
465
|
+
updateTimeLine(viewMode) {
|
|
466
|
+
this.scrollToTargetTimeBlock(viewMode);
|
|
467
|
+
this.syncTimeMarkerPosition(viewMode);
|
|
468
|
+
}
|
|
469
|
+
/**
|
|
470
|
+
* remove setInterval when component destroy
|
|
471
|
+
*/
|
|
472
|
+
clearTimer() {
|
|
473
|
+
clearInterval(this.timeMarkerPositionTimer);
|
|
474
|
+
}
|
|
475
|
+
/**
|
|
476
|
+
* Add the time mark position update logic if the component add back to page
|
|
477
|
+
*/
|
|
478
|
+
updateTimeLineIfComponentAddBack() {
|
|
479
|
+
this.syncTimeMarkerPosition(this.viewMode);
|
|
480
|
+
}
|
|
481
|
+
/**
|
|
482
|
+
* The function `getTimeMarkerPosition` calculates the position of the current time marker as a percentage of the day.
|
|
483
|
+
*
|
|
484
|
+
* @returns {string} a string representing the current time marker position as a percentage of the day.
|
|
485
|
+
*/
|
|
486
|
+
getTimeMarkerPosition() {
|
|
487
|
+
const now = new Date();
|
|
488
|
+
const minutesOneDay = 24 * 60;
|
|
489
|
+
return ((now.getHours() * 60 + now.getMinutes()) / minutesOneDay) * 100 + '%';
|
|
490
|
+
}
|
|
491
|
+
/**
|
|
492
|
+
* The function `getTimeLineTitles` generates a time line array based on the specified time format (24-hour) and stores it in the `timeLineSource` property.
|
|
493
|
+
*
|
|
494
|
+
* @returns {string[]} returns an array of strings representing the time line
|
|
495
|
+
*/
|
|
496
|
+
getTimeLineTitles() {
|
|
497
|
+
const timeLine = [];
|
|
498
|
+
if (this.timeFormat === '12-hour') {
|
|
499
|
+
timeLine.push('12 AM');
|
|
500
|
+
for (let i = 1; i < 12; i++) {
|
|
501
|
+
timeLine.push(`${i} AM`);
|
|
502
|
+
}
|
|
503
|
+
timeLine.push('12 PM');
|
|
504
|
+
for (let i = 1; i < 12; i++) {
|
|
505
|
+
timeLine.push(`${i} PM`);
|
|
506
|
+
}
|
|
507
|
+
}
|
|
508
|
+
else {
|
|
509
|
+
for (let i = 0; i < 24; i++) {
|
|
510
|
+
timeLine.push(date.pad(i));
|
|
511
|
+
}
|
|
512
|
+
}
|
|
513
|
+
return timeLine;
|
|
514
|
+
}
|
|
515
|
+
/*
|
|
516
|
+
* The below method is e2e-test covered in
|
|
517
|
+
* @see{module:vega-calendar-scroll-to-current-time}
|
|
518
|
+
*/
|
|
519
|
+
/* istanbul ignore next */
|
|
520
|
+
/**
|
|
521
|
+
* Update the time marker position with the time
|
|
522
|
+
*
|
|
523
|
+
* @param {VegaCalendarViewModeType} viewMode view mode value
|
|
524
|
+
*/
|
|
525
|
+
syncTimeMarkerPosition(viewMode) {
|
|
526
|
+
clearInterval(this.timeMarkerPositionTimer);
|
|
527
|
+
if (viewMode !== 'month') {
|
|
528
|
+
this.timeMarkerPositionTimer = setInterval(() => {
|
|
529
|
+
if (this.timeMarkerRef) {
|
|
530
|
+
this.timeMarkerRef.style.top = this.getTimeMarkerPosition();
|
|
531
|
+
}
|
|
532
|
+
}, 60 * 1000);
|
|
533
|
+
}
|
|
534
|
+
}
|
|
535
|
+
/*
|
|
536
|
+
* The below method is e2e-test covered in
|
|
537
|
+
* @see{module:vega-calendar-scroll-to-current-time}
|
|
538
|
+
*/
|
|
539
|
+
/* istanbul ignore next */
|
|
540
|
+
/**
|
|
541
|
+
* scroll the time line in to current view
|
|
542
|
+
*
|
|
543
|
+
* @param {VegaCalendarViewModeType} viewMode view mode value
|
|
544
|
+
*/
|
|
545
|
+
scrollToTargetTimeBlock(viewMode) {
|
|
546
|
+
if (viewMode !== 'month') {
|
|
547
|
+
// add setTimeout here to make sure call the scroll into view after time line rendered.
|
|
548
|
+
setTimeout(() => {
|
|
549
|
+
var _a, _b;
|
|
550
|
+
const hour = new Date().getHours();
|
|
551
|
+
(_b = (_a = this.timeLineRef) === null || _a === void 0 ? void 0 : _a.querySelector(`[data-time='${hour < 23 ? hour + 1 : hour}']`)) === null || _b === void 0 ? void 0 : _b.scrollIntoView({ block: 'end' });
|
|
552
|
+
}, 0);
|
|
553
|
+
}
|
|
554
|
+
}
|
|
555
|
+
}
|
|
556
|
+
__decorate$g([
|
|
557
|
+
globalSlimmerRegistry.MapToComponentField()
|
|
558
|
+
], VegaCalendarTimeLineRenderer.prototype, "timeFormat", void 0);
|
|
559
|
+
__decorate$g([
|
|
560
|
+
globalSlimmerRegistry.MapToComponentField()
|
|
561
|
+
], VegaCalendarTimeLineRenderer.prototype, "viewMode", void 0);
|
|
562
|
+
__decorate$g([
|
|
563
|
+
globalSlimmerRegistry.MapToComponentMethod('watchViewModeChange')
|
|
564
|
+
], VegaCalendarTimeLineRenderer.prototype, "updateTimeLine", null);
|
|
565
|
+
__decorate$g([
|
|
566
|
+
globalSlimmerRegistry.MapToComponentMethod('disconnectedCallback')
|
|
567
|
+
], VegaCalendarTimeLineRenderer.prototype, "clearTimer", null);
|
|
568
|
+
__decorate$g([
|
|
569
|
+
globalSlimmerRegistry.MapToComponentMethod('connectedCallback')
|
|
570
|
+
], VegaCalendarTimeLineRenderer.prototype, "updateTimeLineIfComponentAddBack", null);
|
|
571
|
+
|
|
572
|
+
/**
|
|
573
|
+
* Get a week days array
|
|
574
|
+
*
|
|
575
|
+
* @param {number} firstWeekDay - The first week day (0: Sunday, 1: Monday, ...)
|
|
576
|
+
* @returns {number[]} - The week days array
|
|
577
|
+
*/
|
|
578
|
+
const getWeekdays = (firstWeekDay = 0) => {
|
|
579
|
+
const weekdays = [0, 1, 2, 3, 4, 5, 6];
|
|
580
|
+
return weekdays.concat(weekdays).slice(firstWeekDay, firstWeekDay + 7);
|
|
581
|
+
};
|
|
582
|
+
|
|
583
|
+
/**
|
|
584
|
+
* Calendar view generator abstract class.
|
|
585
|
+
*/
|
|
586
|
+
class CalendarViewGenerator {
|
|
587
|
+
constructor() {
|
|
588
|
+
this.WEEKDAYS_SHORT = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];
|
|
589
|
+
this.weekdays = getWeekdays();
|
|
590
|
+
}
|
|
591
|
+
/**
|
|
592
|
+
* Get weekday names.
|
|
593
|
+
*
|
|
594
|
+
* @returns {string[]} - The weekday strings
|
|
595
|
+
*/
|
|
596
|
+
getWeekdayNames() {
|
|
597
|
+
return this.WEEKDAYS_SHORT;
|
|
598
|
+
}
|
|
599
|
+
/**
|
|
600
|
+
* Generate calendar dates
|
|
601
|
+
*
|
|
602
|
+
* @param {CalendarPeriod} period - The calendar period
|
|
603
|
+
* @returns {Date[]} - The date result
|
|
604
|
+
*/
|
|
605
|
+
generateDates(period) {
|
|
606
|
+
const cursor = period.startDate.toDate();
|
|
607
|
+
const dates = [];
|
|
608
|
+
for (let i = 0; i < period.count; i++) {
|
|
609
|
+
dates.push(new Date(cursor));
|
|
610
|
+
cursor.setDate(cursor.getDate() + 1);
|
|
611
|
+
}
|
|
612
|
+
return dates;
|
|
613
|
+
}
|
|
614
|
+
/**
|
|
615
|
+
* Generate calendar head
|
|
616
|
+
*
|
|
617
|
+
* @returns {string[]} - The data of week head
|
|
618
|
+
*/
|
|
619
|
+
generateWeekHead() {
|
|
620
|
+
return this.weekdays.map((day) => this.getWeekdayNames()[day]);
|
|
621
|
+
}
|
|
622
|
+
}
|
|
623
|
+
|
|
624
|
+
/**
|
|
625
|
+
* Calendar view
|
|
626
|
+
*/
|
|
627
|
+
class CalendarView {
|
|
628
|
+
constructor(weekdays, dateItems) {
|
|
629
|
+
this._weekdays = weekdays;
|
|
630
|
+
this._dateItems = dateItems;
|
|
631
|
+
}
|
|
632
|
+
/**
|
|
633
|
+
* The week head of the calendar view
|
|
634
|
+
*
|
|
635
|
+
* @type {string[]}
|
|
636
|
+
*/
|
|
637
|
+
get weekdays() {
|
|
638
|
+
return this._weekdays;
|
|
639
|
+
}
|
|
640
|
+
/**
|
|
641
|
+
* The date items of the calendar view
|
|
642
|
+
*
|
|
643
|
+
* @type {CalendarDate[][]}
|
|
644
|
+
*/
|
|
645
|
+
get dateItems() {
|
|
646
|
+
return this._dateItems;
|
|
647
|
+
}
|
|
648
|
+
}
|
|
649
|
+
|
|
650
|
+
/**
|
|
651
|
+
* Day view calendar generator
|
|
652
|
+
*/
|
|
653
|
+
class DayViewGenerator extends CalendarViewGenerator {
|
|
654
|
+
/**
|
|
655
|
+
* @inheritDoc
|
|
656
|
+
*/
|
|
657
|
+
generate(period) {
|
|
658
|
+
return new CalendarView([this.generateWeekHead()[period.current.toDate().getDay()]], [[period.current]]);
|
|
659
|
+
}
|
|
660
|
+
}
|
|
661
|
+
|
|
662
|
+
/**
|
|
663
|
+
* Calendar date class
|
|
664
|
+
*/
|
|
665
|
+
class CalendarDate {
|
|
666
|
+
constructor(year, month, date) {
|
|
667
|
+
this._date = date;
|
|
668
|
+
this._month = month;
|
|
669
|
+
this._year = year;
|
|
670
|
+
}
|
|
671
|
+
/**
|
|
672
|
+
* Create a calendar date from a Date object
|
|
673
|
+
*
|
|
674
|
+
* @param {Date} date - The Date object
|
|
675
|
+
* @returns {CalendarDate} - Return a CalendarDate object
|
|
676
|
+
*/
|
|
677
|
+
static from(date) {
|
|
678
|
+
return new CalendarDate(date.getFullYear(), date.getMonth() + 1, date.getDate());
|
|
679
|
+
}
|
|
680
|
+
/**
|
|
681
|
+
* The year of the calendar date
|
|
682
|
+
*
|
|
683
|
+
* @type {number}
|
|
684
|
+
*/
|
|
685
|
+
get year() {
|
|
686
|
+
return this._year;
|
|
687
|
+
}
|
|
688
|
+
set year(value) {
|
|
689
|
+
this._year = value;
|
|
690
|
+
}
|
|
691
|
+
/**
|
|
692
|
+
* The month of the calendar date
|
|
693
|
+
*
|
|
694
|
+
* @type {number}
|
|
695
|
+
*/
|
|
696
|
+
get month() {
|
|
697
|
+
return this._month;
|
|
698
|
+
}
|
|
699
|
+
set month(value) {
|
|
700
|
+
this._month = value;
|
|
701
|
+
}
|
|
702
|
+
/**
|
|
703
|
+
* The date of the calendar date
|
|
704
|
+
*
|
|
705
|
+
* @type {number}
|
|
706
|
+
*/
|
|
707
|
+
get date() {
|
|
708
|
+
return this._date;
|
|
709
|
+
}
|
|
710
|
+
set date(value) {
|
|
711
|
+
this._date = value;
|
|
712
|
+
}
|
|
713
|
+
/**
|
|
714
|
+
* Verify whether the calendar date is today
|
|
715
|
+
*
|
|
716
|
+
* @returns {boolean} - Return true if the calendar date is today. Otherwise, return false.
|
|
717
|
+
*/
|
|
718
|
+
isToday() {
|
|
719
|
+
const today = new Date();
|
|
720
|
+
return (today.getFullYear() === this.year &&
|
|
721
|
+
today.getMonth() + 1 === this.month &&
|
|
722
|
+
today.getDate() === this.date);
|
|
723
|
+
}
|
|
724
|
+
/**
|
|
725
|
+
* Convert the calendar date to a Date object
|
|
726
|
+
*
|
|
727
|
+
* @returns {Date} - Return a Date object
|
|
728
|
+
*/
|
|
729
|
+
toDate() {
|
|
730
|
+
return new Date(this.year, this.month - 1, this.date);
|
|
731
|
+
}
|
|
732
|
+
/**
|
|
733
|
+
* Compare with another calendar date
|
|
734
|
+
*
|
|
735
|
+
* @param {CalendarDate} date - The calendar date to compare with
|
|
736
|
+
* @returns {DateCompareResult} - Return a DateCompareResult object
|
|
737
|
+
*/
|
|
738
|
+
compare(date) {
|
|
739
|
+
const { year, month } = date;
|
|
740
|
+
const result = {
|
|
741
|
+
isPreviousMonth: false,
|
|
742
|
+
inMonth: false,
|
|
743
|
+
isNextMonth: false,
|
|
744
|
+
};
|
|
745
|
+
if (this.year === year) {
|
|
746
|
+
if (this.month < month) {
|
|
747
|
+
result.isPreviousMonth = true;
|
|
748
|
+
}
|
|
749
|
+
else if (this.month > month) {
|
|
750
|
+
result.isNextMonth = true;
|
|
751
|
+
}
|
|
752
|
+
else {
|
|
753
|
+
result.inMonth = true;
|
|
754
|
+
}
|
|
755
|
+
}
|
|
756
|
+
else if (this.year > year) {
|
|
757
|
+
result.isNextMonth = true;
|
|
758
|
+
}
|
|
759
|
+
else {
|
|
760
|
+
result.isPreviousMonth = true;
|
|
761
|
+
}
|
|
762
|
+
return result;
|
|
763
|
+
}
|
|
764
|
+
}
|
|
765
|
+
|
|
766
|
+
/**
|
|
767
|
+
* Calendar week view generator
|
|
768
|
+
*/
|
|
769
|
+
class WeekViewGenerator extends CalendarViewGenerator {
|
|
770
|
+
/**
|
|
771
|
+
* @inheritDoc
|
|
772
|
+
*/
|
|
773
|
+
generate(period) {
|
|
774
|
+
const dates = this.generateDates(period);
|
|
775
|
+
return new CalendarView(this.generateWeekHead(), [dates.map(CalendarDate.from)]);
|
|
776
|
+
}
|
|
777
|
+
}
|
|
778
|
+
|
|
779
|
+
/**
|
|
780
|
+
* Calendar month view generator
|
|
781
|
+
*/
|
|
782
|
+
class MonthViewGenerator extends CalendarViewGenerator {
|
|
783
|
+
/**
|
|
784
|
+
* @inheritDoc
|
|
785
|
+
*/
|
|
786
|
+
generate(period) {
|
|
787
|
+
const calendarDates = [];
|
|
788
|
+
let week = [];
|
|
789
|
+
const dates = this.generateDates(period);
|
|
790
|
+
dates.forEach((date, i) => {
|
|
791
|
+
if (!(i % 7)) {
|
|
792
|
+
calendarDates[i / 7] = week = [];
|
|
793
|
+
}
|
|
794
|
+
const item = CalendarDate.from(date);
|
|
795
|
+
week.push(item);
|
|
796
|
+
});
|
|
797
|
+
return new CalendarView(this.generateWeekHead(), calendarDates);
|
|
798
|
+
}
|
|
799
|
+
}
|
|
800
|
+
|
|
801
|
+
/**
|
|
802
|
+
* CalendarPeriod is an abstract class that represents a period of date for calendar.
|
|
803
|
+
*/
|
|
804
|
+
class CalendarPeriod {
|
|
805
|
+
constructor(count, current) {
|
|
806
|
+
this._count = count;
|
|
807
|
+
this._current = current ? current : CalendarDate.from(new Date());
|
|
808
|
+
this.calculatePeriod(this._current);
|
|
809
|
+
}
|
|
810
|
+
/**
|
|
811
|
+
* The current date of the period.
|
|
812
|
+
*
|
|
813
|
+
* @type {CalendarDate}
|
|
814
|
+
*/
|
|
815
|
+
get current() {
|
|
816
|
+
return this._current;
|
|
817
|
+
}
|
|
818
|
+
/**
|
|
819
|
+
* The start date of the period
|
|
820
|
+
*
|
|
821
|
+
* @type {CalendarDate}
|
|
822
|
+
*/
|
|
823
|
+
get startDate() {
|
|
824
|
+
return this._startDate;
|
|
825
|
+
}
|
|
826
|
+
/**
|
|
827
|
+
* The end date of the period
|
|
828
|
+
*
|
|
829
|
+
* @type {CalendarDate}
|
|
830
|
+
*/
|
|
831
|
+
get endDate() {
|
|
832
|
+
return this._endDate;
|
|
833
|
+
}
|
|
834
|
+
/**
|
|
835
|
+
* The count of the period
|
|
836
|
+
*
|
|
837
|
+
* @type {number}
|
|
838
|
+
*/
|
|
839
|
+
get count() {
|
|
840
|
+
return this._count;
|
|
841
|
+
}
|
|
842
|
+
/**
|
|
843
|
+
* Go to a specific date.
|
|
844
|
+
*
|
|
845
|
+
* @param {CalendarDate} date - The date to go to.
|
|
846
|
+
* @returns {this} - The current period.
|
|
847
|
+
*/
|
|
848
|
+
goTo(date) {
|
|
849
|
+
return this.createBy(date);
|
|
850
|
+
}
|
|
851
|
+
/**
|
|
852
|
+
* Go to now.
|
|
853
|
+
*
|
|
854
|
+
* @returns {this} - The current period.
|
|
855
|
+
*/
|
|
856
|
+
now() {
|
|
857
|
+
return this.createBy(CalendarDate.from(new Date()));
|
|
858
|
+
}
|
|
859
|
+
/**
|
|
860
|
+
* Calculate the period start date and end date.
|
|
861
|
+
*
|
|
862
|
+
* @param {CalendarDate} date - The date to calculate the period from.
|
|
863
|
+
*/
|
|
864
|
+
calculatePeriod(date) {
|
|
865
|
+
const cursor = date.toDate();
|
|
866
|
+
if (this.count > 1) {
|
|
867
|
+
cursor.setDate(cursor.getDate() - getWeekdays().indexOf(cursor.getDay()));
|
|
868
|
+
}
|
|
869
|
+
this._startDate = CalendarDate.from(cursor);
|
|
870
|
+
cursor.setDate(cursor.getDate() + this.count - 1);
|
|
871
|
+
this._endDate = CalendarDate.from(cursor);
|
|
872
|
+
}
|
|
873
|
+
}
|
|
874
|
+
|
|
875
|
+
/**
|
|
876
|
+
* Period of day.
|
|
877
|
+
*/
|
|
878
|
+
class DayPeriod extends CalendarPeriod {
|
|
879
|
+
constructor(current) {
|
|
880
|
+
super(DayPeriod.DISPLAY_DATE_COUNT, current);
|
|
881
|
+
}
|
|
882
|
+
/**
|
|
883
|
+
* @inheritDoc
|
|
884
|
+
*/
|
|
885
|
+
next() {
|
|
886
|
+
const nextDate = this.current.toDate();
|
|
887
|
+
nextDate.setDate(nextDate.getDate() + 1);
|
|
888
|
+
return this.createBy(CalendarDate.from(nextDate));
|
|
889
|
+
}
|
|
890
|
+
/**
|
|
891
|
+
* @inheritDoc
|
|
892
|
+
*/
|
|
893
|
+
previous() {
|
|
894
|
+
const previousDate = this.current.toDate();
|
|
895
|
+
previousDate.setDate(previousDate.getDate() - 1);
|
|
896
|
+
return this.createBy(CalendarDate.from(previousDate));
|
|
897
|
+
}
|
|
898
|
+
/**
|
|
899
|
+
* @inheritDoc
|
|
900
|
+
*/
|
|
901
|
+
createBy(current) {
|
|
902
|
+
return new DayPeriod(current);
|
|
903
|
+
}
|
|
904
|
+
}
|
|
905
|
+
DayPeriod.DISPLAY_DATE_COUNT = 1;
|
|
906
|
+
|
|
907
|
+
/**
|
|
908
|
+
* Period of the week
|
|
909
|
+
*/
|
|
910
|
+
class WeekPeriod extends CalendarPeriod {
|
|
911
|
+
constructor(current) {
|
|
912
|
+
super(WeekPeriod.DISPLAY_DATE_COUNT, current);
|
|
913
|
+
}
|
|
914
|
+
/**
|
|
915
|
+
* @inheritDoc
|
|
916
|
+
*/
|
|
917
|
+
next() {
|
|
918
|
+
const nextWeekStartDate = this.current.toDate();
|
|
919
|
+
nextWeekStartDate.setDate(nextWeekStartDate.getDate() - getWeekdays().indexOf(nextWeekStartDate.getDay()) + 7);
|
|
920
|
+
return this.createBy(CalendarDate.from(nextWeekStartDate));
|
|
921
|
+
}
|
|
922
|
+
/**
|
|
923
|
+
* @inheritDoc
|
|
924
|
+
*/
|
|
925
|
+
previous() {
|
|
926
|
+
const previousWeekStartDate = this.current.toDate();
|
|
927
|
+
previousWeekStartDate.setDate(previousWeekStartDate.getDate() - getWeekdays().indexOf(previousWeekStartDate.getDay()) - 7);
|
|
928
|
+
return this.createBy(CalendarDate.from(previousWeekStartDate));
|
|
929
|
+
}
|
|
930
|
+
/**
|
|
931
|
+
* @inheritDoc
|
|
932
|
+
*/
|
|
933
|
+
createBy(current) {
|
|
934
|
+
return new WeekPeriod(current);
|
|
935
|
+
}
|
|
936
|
+
}
|
|
937
|
+
WeekPeriod.DISPLAY_DATE_COUNT = 7;
|
|
938
|
+
|
|
939
|
+
/**
|
|
940
|
+
* Period of month
|
|
941
|
+
*/
|
|
942
|
+
class MonthPeriod extends CalendarPeriod {
|
|
943
|
+
constructor(current) {
|
|
944
|
+
const date = current || CalendarDate.from(new Date());
|
|
945
|
+
const firstDayOfMonth = new CalendarDate(date.year, date.month, 1);
|
|
946
|
+
super(MonthPeriod.DISPLAY_DATE_COUNT, firstDayOfMonth);
|
|
947
|
+
}
|
|
948
|
+
/**
|
|
949
|
+
* @inheritDoc
|
|
950
|
+
*/
|
|
951
|
+
next() {
|
|
952
|
+
const next = this.current.toDate();
|
|
953
|
+
next.setMonth(next.getMonth() + 1);
|
|
954
|
+
return this.createBy(CalendarDate.from(next));
|
|
955
|
+
}
|
|
956
|
+
/**
|
|
957
|
+
* @inheritDoc
|
|
958
|
+
*/
|
|
959
|
+
previous() {
|
|
960
|
+
const previous = this.current.toDate();
|
|
961
|
+
previous.setMonth(previous.getMonth() - 1);
|
|
962
|
+
return this.createBy(CalendarDate.from(previous));
|
|
963
|
+
}
|
|
964
|
+
/**
|
|
965
|
+
* @inheritDoc
|
|
966
|
+
*/
|
|
967
|
+
createBy(current) {
|
|
968
|
+
return new MonthPeriod(current);
|
|
969
|
+
}
|
|
970
|
+
}
|
|
971
|
+
MonthPeriod.DISPLAY_DATE_COUNT = 6 * 7;
|
|
972
|
+
|
|
973
|
+
var __decorate$f = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {
|
|
974
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
975
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
976
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
977
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
978
|
+
};
|
|
979
|
+
/** The `VegaCalendarViewController` class manages the calendar view based on the current period and view mode in TypeScript. */
|
|
980
|
+
class VegaCalendarViewController extends globalSlimmerRegistry.VegaSlimmer {
|
|
981
|
+
constructor() {
|
|
982
|
+
super(...arguments);
|
|
983
|
+
this.monthViewGenerator = new MonthViewGenerator();
|
|
984
|
+
this.weekViewGenerator = new WeekViewGenerator();
|
|
985
|
+
this.dayViewGenerator = new DayViewGenerator();
|
|
986
|
+
}
|
|
987
|
+
/**
|
|
988
|
+
* Update the view mode by param
|
|
989
|
+
*
|
|
990
|
+
* @param {VegaCalendarViewModeType} viewMode view mode string
|
|
991
|
+
*/
|
|
992
|
+
setViewMode(viewMode) {
|
|
993
|
+
this.viewMode = viewMode;
|
|
994
|
+
}
|
|
995
|
+
/**
|
|
996
|
+
* set default calendar view
|
|
997
|
+
*/
|
|
998
|
+
initialCalendarView() {
|
|
999
|
+
this.setCalendarView(this.getCalendarViewByViewMode());
|
|
1000
|
+
}
|
|
1001
|
+
/**
|
|
1002
|
+
* generator new calendar view if the calendar current period changes
|
|
1003
|
+
*/
|
|
1004
|
+
generateCalendarView() {
|
|
1005
|
+
this.setCalendarView(this.getCalendarViewByViewMode());
|
|
1006
|
+
}
|
|
1007
|
+
/**
|
|
1008
|
+
* The function `getCalendarViewByViewMode` returns a specific calendar view based on the current view mode.
|
|
1009
|
+
*
|
|
1010
|
+
* @returns {CalendarView} get the match calendar view by the view mode
|
|
1011
|
+
*/
|
|
1012
|
+
getCalendarViewByViewMode() {
|
|
1013
|
+
switch (this.viewMode) {
|
|
1014
|
+
case 'week':
|
|
1015
|
+
return this.weekViewGenerator.generate(this.currentPeriod);
|
|
1016
|
+
case 'day':
|
|
1017
|
+
return this.dayViewGenerator.generate(this.currentPeriod);
|
|
1018
|
+
default:
|
|
1019
|
+
return this.monthViewGenerator.generate(this.currentPeriod);
|
|
1020
|
+
}
|
|
1021
|
+
}
|
|
1022
|
+
/**
|
|
1023
|
+
* update the calendar view
|
|
1024
|
+
*
|
|
1025
|
+
* @param {CalendarView} newView new calendar view
|
|
1026
|
+
*/
|
|
1027
|
+
setCalendarView(newView) {
|
|
1028
|
+
this.calendarView = newView;
|
|
1029
|
+
}
|
|
1030
|
+
}
|
|
1031
|
+
__decorate$f([
|
|
1032
|
+
globalSlimmerRegistry.MapToComponentField({ writable: true })
|
|
1033
|
+
], VegaCalendarViewController.prototype, "calendarView", void 0);
|
|
1034
|
+
__decorate$f([
|
|
1035
|
+
globalSlimmerRegistry.MapToComponentField({ writable: true })
|
|
1036
|
+
], VegaCalendarViewController.prototype, "viewMode", void 0);
|
|
1037
|
+
__decorate$f([
|
|
1038
|
+
globalSlimmerRegistry.MapToComponentField()
|
|
1039
|
+
], VegaCalendarViewController.prototype, "currentPeriod", void 0);
|
|
1040
|
+
__decorate$f([
|
|
1041
|
+
globalSlimmerRegistry.MapToComponentField()
|
|
1042
|
+
], VegaCalendarViewController.prototype, "currentPeriodController", void 0);
|
|
1043
|
+
__decorate$f([
|
|
1044
|
+
globalSlimmerRegistry.MapToComponentMethod('componentWillLoad')
|
|
1045
|
+
], VegaCalendarViewController.prototype, "initialCalendarView", null);
|
|
1046
|
+
__decorate$f([
|
|
1047
|
+
globalSlimmerRegistry.MapToComponentMethod('watchCurrentPeriodChange')
|
|
1048
|
+
], VegaCalendarViewController.prototype, "generateCalendarView", null);
|
|
1049
|
+
|
|
1050
|
+
var __decorate$e = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {
|
|
1051
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
1052
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
1053
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
1054
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
1055
|
+
};
|
|
1056
|
+
/** This TypeScript class `VegaCalendarCurrentPeriodController` updates the current period based on the view mode in a calendar component. */
|
|
1057
|
+
class VegaCalendarCurrentPeriodController extends globalSlimmerRegistry.VegaSlimmer {
|
|
1058
|
+
/**
|
|
1059
|
+
* set new current period
|
|
1060
|
+
*
|
|
1061
|
+
* @param {CalendarPeriod} newPeriod new value
|
|
1062
|
+
*/
|
|
1063
|
+
setCurrentPeriod(newPeriod) {
|
|
1064
|
+
this.currentPeriod = newPeriod;
|
|
1065
|
+
}
|
|
1066
|
+
/**
|
|
1067
|
+
* default current period is month period, re-create period if the default view mode is not month
|
|
1068
|
+
* set default calendar view
|
|
1069
|
+
*/
|
|
1070
|
+
initialCurrentPeriod() {
|
|
1071
|
+
this.initCalendarPeriod(this.viewMode, CalendarDate.from(new Date()));
|
|
1072
|
+
}
|
|
1073
|
+
/**
|
|
1074
|
+
* emit period change event
|
|
1075
|
+
*/
|
|
1076
|
+
emitChangeEvent() {
|
|
1077
|
+
this.changeEventEmitter.emit({
|
|
1078
|
+
viewMode: this.viewMode,
|
|
1079
|
+
currentPeriod: this.getCurrentPeriodSummary(),
|
|
1080
|
+
});
|
|
1081
|
+
}
|
|
1082
|
+
/**
|
|
1083
|
+
* update the current period when view mode change
|
|
1084
|
+
*
|
|
1085
|
+
* @param {VegaCalendarViewModeType} viewMode new view mode value
|
|
1086
|
+
*/
|
|
1087
|
+
updateCurrentPeriodByViewMode(viewMode) {
|
|
1088
|
+
this.initCalendarPeriod(viewMode, this.currentPeriod.current);
|
|
1089
|
+
}
|
|
1090
|
+
/**
|
|
1091
|
+
* The function `getStartDateAndEndDate` returns an array of `VegaCalendarDateType` objects based on the `startDate` and `endDate` properties of the `currentPeriod` object.
|
|
1092
|
+
*
|
|
1093
|
+
* @returns {VegaCalendarChangeEventType['currentPeriod']} An array of objects containing the date, month, and year properties of the currentPeriod's
|
|
1094
|
+
* start date and end date.
|
|
1095
|
+
*/
|
|
1096
|
+
getCurrentPeriodSummary() {
|
|
1097
|
+
const { current, startDate, endDate } = this.currentPeriod;
|
|
1098
|
+
return {
|
|
1099
|
+
year: current.year,
|
|
1100
|
+
month: current.month,
|
|
1101
|
+
startDate: {
|
|
1102
|
+
date: startDate.date,
|
|
1103
|
+
month: startDate.month,
|
|
1104
|
+
year: startDate.year,
|
|
1105
|
+
},
|
|
1106
|
+
endDate: {
|
|
1107
|
+
date: endDate.date,
|
|
1108
|
+
month: endDate.month,
|
|
1109
|
+
year: endDate.year,
|
|
1110
|
+
},
|
|
1111
|
+
};
|
|
1112
|
+
}
|
|
1113
|
+
/**
|
|
1114
|
+
* set new current period by the view mode and the current date
|
|
1115
|
+
*
|
|
1116
|
+
* @param {VegaCalendarViewModeType} viewMode view mode value
|
|
1117
|
+
* @param {CalendarDate} date current date
|
|
1118
|
+
*/
|
|
1119
|
+
initCalendarPeriod(viewMode, date) {
|
|
1120
|
+
switch (viewMode) {
|
|
1121
|
+
case 'month':
|
|
1122
|
+
this.setCurrentPeriod(new MonthPeriod(date));
|
|
1123
|
+
break;
|
|
1124
|
+
case 'week':
|
|
1125
|
+
this.setCurrentPeriod(new WeekPeriod(date));
|
|
1126
|
+
break;
|
|
1127
|
+
case 'day':
|
|
1128
|
+
this.setCurrentPeriod(new DayPeriod(date));
|
|
1129
|
+
break;
|
|
1130
|
+
}
|
|
1131
|
+
}
|
|
1132
|
+
}
|
|
1133
|
+
__decorate$e([
|
|
1134
|
+
globalSlimmerRegistry.MapToComponentField({ writable: true })
|
|
1135
|
+
], VegaCalendarCurrentPeriodController.prototype, "currentPeriod", void 0);
|
|
1136
|
+
__decorate$e([
|
|
1137
|
+
globalSlimmerRegistry.MapToComponentField()
|
|
1138
|
+
], VegaCalendarCurrentPeriodController.prototype, "changeEventEmitter", void 0);
|
|
1139
|
+
__decorate$e([
|
|
1140
|
+
globalSlimmerRegistry.MapToComponentField()
|
|
1141
|
+
], VegaCalendarCurrentPeriodController.prototype, "viewMode", void 0);
|
|
1142
|
+
__decorate$e([
|
|
1143
|
+
globalSlimmerRegistry.MapToComponentMethod('componentWillLoad')
|
|
1144
|
+
], VegaCalendarCurrentPeriodController.prototype, "initialCurrentPeriod", null);
|
|
1145
|
+
__decorate$e([
|
|
1146
|
+
globalSlimmerRegistry.MapToComponentMethod('watchCurrentPeriodChange')
|
|
1147
|
+
], VegaCalendarCurrentPeriodController.prototype, "emitChangeEvent", null);
|
|
1148
|
+
__decorate$e([
|
|
1149
|
+
globalSlimmerRegistry.MapToComponentMethod('watchViewModeChange')
|
|
1150
|
+
], VegaCalendarCurrentPeriodController.prototype, "updateCurrentPeriodByViewMode", null);
|
|
1151
|
+
|
|
1152
|
+
var __decorate$d = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {
|
|
1153
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
1154
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
1155
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
1156
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
1157
|
+
};
|
|
1158
|
+
/** This code snippet defines a TypeScript class `VegaCalendarMonthEventRenderer` that extends `VegaSlimmer`. Here's a breakdown of what the class and its methods are doing: */
|
|
1159
|
+
class VegaCalendarMonthEventRenderer extends globalSlimmerRegistry.VegaSlimmer {
|
|
1160
|
+
constructor() {
|
|
1161
|
+
super(...arguments);
|
|
1162
|
+
this.maxMonthDisplayEventsCount = 2;
|
|
1163
|
+
}
|
|
1164
|
+
/**
|
|
1165
|
+
* current row dates all events.
|
|
1166
|
+
*
|
|
1167
|
+
* @param {CalendarDate[]} rowDate the current view date object
|
|
1168
|
+
* @returns {(CalendarEvent|null)[][]} the current view events
|
|
1169
|
+
*/
|
|
1170
|
+
getCurrentRowEvents(rowDate) {
|
|
1171
|
+
const result = [];
|
|
1172
|
+
rowDate.forEach((item) => {
|
|
1173
|
+
const currentDateEvents = this.calendarEventController.getCurrentDateEvents(item);
|
|
1174
|
+
result.push(currentDateEvents);
|
|
1175
|
+
});
|
|
1176
|
+
return this.fullDayEventLayoutRenderer.sortLongEvents(result);
|
|
1177
|
+
}
|
|
1178
|
+
/**
|
|
1179
|
+
* The function filterRowDisplayEvents processes a 2D array of CalendarEvent objects to limit the number of events displayed per row.
|
|
1180
|
+
*
|
|
1181
|
+
* @param {(CalendarEvent|null)[][]} rowEvents - `rowEvents` is an array of arrays of `CalendarEvent` objects. Each inner array represents events for a specific row in a calendar display.
|
|
1182
|
+
* @returns {(CalendarEvent|null)[][]} the current row should display events array
|
|
1183
|
+
*/
|
|
1184
|
+
filterRowDisplayEvents(rowEvents) {
|
|
1185
|
+
const result = [];
|
|
1186
|
+
rowEvents.forEach((events) => {
|
|
1187
|
+
const displayEvents = events.length > this.maxMonthDisplayEventsCount
|
|
1188
|
+
? events.slice(0, this.maxMonthDisplayEventsCount - 1)
|
|
1189
|
+
: events;
|
|
1190
|
+
result.push(displayEvents);
|
|
1191
|
+
});
|
|
1192
|
+
return this.hideTheCutOffEvents(rowEvents, result);
|
|
1193
|
+
}
|
|
1194
|
+
/**
|
|
1195
|
+
* Get the month event container element ref
|
|
1196
|
+
*
|
|
1197
|
+
* @returns {HTMLDivElement} the container element
|
|
1198
|
+
*/
|
|
1199
|
+
getMonthEventContainerRef() {
|
|
1200
|
+
return this.eventContainerRef;
|
|
1201
|
+
}
|
|
1202
|
+
/**
|
|
1203
|
+
* render the current date events
|
|
1204
|
+
*
|
|
1205
|
+
* @param {CalendarDate} calendarDate current day
|
|
1206
|
+
* @param {Nullable<CalendarEvent>[]} allEvents current row events
|
|
1207
|
+
* @param {Nullable<CalendarEvent>[]} displayEvents current row should display events
|
|
1208
|
+
* @param {number} currentViewIndex current day index of week
|
|
1209
|
+
* @returns {HTMLDivElement} the events container
|
|
1210
|
+
*/
|
|
1211
|
+
render(calendarDate, allEvents, displayEvents, currentViewIndex) {
|
|
1212
|
+
const hiddenEventsLength = allEvents
|
|
1213
|
+
.slice(displayEvents.length)
|
|
1214
|
+
.filter((item) => item).length;
|
|
1215
|
+
return (index.h("div", { class: "events-container", ref: (node) => (this.eventContainerRef = node) },
|
|
1216
|
+
index.h("div", { class: "event-list" }, this.fullDayEventLayoutRenderer.render(displayEvents, currentViewIndex)),
|
|
1217
|
+
this.renderMoreButton(allEvents, hiddenEventsLength, `${calendarDate.date} ${getMonthName(calendarDate.toDate())} ${calendarDate.year}`)));
|
|
1218
|
+
}
|
|
1219
|
+
/**
|
|
1220
|
+
* Add a month event display count change observer, than update the component
|
|
1221
|
+
*/
|
|
1222
|
+
addMaxDisplayCountChange() {
|
|
1223
|
+
domNodeSubjectObserverFactory.DomNodeSubjectObserverFactory.addUniqueObserverToNode(this.host, vegaInternalEventId.VegaInternalCalendarMonthEventsChange, (payload) => {
|
|
1224
|
+
this.maxMonthDisplayEventsCount = payload.detail;
|
|
1225
|
+
if (this.viewMode === 'month') {
|
|
1226
|
+
index.forceUpdate(this.host);
|
|
1227
|
+
}
|
|
1228
|
+
});
|
|
1229
|
+
}
|
|
1230
|
+
/**
|
|
1231
|
+
* Render the event more button if there is no enough space to display all event
|
|
1232
|
+
*
|
|
1233
|
+
* @param {Nullable<CalendarEvent>[]} events all event list array
|
|
1234
|
+
* @param {number} moreItemsLength popover events length
|
|
1235
|
+
* @param {string} title the popover title
|
|
1236
|
+
* @returns {HTMLDivElement | null} the more button or null
|
|
1237
|
+
*/
|
|
1238
|
+
renderMoreButton(events, moreItemsLength, title) {
|
|
1239
|
+
if (moreItemsLength) {
|
|
1240
|
+
const backgroundColorEvents = events.filter((eventItem) => {
|
|
1241
|
+
return eventItem && (eventItem.isAllDayEvent || eventItem.isGroupEvent());
|
|
1242
|
+
});
|
|
1243
|
+
const otherEvents = events.filter((eventItem) => {
|
|
1244
|
+
return eventItem && !eventItem.isAllDayEvent && !eventItem.isGroupEvent();
|
|
1245
|
+
});
|
|
1246
|
+
return (index.h("div", { class: "month-event-more" },
|
|
1247
|
+
index.h("vega-popover", { trigger: "click", placement: "right" },
|
|
1248
|
+
index.h("div", { tabIndex: 0, slot: "popover-content", role: "button", class: "more-button", onKeyDown: accessibility.createEnterKeyHandlerToTriggerClick() }, `${moreItemsLength} More`),
|
|
1249
|
+
index.h("vega-flex", { slot: "popover", direction: "col", gap: "0" },
|
|
1250
|
+
index.h("vega-font", { textAlign: "center", variant: "font-field-label", color: "text-primary", style: { padding: '4px 0', marginBottom: '8px' } }, title),
|
|
1251
|
+
index.h("vega-flex", { direction: "col", gap: "size-4", style: { paddingBottom: otherEvents.length ? '4px' : '0px' } }, backgroundColorEvents.map((item) => {
|
|
1252
|
+
return this.eventItemRenderer.render(item, {
|
|
1253
|
+
'month-event': true,
|
|
1254
|
+
'calendar-event-large-size': true,
|
|
1255
|
+
});
|
|
1256
|
+
})),
|
|
1257
|
+
otherEvents.map((item) => {
|
|
1258
|
+
return this.eventItemRenderer.render(item, {
|
|
1259
|
+
'month-event': true,
|
|
1260
|
+
'calendar-event-large-size': true,
|
|
1261
|
+
});
|
|
1262
|
+
})))));
|
|
1263
|
+
}
|
|
1264
|
+
}
|
|
1265
|
+
/*
|
|
1266
|
+
* The below method is e2e-test covered in
|
|
1267
|
+
* @see{module:vega-calendar-render-full-day-event-correct}
|
|
1268
|
+
*/
|
|
1269
|
+
/* istanbul ignore next */
|
|
1270
|
+
/**
|
|
1271
|
+
* The `hideTheCutOffEvents` method in the `VegaCalendarMonthEventRenderer` class is responsible for removing any cut-off events from the displayed events in each row
|
|
1272
|
+
*
|
|
1273
|
+
* @param {Nullable<CalendarEvent>[][]} allEvents the all events
|
|
1274
|
+
* @param {Nullable<CalendarEvent>[][]} rowEvents the display events
|
|
1275
|
+
* @returns {Nullable<CalendarEvent>[][]} new event array
|
|
1276
|
+
*/
|
|
1277
|
+
hideTheCutOffEvents(allEvents, rowEvents) {
|
|
1278
|
+
const result = [];
|
|
1279
|
+
const removeItems = [];
|
|
1280
|
+
const shouldCheckEvents = rowEvents
|
|
1281
|
+
.map((items) => items[items.length - 1])
|
|
1282
|
+
.filter((item) => item && item.isGroupEvent());
|
|
1283
|
+
if (shouldCheckEvents.length) {
|
|
1284
|
+
shouldCheckEvents.forEach((checkItem) => {
|
|
1285
|
+
if (allEvents.filter((items) => items.includes(checkItem)).length >
|
|
1286
|
+
rowEvents.filter((items) => items.includes(checkItem)).length) {
|
|
1287
|
+
removeItems.push(checkItem);
|
|
1288
|
+
}
|
|
1289
|
+
});
|
|
1290
|
+
}
|
|
1291
|
+
if (removeItems.length) {
|
|
1292
|
+
rowEvents.forEach((items) => {
|
|
1293
|
+
if (items.length && removeItems.includes(items[items.length - 1])) {
|
|
1294
|
+
result.push(items.slice(0, items.length - 1));
|
|
1295
|
+
}
|
|
1296
|
+
else {
|
|
1297
|
+
result.push(items);
|
|
1298
|
+
}
|
|
1299
|
+
});
|
|
1300
|
+
return result;
|
|
1301
|
+
}
|
|
1302
|
+
return rowEvents;
|
|
1303
|
+
}
|
|
1304
|
+
}
|
|
1305
|
+
__decorate$d([
|
|
1306
|
+
globalSlimmerRegistry.MapToComponentField()
|
|
1307
|
+
], VegaCalendarMonthEventRenderer.prototype, "viewMode", void 0);
|
|
1308
|
+
__decorate$d([
|
|
1309
|
+
globalSlimmerRegistry.MapToComponentField()
|
|
1310
|
+
], VegaCalendarMonthEventRenderer.prototype, "host", void 0);
|
|
1311
|
+
__decorate$d([
|
|
1312
|
+
globalSlimmerRegistry.MapToComponentField()
|
|
1313
|
+
], VegaCalendarMonthEventRenderer.prototype, "calendarEventController", void 0);
|
|
1314
|
+
__decorate$d([
|
|
1315
|
+
globalSlimmerRegistry.MapToComponentField()
|
|
1316
|
+
], VegaCalendarMonthEventRenderer.prototype, "eventItemRenderer", void 0);
|
|
1317
|
+
__decorate$d([
|
|
1318
|
+
globalSlimmerRegistry.MapToComponentField()
|
|
1319
|
+
], VegaCalendarMonthEventRenderer.prototype, "fullDayEventLayoutRenderer", void 0);
|
|
1320
|
+
__decorate$d([
|
|
1321
|
+
globalSlimmerRegistry.MapToComponentMethod('componentWillLoad')
|
|
1322
|
+
], VegaCalendarMonthEventRenderer.prototype, "addMaxDisplayCountChange", null);
|
|
1323
|
+
|
|
1324
|
+
const CalendarDateFormatReg = /^\d{1,2}\/\d{1,2}\/\d{4}/;
|
|
1325
|
+
const CalendarTimeFormatReg = /^\d{1,2}:\d{1,2}/;
|
|
1326
|
+
/** The `CalendarEvent` class in TypeScript represents a calendar event with methods to validate required fields, initialize dates and times, and determine if it is a group event. */
|
|
1327
|
+
class CalendarEvent {
|
|
1328
|
+
/**
|
|
1329
|
+
* The constructor initializes a VegaCalendarRawEvent object and performs validation checks on required fields.
|
|
1330
|
+
*
|
|
1331
|
+
* @param {VegaCalendarRawEvent} eventOptions - The `eventOptions` parameter in the constructor
|
|
1332
|
+
* represents the raw event data for a Vega calendar event. It contains information such as the event
|
|
1333
|
+
* title, start and end dates, location, description, and any other relevant details about the event.
|
|
1334
|
+
*/
|
|
1335
|
+
constructor(eventOptions) {
|
|
1336
|
+
this._event = eventOptions;
|
|
1337
|
+
this._eventKey = misc.generateUUID();
|
|
1338
|
+
this.checkEventRequireField(eventOptions);
|
|
1339
|
+
this.initDate(eventOptions);
|
|
1340
|
+
}
|
|
1341
|
+
/**
|
|
1342
|
+
* The function returns the raw event data for a VegaCalendar event.
|
|
1343
|
+
*
|
|
1344
|
+
* @returns {VegaCalendarRawEvent} The `get event()` method is returning a `VegaCalendarRawEvent` object, which is stored in the `_event` property.
|
|
1345
|
+
*/
|
|
1346
|
+
get event() {
|
|
1347
|
+
return this._event;
|
|
1348
|
+
}
|
|
1349
|
+
/**
|
|
1350
|
+
* This function returns the key of an event in TypeScript.
|
|
1351
|
+
*
|
|
1352
|
+
* @returns {string} event key
|
|
1353
|
+
*/
|
|
1354
|
+
get eventKey() {
|
|
1355
|
+
return this._eventKey;
|
|
1356
|
+
}
|
|
1357
|
+
/**
|
|
1358
|
+
* This function returns the title of an event in TypeScript.
|
|
1359
|
+
*
|
|
1360
|
+
* @returns {string} The title of the event.
|
|
1361
|
+
*/
|
|
1362
|
+
get title() {
|
|
1363
|
+
return this._event.title;
|
|
1364
|
+
}
|
|
1365
|
+
/**
|
|
1366
|
+
* This function returns the disabled of an event in TypeScript.
|
|
1367
|
+
*
|
|
1368
|
+
* @returns {boolean} The disabled of the event.
|
|
1369
|
+
*/
|
|
1370
|
+
get disabled() {
|
|
1371
|
+
return !!this._event.disabled;
|
|
1372
|
+
}
|
|
1373
|
+
/**
|
|
1374
|
+
* This function returns the variant of an event in TypeScript.
|
|
1375
|
+
*
|
|
1376
|
+
* @returns {VegaCalendarEventVariantType|null} The variant of the event.
|
|
1377
|
+
*/
|
|
1378
|
+
get variant() {
|
|
1379
|
+
return this._event.variant;
|
|
1380
|
+
}
|
|
1381
|
+
/**
|
|
1382
|
+
* This function returns the color of an event in TypeScript.
|
|
1383
|
+
*
|
|
1384
|
+
* @returns {string|null} The color of the event.
|
|
1385
|
+
*/
|
|
1386
|
+
get color() {
|
|
1387
|
+
return this._event.color;
|
|
1388
|
+
}
|
|
1389
|
+
/**
|
|
1390
|
+
* The function isAllDayEvent returns a boolean value indicating whether the event is an all-day event.
|
|
1391
|
+
*
|
|
1392
|
+
* @returns {boolean} The method `isAllDayEvent()` is returning a boolean value indicating whether the event is an all-day event or not. It returns `true` if the event is an all-day event, and `false` if it is not.
|
|
1393
|
+
*/
|
|
1394
|
+
get isAllDayEvent() {
|
|
1395
|
+
return !!this._event.isAllDay;
|
|
1396
|
+
}
|
|
1397
|
+
/**
|
|
1398
|
+
* The function isRepeatEvent returns a boolean value based on whether the event's repeat property is not equal to 'none'.
|
|
1399
|
+
*
|
|
1400
|
+
* @returns {boolean} The method `isRepeatEvent` returns a boolean value indicating whether the `_event` has a repeat value other than 'none'.
|
|
1401
|
+
*/
|
|
1402
|
+
get isRepeatEvent() {
|
|
1403
|
+
return this._event.repeat !== 'none';
|
|
1404
|
+
}
|
|
1405
|
+
/**
|
|
1406
|
+
* The function returns the start date property of an object.
|
|
1407
|
+
*
|
|
1408
|
+
* @returns {Date} The `startDate` property of type `Date` is being returned.
|
|
1409
|
+
*/
|
|
1410
|
+
get startDate() {
|
|
1411
|
+
return this._startDate;
|
|
1412
|
+
}
|
|
1413
|
+
/**
|
|
1414
|
+
* The function returns the end date property of an object.
|
|
1415
|
+
*
|
|
1416
|
+
* @returns {Date} The `endDate` property of type `Date` is being returned.
|
|
1417
|
+
*/
|
|
1418
|
+
get endDate() {
|
|
1419
|
+
return this._endDate;
|
|
1420
|
+
}
|
|
1421
|
+
/**
|
|
1422
|
+
* This function returns the start time as a string.
|
|
1423
|
+
*
|
|
1424
|
+
* @returns {string} The `_startTime` property, which is a string, is being returned.
|
|
1425
|
+
*/
|
|
1426
|
+
get startTime() {
|
|
1427
|
+
return this._startTime;
|
|
1428
|
+
}
|
|
1429
|
+
/**
|
|
1430
|
+
* This function returns the end time as a string.
|
|
1431
|
+
*
|
|
1432
|
+
* @returns {string} The `_endTime` property, which is a string, is being returned.
|
|
1433
|
+
*/
|
|
1434
|
+
get endTime() {
|
|
1435
|
+
return this._endTime;
|
|
1436
|
+
}
|
|
1437
|
+
/**
|
|
1438
|
+
* Check the event is a group event or not
|
|
1439
|
+
*
|
|
1440
|
+
* @returns {boolean} true or false
|
|
1441
|
+
*/
|
|
1442
|
+
isGroupEvent() {
|
|
1443
|
+
const { year: startYear, month: startMonth, date: startDay, } = CalendarDate.from(this.startDate);
|
|
1444
|
+
const { year: endYear, month: endMonth, date: endDay, } = CalendarDate.from(this.endDate);
|
|
1445
|
+
return (!(startYear === endYear && startMonth === endMonth && startDay === endDay) &&
|
|
1446
|
+
this._event.repeat !== 'daily');
|
|
1447
|
+
}
|
|
1448
|
+
/**
|
|
1449
|
+
* This TypeScript function checks if a given date falls within the range of a calendar event based on its start and end dates, considering different repeat types like daily, weekly, monthly, and yearly.
|
|
1450
|
+
*
|
|
1451
|
+
* @param {CalendarDate} date - The `date` parameter represents the current date for which you want to
|
|
1452
|
+
* check if it falls within the range of the `calendarEvent`. It is of type `CalendarDate`.
|
|
1453
|
+
* @returns {boolean} a boolean value, either `true` or `false`, based on whether the `calendarEvent` falls on the `date` provided.
|
|
1454
|
+
*/
|
|
1455
|
+
isCurrentDayEvent(date) {
|
|
1456
|
+
const { startDate, endDate } = this;
|
|
1457
|
+
const startCalendarDate = CalendarDate.from(startDate);
|
|
1458
|
+
const endCalendarDate = CalendarDate.from(new Date(endDate.getFullYear(), endDate.getMonth(), endDate.getDate() + 1));
|
|
1459
|
+
const repeat = this._event.repeat;
|
|
1460
|
+
const currentDate = date.toDate();
|
|
1461
|
+
if (startCalendarDate.toDate() <= currentDate) {
|
|
1462
|
+
switch (repeat) {
|
|
1463
|
+
case 'daily':
|
|
1464
|
+
return true;
|
|
1465
|
+
case 'weekly':
|
|
1466
|
+
return currentDate.getDay() === startDate.getDay();
|
|
1467
|
+
case 'monthly':
|
|
1468
|
+
return date.date === startCalendarDate.date;
|
|
1469
|
+
case 'yearly':
|
|
1470
|
+
return date.month === startCalendarDate.month && date.date === startCalendarDate.date;
|
|
1471
|
+
default:
|
|
1472
|
+
return endCalendarDate.toDate() > currentDate;
|
|
1473
|
+
}
|
|
1474
|
+
}
|
|
1475
|
+
return false;
|
|
1476
|
+
}
|
|
1477
|
+
/**
|
|
1478
|
+
* Get the number of minutes the event lasted
|
|
1479
|
+
*
|
|
1480
|
+
* @returns {number} the minutes
|
|
1481
|
+
*/
|
|
1482
|
+
getEventDuration() {
|
|
1483
|
+
const [startHour, startMinutes] = this.startTime.split(':');
|
|
1484
|
+
const [endHour, endMinutes] = this.endTime.split(':');
|
|
1485
|
+
const now = CalendarDate.from(new Date());
|
|
1486
|
+
const startDate = new Date(now.year, now.month, now.date, Number(startHour), Number(startMinutes));
|
|
1487
|
+
const endDate = new Date(now.year, now.month, now.date, Number(endHour) === 0 && Number(startHour) !== 0 ? 24 : Number(endHour), Number(endMinutes));
|
|
1488
|
+
return (endDate.valueOf() - startDate.valueOf()) / (60 * 1000);
|
|
1489
|
+
}
|
|
1490
|
+
/**
|
|
1491
|
+
* The function `convertTimeTo24Hour` converts a time string from 12-hour format to 24-hour format in TypeScript.
|
|
1492
|
+
*
|
|
1493
|
+
* @param {string} timeString - The `convertTimeTo24Hour` function you provided is used to convert a
|
|
1494
|
+
* time string from 12-hour format to 24-hour format. The function checks if the input time string is
|
|
1495
|
+
* in 12-hour format and contains either 'am' or 'pm'.
|
|
1496
|
+
* @returns {string} The `convertTimeTo24Hour` function returns a string representing the input time string
|
|
1497
|
+
* converted to 24-hour format. If the input time string is in 12-hour format and contains 'am' or
|
|
1498
|
+
* 'pm', it converts it to 24-hour format. If the input time string is not in 12-hour format or does
|
|
1499
|
+
* not contain 'am' or 'pm', it returns the original input
|
|
1500
|
+
*/
|
|
1501
|
+
convertTimeTo24Hour(timeString) {
|
|
1502
|
+
timeString = timeString.toLocaleLowerCase();
|
|
1503
|
+
if (timeString.indexOf('am') > 0 || timeString.indexOf('pm') > 0) {
|
|
1504
|
+
if (timeString.indexOf('am') > 0) {
|
|
1505
|
+
timeString = timeString.replace('am', '').trim();
|
|
1506
|
+
const [hour, minutes] = timeString.split(':');
|
|
1507
|
+
return `${hour === '12' ? '00' : hour}:${minutes}`;
|
|
1508
|
+
}
|
|
1509
|
+
else {
|
|
1510
|
+
timeString = timeString.replace('pm', '').trim();
|
|
1511
|
+
const [hour, minutes] = timeString.split(':');
|
|
1512
|
+
return `${hour === '12' ? '12' : Number(hour) + 12}:${minutes}`;
|
|
1513
|
+
}
|
|
1514
|
+
}
|
|
1515
|
+
return timeString;
|
|
1516
|
+
}
|
|
1517
|
+
/**
|
|
1518
|
+
* The function `checkEventRequireField` validates the required fields of a calendar event item in TypeScript.
|
|
1519
|
+
*
|
|
1520
|
+
* @param {VegaCalendarRawEvent} eventOptions - The `eventOptions` parameter is an object of type
|
|
1521
|
+
* `VegaCalendarRawEvent` that contains information about a calendar event
|
|
1522
|
+
*/
|
|
1523
|
+
checkEventRequireField(eventOptions) {
|
|
1524
|
+
const { title, startDate, endDate, startTime, endTime } = eventOptions;
|
|
1525
|
+
if ((startDate && typeof startDate === 'string' && !CalendarDateFormatReg.test(startDate)) ||
|
|
1526
|
+
(endDate && typeof endDate === 'string' && !CalendarDateFormatReg.test(endDate))) {
|
|
1527
|
+
throw new Error('Invalid calendar event item, the date format should be MM/DD/YYYY!');
|
|
1528
|
+
}
|
|
1529
|
+
if ((startTime && typeof startTime === 'string' && !CalendarTimeFormatReg.test(startTime)) ||
|
|
1530
|
+
(endTime && typeof endTime === 'string' && !CalendarTimeFormatReg.test(endTime))) {
|
|
1531
|
+
throw new Error('Invalid calendar event item, the time format should be HH:mm!');
|
|
1532
|
+
}
|
|
1533
|
+
if (!title || !startDate || (!endDate && !endTime)) {
|
|
1534
|
+
throw new Error('Invalid calendar event item, the required field should not empty!');
|
|
1535
|
+
}
|
|
1536
|
+
}
|
|
1537
|
+
/**
|
|
1538
|
+
* The `initDate` function in TypeScript initializes start and end dates and times for a calendar event based on the provided options.
|
|
1539
|
+
*
|
|
1540
|
+
* @param {VegaCalendarRawEvent} eventOptions - The `initDate` method you provided is used to
|
|
1541
|
+
* initialize the start and end dates for a calendar event based on the options provided in the
|
|
1542
|
+
* `eventOptions` object. The `eventOptions` object contains properties such as `startDate`,
|
|
1543
|
+
* `startTime`, `endDate`, and `endTime` which are used
|
|
1544
|
+
*/
|
|
1545
|
+
initDate(eventOptions) {
|
|
1546
|
+
const { startDate, startTime, endDate, endTime } = eventOptions;
|
|
1547
|
+
if (startDate && typeof startDate === 'object') {
|
|
1548
|
+
this._startDate = startDate;
|
|
1549
|
+
}
|
|
1550
|
+
else if (startDate && typeof startDate === 'string') {
|
|
1551
|
+
const [month, day, year] = startDate.split('/');
|
|
1552
|
+
this._startDate = new Date(Number(year), Number(month) - 1, Number(day));
|
|
1553
|
+
}
|
|
1554
|
+
if (!startTime) {
|
|
1555
|
+
this._startTime = `${this._startDate.getHours()}:${this._startDate.getMinutes()}`;
|
|
1556
|
+
}
|
|
1557
|
+
else {
|
|
1558
|
+
this._startTime = this.convertTimeTo24Hour(startTime);
|
|
1559
|
+
}
|
|
1560
|
+
if (endDate && typeof endDate === 'object') {
|
|
1561
|
+
this._endDate = endDate;
|
|
1562
|
+
}
|
|
1563
|
+
else if (endDate && typeof endDate === 'string') {
|
|
1564
|
+
const [month, day, year] = endDate.split('/');
|
|
1565
|
+
this._endDate = new Date(Number(year), Number(month) - 1, Number(day), 23, 59, 59);
|
|
1566
|
+
}
|
|
1567
|
+
else {
|
|
1568
|
+
this._endDate = new Date(this._startDate.getFullYear(), this._startDate.getMonth(), this._startDate.getDate(), 23, 59, 59);
|
|
1569
|
+
}
|
|
1570
|
+
if (!endTime) {
|
|
1571
|
+
this._endTime = `${this._endDate.getHours()}:${this._endDate.getMinutes()}`;
|
|
1572
|
+
}
|
|
1573
|
+
else {
|
|
1574
|
+
this._endTime = this.convertTimeTo24Hour(endTime);
|
|
1575
|
+
}
|
|
1576
|
+
}
|
|
1577
|
+
}
|
|
1578
|
+
|
|
1579
|
+
var __decorate$c = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {
|
|
1580
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
1581
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
1582
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
1583
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
1584
|
+
};
|
|
1585
|
+
/** The `VegaCalendarEventController` class in TypeScript manages calendar events, initializes event layouts, retrieves events for the current date, and checks if a date falls within the range of a calendar event. */
|
|
1586
|
+
class VegaCalendarEventController extends globalSlimmerRegistry.VegaSlimmer {
|
|
1587
|
+
/**
|
|
1588
|
+
* The function `getCurrentDateEvent` returns an array of calendar events for the current date, including both normal events and group events.
|
|
1589
|
+
*
|
|
1590
|
+
* @param {CalendarDate} date - The `date` parameter in the `getCurrentDateEvent` function is of type `CalendarDate`, which is used to represent a specific date with properties for year, month, and date.
|
|
1591
|
+
* @returns {CalendarEvent[]} The `getCurrentDateEvent` function returns an array of `CalendarEvent` objects. It
|
|
1592
|
+
* first retrieves all group events and normal events for the specified date, then filters out the
|
|
1593
|
+
* events that are specific to the current day. Finally, it concatenates the current day events with
|
|
1594
|
+
* the group events and returns the combined array.
|
|
1595
|
+
*/
|
|
1596
|
+
getCurrentDateEvents(date) {
|
|
1597
|
+
const allEvents = this.calendarEvents;
|
|
1598
|
+
return allEvents.filter((item) => item.isCurrentDayEvent(date));
|
|
1599
|
+
}
|
|
1600
|
+
/**
|
|
1601
|
+
* initial calendar events when component props events change
|
|
1602
|
+
*
|
|
1603
|
+
* @param {VegaCalendarRawEvent[]} newEvents new event options array
|
|
1604
|
+
*/
|
|
1605
|
+
updateAfterEventChange(newEvents) {
|
|
1606
|
+
this.initCalendarEvents(newEvents);
|
|
1607
|
+
}
|
|
1608
|
+
/**
|
|
1609
|
+
* initial calendar events in first time
|
|
1610
|
+
*/
|
|
1611
|
+
updateWhenComponentWillLoad() {
|
|
1612
|
+
this.initCalendarEvents(this.events);
|
|
1613
|
+
}
|
|
1614
|
+
/**
|
|
1615
|
+
* initial calendar events
|
|
1616
|
+
*
|
|
1617
|
+
* @param {VegaCalendarRawEvent[]} newEvents new event options array
|
|
1618
|
+
*/
|
|
1619
|
+
initCalendarEvents(newEvents) {
|
|
1620
|
+
const result = [];
|
|
1621
|
+
if (newEvents) {
|
|
1622
|
+
newEvents.forEach((item) => {
|
|
1623
|
+
try {
|
|
1624
|
+
const calendarEvent = new CalendarEvent(item);
|
|
1625
|
+
result.push(calendarEvent);
|
|
1626
|
+
}
|
|
1627
|
+
catch (_a) {
|
|
1628
|
+
globalSlimmerRegistry.LogUtility.warn('Invalid calendar event item:', item);
|
|
1629
|
+
}
|
|
1630
|
+
});
|
|
1631
|
+
}
|
|
1632
|
+
this.calendarEvents = result;
|
|
1633
|
+
}
|
|
1634
|
+
}
|
|
1635
|
+
__decorate$c([
|
|
1636
|
+
globalSlimmerRegistry.MapToComponentField({ writable: true })
|
|
1637
|
+
], VegaCalendarEventController.prototype, "calendarEvents", void 0);
|
|
1638
|
+
__decorate$c([
|
|
1639
|
+
globalSlimmerRegistry.MapToComponentField()
|
|
1640
|
+
], VegaCalendarEventController.prototype, "events", void 0);
|
|
1641
|
+
__decorate$c([
|
|
1642
|
+
globalSlimmerRegistry.MapToComponentMethod('watchEventsChange')
|
|
1643
|
+
], VegaCalendarEventController.prototype, "updateAfterEventChange", null);
|
|
1644
|
+
__decorate$c([
|
|
1645
|
+
globalSlimmerRegistry.MapToComponentMethod('componentWillLoad')
|
|
1646
|
+
], VegaCalendarEventController.prototype, "updateWhenComponentWillLoad", null);
|
|
1647
|
+
|
|
1648
|
+
var __decorate$b = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {
|
|
1649
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
1650
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
1651
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
1652
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
1653
|
+
};
|
|
1654
|
+
/** The `VegaCalendarEventItemRenderer` class in TypeScript React is used for rendering calendar event items with specific layout and styling properties. */
|
|
1655
|
+
class VegaCalendarEventItemRenderer extends globalSlimmerRegistry.VegaSlimmer {
|
|
1656
|
+
/**
|
|
1657
|
+
* render event component
|
|
1658
|
+
*
|
|
1659
|
+
* @param {CalendarEvent} item the calendar event object
|
|
1660
|
+
* @param {Record<string,boolean>} classMap the class name map
|
|
1661
|
+
* @returns {HTMLVegaCalendarEventElement} calendar event element
|
|
1662
|
+
*/
|
|
1663
|
+
render(item, classMap) {
|
|
1664
|
+
return (index.h("vega-calendar-event", { key: item.eventKey, calendarEvent: item, class: classMap, onKeyDown: accessibility.createEnterKeyHandlerToTriggerClick(),
|
|
1665
|
+
// eslint-disable-next-line react/jsx-no-bind
|
|
1666
|
+
onClick: () => this.handleEventClick(item) }));
|
|
1667
|
+
}
|
|
1668
|
+
/**
|
|
1669
|
+
* emit vega click event
|
|
1670
|
+
*
|
|
1671
|
+
* @param {CalendarEvent} eventItem the event item
|
|
1672
|
+
*/
|
|
1673
|
+
handleEventClick(eventItem) {
|
|
1674
|
+
this.eventClickEmitter.emit({ rawEvent: eventItem.event });
|
|
1675
|
+
}
|
|
1676
|
+
}
|
|
1677
|
+
VegaCalendarEventItemRenderer.backgroundColorModeEventHeight = 18;
|
|
1678
|
+
__decorate$b([
|
|
1679
|
+
globalSlimmerRegistry.MapToComponentField()
|
|
1680
|
+
], VegaCalendarEventItemRenderer.prototype, "calendarView", void 0);
|
|
1681
|
+
__decorate$b([
|
|
1682
|
+
globalSlimmerRegistry.MapToComponentField()
|
|
1683
|
+
], VegaCalendarEventItemRenderer.prototype, "eventClickEmitter", void 0);
|
|
1684
|
+
|
|
1685
|
+
var __decorate$a = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {
|
|
1686
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
1687
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
1688
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
1689
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
1690
|
+
};
|
|
1691
|
+
/** The `VegaCalendarEventResponsiveController` class extends `PageResizeObserverSlimmer` and updates the max display count of month events with debounce in a VegaCalendar component. */
|
|
1692
|
+
class VegaCalendarEventResponsiveController extends pageResizeObserverSlimmer.PageResizeObserverSlimmer {
|
|
1693
|
+
/**
|
|
1694
|
+
* update the event view when the calendar layout update
|
|
1695
|
+
*/
|
|
1696
|
+
constructor() {
|
|
1697
|
+
super({
|
|
1698
|
+
// eslint-disable-next-line jsdoc/require-jsdoc
|
|
1699
|
+
target: /* istanbul ignore next */ () => this.host,
|
|
1700
|
+
// eslint-disable-next-line jsdoc/require-jsdoc
|
|
1701
|
+
callback: /* istanbul ignore next */ () => this.updateMaxDisplayCountWithDebounce(),
|
|
1702
|
+
});
|
|
1703
|
+
this.updateMaxDisplayCountWithDebounce = timer.debounce(this.updateMaxDisplayCount, 500, this);
|
|
1704
|
+
}
|
|
1705
|
+
/**
|
|
1706
|
+
* Update the month event display items.
|
|
1707
|
+
*/
|
|
1708
|
+
updateMaxDisplayCount() {
|
|
1709
|
+
// The debounce method will case this method called after component disconnect, then the slimmer will get issue to get viewMode from component class, this issue will catch in spec.ts
|
|
1710
|
+
try {
|
|
1711
|
+
const eventContainerRef = this.monthEventRenderer.getMonthEventContainerRef();
|
|
1712
|
+
if (this.viewMode === 'month' && eventContainerRef) {
|
|
1713
|
+
const maxContainerHeight = eventContainerRef.parentElement.getBoundingClientRect().height;
|
|
1714
|
+
const count = Math.floor((maxContainerHeight - VegaCalendarEventResponsiveController.monthDateTitleHeight) /
|
|
1715
|
+
VegaCalendarEventItemRenderer.backgroundColorModeEventHeight);
|
|
1716
|
+
changeManager.ChangeManager.notify(domNodeSubjectObserverFactory.domNodeSubjectFactory.getSubject(this.host, vegaInternalEventId.VegaInternalCalendarMonthEventsChange), {
|
|
1717
|
+
host: this.host,
|
|
1718
|
+
detail: count,
|
|
1719
|
+
});
|
|
1720
|
+
}
|
|
1721
|
+
// eslint-disable-next-line no-empty
|
|
1722
|
+
}
|
|
1723
|
+
catch (_a) { }
|
|
1724
|
+
}
|
|
1725
|
+
/**
|
|
1726
|
+
* update the max display count when switch view mode
|
|
1727
|
+
*
|
|
1728
|
+
* @param {VegaCalendarViewModeType} viewMode new view mode value
|
|
1729
|
+
*/
|
|
1730
|
+
updateMaxDisplayCountAfterSwitchToMonthView(viewMode) {
|
|
1731
|
+
if (viewMode === 'month') {
|
|
1732
|
+
this.updateMaxDisplayCountWithDebounce();
|
|
1733
|
+
}
|
|
1734
|
+
}
|
|
1735
|
+
}
|
|
1736
|
+
VegaCalendarEventResponsiveController.monthDateTitleHeight = 26;
|
|
1737
|
+
__decorate$a([
|
|
1738
|
+
globalSlimmerRegistry.MapToComponentField()
|
|
1739
|
+
], VegaCalendarEventResponsiveController.prototype, "host", void 0);
|
|
1740
|
+
__decorate$a([
|
|
1741
|
+
globalSlimmerRegistry.MapToComponentField()
|
|
1742
|
+
], VegaCalendarEventResponsiveController.prototype, "monthEventRenderer", void 0);
|
|
1743
|
+
__decorate$a([
|
|
1744
|
+
globalSlimmerRegistry.MapToComponentField()
|
|
1745
|
+
], VegaCalendarEventResponsiveController.prototype, "viewMode", void 0);
|
|
1746
|
+
__decorate$a([
|
|
1747
|
+
globalSlimmerRegistry.MapToComponentMethod('componentDidLoad')
|
|
1748
|
+
], VegaCalendarEventResponsiveController.prototype, "updateMaxDisplayCount", null);
|
|
1749
|
+
__decorate$a([
|
|
1750
|
+
globalSlimmerRegistry.MapToComponentMethod('watchViewModeChange')
|
|
1751
|
+
], VegaCalendarEventResponsiveController.prototype, "updateMaxDisplayCountAfterSwitchToMonthView", null);
|
|
1752
|
+
|
|
1753
|
+
var __decorate$9 = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {
|
|
1754
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
1755
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
1756
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
1757
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
1758
|
+
};
|
|
1759
|
+
class VegaCalendarFullDayEventRenderer extends globalSlimmerRegistry.VegaSlimmer {
|
|
1760
|
+
/**
|
|
1761
|
+
* render current preiod all day events
|
|
1762
|
+
*
|
|
1763
|
+
* @returns {HTMLElement} event element
|
|
1764
|
+
*/
|
|
1765
|
+
render() {
|
|
1766
|
+
const viewSource = this.calendarView.dateItems[0];
|
|
1767
|
+
const events = viewSource.map((calendarDate) => {
|
|
1768
|
+
return this.calendarEventController
|
|
1769
|
+
.getCurrentDateEvents(calendarDate)
|
|
1770
|
+
.filter((eventItem) => eventItem.isAllDayEvent || eventItem.isGroupEvent());
|
|
1771
|
+
});
|
|
1772
|
+
const orderEvents = this.fullDayEventLayoutRenderer.sortLongEvents(events);
|
|
1773
|
+
return (index.h("div", { class: "calendar-view-event-all" }, viewSource.map((item, index$1) => (index.h("div", { class: "event-all-col border-divider-left", key: item.date }, this.renderCurrentFullDayEvents(orderEvents[index$1], index$1))))));
|
|
1774
|
+
}
|
|
1775
|
+
/**
|
|
1776
|
+
* render current date all day events
|
|
1777
|
+
*
|
|
1778
|
+
* @param {Nullable<CalendarEvent>[]} events calendar events
|
|
1779
|
+
* @param {number} currentViewIndex the current date index of the array
|
|
1780
|
+
* @returns {HTMLVegaCalendarEventElement[]} event component array
|
|
1781
|
+
*/
|
|
1782
|
+
renderCurrentFullDayEvents(events, currentViewIndex) {
|
|
1783
|
+
const height = events.length * VegaCalendarEventItemRenderer.backgroundColorModeEventHeight - 2;
|
|
1784
|
+
return (index.h(index.Fragment, null,
|
|
1785
|
+
index.h("div", { class: "placeholder-block", style: { height: height + 'px' } },
|
|
1786
|
+
index.h("span", null,
|
|
1787
|
+
events.length,
|
|
1788
|
+
" events")),
|
|
1789
|
+
this.fullDayEventLayoutRenderer.render(events, currentViewIndex)));
|
|
1790
|
+
}
|
|
1791
|
+
}
|
|
1792
|
+
__decorate$9([
|
|
1793
|
+
globalSlimmerRegistry.MapToComponentField()
|
|
1794
|
+
], VegaCalendarFullDayEventRenderer.prototype, "calendarView", void 0);
|
|
1795
|
+
__decorate$9([
|
|
1796
|
+
globalSlimmerRegistry.MapToComponentField()
|
|
1797
|
+
], VegaCalendarFullDayEventRenderer.prototype, "calendarEventController", void 0);
|
|
1798
|
+
__decorate$9([
|
|
1799
|
+
globalSlimmerRegistry.MapToComponentField()
|
|
1800
|
+
], VegaCalendarFullDayEventRenderer.prototype, "eventItemRenderer", void 0);
|
|
1801
|
+
__decorate$9([
|
|
1802
|
+
globalSlimmerRegistry.MapToComponentField()
|
|
1803
|
+
], VegaCalendarFullDayEventRenderer.prototype, "fullDayEventLayoutRenderer", void 0);
|
|
1804
|
+
|
|
1805
|
+
var __decorate$8 = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {
|
|
1806
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
1807
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
1808
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
1809
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
1810
|
+
};
|
|
1811
|
+
/** The `VegaCalendarDayViewEventLayoutRenderer` class in TypeScript React renders event layouts for a day view calendar. */
|
|
1812
|
+
class VegaCalendarDayViewEventLayoutRenderer extends globalSlimmerRegistry.VegaSlimmer {
|
|
1813
|
+
/**
|
|
1814
|
+
* The `render` function in TypeScript React renders a layout of calendar events for a day view.
|
|
1815
|
+
*
|
|
1816
|
+
* @param {VegaCalendarDayViewTimedEventLayout} layout - The `layout` parameter in the `render` function is
|
|
1817
|
+
* of type `VegaCalendarDayViewTimedEventLayout`, which contains information about the layout of events for
|
|
1818
|
+
* a day view in a calendar. It has properties like `eventLayoutColumns`, which is an array of `VegaCalendarDayViewEvent
|
|
1819
|
+
* @returns {HTMLElement[]} An array of HTMLElements representing the rendered event nodes based on the provided layout and event data.
|
|
1820
|
+
*/
|
|
1821
|
+
render(layout) {
|
|
1822
|
+
const layoutColumns = layout.eventLayoutCells;
|
|
1823
|
+
const eventNodes = [];
|
|
1824
|
+
layoutColumns.forEach((columns, index$1) => {
|
|
1825
|
+
let renderEvent = columns.getEventBySlotIndex(0);
|
|
1826
|
+
let start = 0;
|
|
1827
|
+
for (let i = 0; i < VegaCalendarDayViewEventLayoutRenderer.totalNumberOfCells; i++) {
|
|
1828
|
+
const currentEvent = columns.getEventBySlotIndex(i);
|
|
1829
|
+
if (currentEvent !== renderEvent) {
|
|
1830
|
+
if (renderEvent) {
|
|
1831
|
+
eventNodes.push(index.h("div", { key: index$1, class: "time-event-block", style: this.getTimeEventStyle(start, i, index$1, layout.getEventColumnsSpannedCount(renderEvent)) }, this.eventItemRenderer.render(renderEvent, {
|
|
1832
|
+
'day-event': true,
|
|
1833
|
+
'bg-shadow': index$1 > 0,
|
|
1834
|
+
})));
|
|
1835
|
+
}
|
|
1836
|
+
renderEvent = currentEvent;
|
|
1837
|
+
start = i;
|
|
1838
|
+
}
|
|
1839
|
+
}
|
|
1840
|
+
});
|
|
1841
|
+
return eventNodes;
|
|
1842
|
+
}
|
|
1843
|
+
/*
|
|
1844
|
+
* The below method is e2e-test covered in
|
|
1845
|
+
* @see{module:vega-calendar-render-timed-event-correct}
|
|
1846
|
+
*/
|
|
1847
|
+
/* istanbul ignore next */
|
|
1848
|
+
/**
|
|
1849
|
+
* This function calculates and returns the style properties for positioning and sizing a calendar event within a grid layout.
|
|
1850
|
+
*
|
|
1851
|
+
* @param {number} startIndex - The `startIndex` parameter represents the index of the starting cell for the time event in the calendar grid.
|
|
1852
|
+
* @param {number} endIndex - The `endIndex` parameter represents the index of the end position of the time event within a column. It indicates where the time event ends vertically within the column layout.
|
|
1853
|
+
* @param {number} columnIndex - The `columnIndex` parameter represents the index of the column in which the event is being displayed. It is used to calculate the `left` position of the event element within the container based on the total number of columns spanned by the event.
|
|
1854
|
+
* @param {number} columnsSpannedCount - The `columnsSpannedCount` parameter represents the number of columns spanned by the event in a calendar layout. It is used to calculate the left position of the event within the calendar grid.
|
|
1855
|
+
* @returns {VegaCalendarEventStyle} The function `getTimeEventStyle` returns an object of type `VegaCalendarEventStyle` with properties for position, left, top, width, height, and zIndex.
|
|
1856
|
+
*/
|
|
1857
|
+
getTimeEventStyle(startIndex, endIndex, columnIndex, columnsSpannedCount) {
|
|
1858
|
+
const left = columnIndex * (1 / columnsSpannedCount);
|
|
1859
|
+
return {
|
|
1860
|
+
position: 'absolute',
|
|
1861
|
+
left: `${left * 100}%`,
|
|
1862
|
+
top: `${(100 / VegaCalendarDayViewEventLayoutRenderer.totalNumberOfCells) * startIndex}%`,
|
|
1863
|
+
width: `calc(100% - ${left * 100}%)`,
|
|
1864
|
+
height: `${(100 / VegaCalendarDayViewEventLayoutRenderer.totalNumberOfCells) * (endIndex - startIndex)}%`,
|
|
1865
|
+
zIndex: columnIndex > 0 ? `${columnIndex}` : null,
|
|
1866
|
+
};
|
|
1867
|
+
}
|
|
1868
|
+
}
|
|
1869
|
+
VegaCalendarDayViewEventLayoutRenderer.totalNumberOfCells = 24 * 4;
|
|
1870
|
+
__decorate$8([
|
|
1871
|
+
globalSlimmerRegistry.MapToComponentField()
|
|
1872
|
+
], VegaCalendarDayViewEventLayoutRenderer.prototype, "eventItemRenderer", void 0);
|
|
1873
|
+
|
|
1874
|
+
/** This code snippet is defining an abstract class named `VegaCalendarBaseEventLayoutGenerator` in TypeScript. The class contains an abstract method `generate` that must be implemented by any class that extends `VegaCalendarBaseEventLayoutGenerator`. */
|
|
1875
|
+
class VegaCalendarBaseEventLayoutGenerator {
|
|
1876
|
+
/**
|
|
1877
|
+
* The function `addCurrentEventToLayout` adds a long event view to a layout row without overlapping with existing events.
|
|
1878
|
+
*
|
|
1879
|
+
* @param {VegaCalendarBaseEventLayoutCell[]} layoutCells - The `layoutCells` parameter is an array of
|
|
1880
|
+
* `VegaCalendarBaseEventLayoutCell` objects. These objects represent rows in a layout where long events are displayed without overlapping each other.
|
|
1881
|
+
* @param {unknown} input - The `currentView` parameter represents the current long event view that you want to add to the layout rows without overlapping with existing events. The function `addCurrentEventToLayoutRow` searches for a layout row that does not have any overlap with the current view. If such a row is found,
|
|
1882
|
+
*/
|
|
1883
|
+
addCurrentEventToLayout(layoutCells, input) {
|
|
1884
|
+
let noOverlapCell = layoutCells.find((layoutCell) => {
|
|
1885
|
+
return !layoutCell.hasOverlapEvent(input);
|
|
1886
|
+
});
|
|
1887
|
+
if (!noOverlapCell) {
|
|
1888
|
+
noOverlapCell = this.createNewLayoutCell();
|
|
1889
|
+
noOverlapCell.updateSlots(input);
|
|
1890
|
+
layoutCells.push(noOverlapCell);
|
|
1891
|
+
}
|
|
1892
|
+
else {
|
|
1893
|
+
noOverlapCell.updateSlots(input);
|
|
1894
|
+
}
|
|
1895
|
+
}
|
|
1896
|
+
}
|
|
1897
|
+
|
|
1898
|
+
/** This TypeScript code snippet defines an abstract class `VegaCalendarBaseEventLayout` that serves as a base for event layout functionality in a calendar application. */
|
|
1899
|
+
class VegaCalendarBaseEventLayout {
|
|
1900
|
+
/**
|
|
1901
|
+
* The function returns an array of VegaCalendarBaseEventLayoutCell objects.
|
|
1902
|
+
*
|
|
1903
|
+
* @returns {VegaCalendarBaseEventLayoutCell[]} An array of VegaCalendarLongEventLayoutRow objects is being returned.
|
|
1904
|
+
*/
|
|
1905
|
+
get eventLayoutCells() {
|
|
1906
|
+
return this.cells;
|
|
1907
|
+
}
|
|
1908
|
+
}
|
|
1909
|
+
|
|
1910
|
+
/** This TypeScript class, VegaCalendarDayViewTimedEventLayout, manages the layout of events in a day view calendar. */
|
|
1911
|
+
class VegaCalendarDayViewTimedEventLayout extends VegaCalendarBaseEventLayout {
|
|
1912
|
+
/**
|
|
1913
|
+
* The constructor function initializes the columns property with the provided array of VegaCalendarDayViewTimedEventLayoutColumn objects.
|
|
1914
|
+
*
|
|
1915
|
+
* @param {VegaCalendarDayViewTimedEventLayoutColumn[]} columns - An array of VegaCalendarDayViewTimedEventLayoutColumn objects.
|
|
1916
|
+
*/
|
|
1917
|
+
constructor(columns) {
|
|
1918
|
+
super();
|
|
1919
|
+
this.cells = columns;
|
|
1920
|
+
}
|
|
1921
|
+
/**
|
|
1922
|
+
* The function `getEventColumnsSpannedCount` calculates the number of columns spanned by a given calendar event in a day view layout.
|
|
1923
|
+
*
|
|
1924
|
+
* @param {CalendarEvent} eventItem - The `getEventColumnsSpannedCount` function takes a `CalendarEvent` object as the `eventItem` parameter. This function calculates the number of columns spanned by the given event within the calendar view.
|
|
1925
|
+
* @returns {number} The function `getEventColumnsSpannedCount` returns the number of columns spanned by the given `eventItem` in the `VegaCalendarDayViewTimedEventLayoutColumn` array `columns`.
|
|
1926
|
+
*/
|
|
1927
|
+
getEventColumnsSpannedCount(eventItem) {
|
|
1928
|
+
const eventColumnIndex = this.cells.findIndex((column) => {
|
|
1929
|
+
return column.getEventStartIndex(eventItem) >= 0;
|
|
1930
|
+
});
|
|
1931
|
+
let count = eventColumnIndex + 1;
|
|
1932
|
+
if (eventColumnIndex < this.cells.length - 1) {
|
|
1933
|
+
this.cells
|
|
1934
|
+
.slice(eventColumnIndex + 1)
|
|
1935
|
+
.forEach((column) => {
|
|
1936
|
+
if (column.hasOverlapEvent(eventItem)) {
|
|
1937
|
+
count++;
|
|
1938
|
+
}
|
|
1939
|
+
});
|
|
1940
|
+
}
|
|
1941
|
+
return count;
|
|
1942
|
+
}
|
|
1943
|
+
}
|
|
1944
|
+
|
|
1945
|
+
/** This code snippet is defining an abstract class named `VegaCalendarBaseEventLayoutCell`. Here's a breakdown of what it does: */
|
|
1946
|
+
class VegaCalendarBaseEventLayoutCell {
|
|
1947
|
+
/**
|
|
1948
|
+
* This function retrieves a calendar event based on the slot index provided.
|
|
1949
|
+
*
|
|
1950
|
+
* @param {number} index - The `index` parameter is a number that represents the position of a slot in an array.
|
|
1951
|
+
* @returns {CalendarEvent | null} The `getEventBySlotIndex` method is returning a `CalendarEvent` object from the `slots` array at the specified `index`.
|
|
1952
|
+
*/
|
|
1953
|
+
getEventBySlotIndex(index) {
|
|
1954
|
+
return this.slots[index];
|
|
1955
|
+
}
|
|
1956
|
+
/**
|
|
1957
|
+
* The function `getEventStartIndex` returns the index of a given `CalendarEvent` object within an array of `CalendarEvent` objects.
|
|
1958
|
+
*
|
|
1959
|
+
* @param {CalendarEvent} eventItem - CalendarEvent
|
|
1960
|
+
* @returns {number} The function `getEventStartIndex` returns the index of the `eventItem` within the `slots` array.
|
|
1961
|
+
*/
|
|
1962
|
+
getEventStartIndex(eventItem) {
|
|
1963
|
+
return this.slots.findIndex((item) => item === eventItem);
|
|
1964
|
+
}
|
|
1965
|
+
/**
|
|
1966
|
+
* This TypeScript function calculates the end index of a calendar event within a specified range of slots.
|
|
1967
|
+
*
|
|
1968
|
+
* @param {CalendarEvent} eventItem - CalendarEvent - the event item for which we want to find the end index in the calendar.
|
|
1969
|
+
* @returns {number} The `getEventEndIndex` function returns the index of the end of the calendar event in the `VegaCalendarLongEventLayoutRow.defaultSlots` array.
|
|
1970
|
+
*/
|
|
1971
|
+
getEventEndIndex(eventItem) {
|
|
1972
|
+
const startIndex = this.getEventStartIndex(eventItem);
|
|
1973
|
+
let endIndex = startIndex;
|
|
1974
|
+
if (startIndex >= 0) {
|
|
1975
|
+
for (let i = startIndex + 1; i < this.slots.length; i++) {
|
|
1976
|
+
if (this.slots[i] !== eventItem) {
|
|
1977
|
+
endIndex = i - 1;
|
|
1978
|
+
break;
|
|
1979
|
+
}
|
|
1980
|
+
else if (i === this.slots.length - 1) {
|
|
1981
|
+
endIndex = i;
|
|
1982
|
+
}
|
|
1983
|
+
}
|
|
1984
|
+
}
|
|
1985
|
+
return endIndex;
|
|
1986
|
+
}
|
|
1987
|
+
}
|
|
1988
|
+
|
|
1989
|
+
/** The class `VegaCalendarDayViewEventLayoutColumn` manages the layout of events in a day view calendar by storing event slots and providing methods to interact with them. */
|
|
1990
|
+
class VegaCalendarDayViewTimedEventLayoutColumn extends VegaCalendarBaseEventLayoutCell {
|
|
1991
|
+
constructor() {
|
|
1992
|
+
super(...arguments);
|
|
1993
|
+
this.slots = VegaCalendarDayViewTimedEventLayoutColumn.defaultSlots;
|
|
1994
|
+
}
|
|
1995
|
+
/**
|
|
1996
|
+
* The function `hasOverlapEvent` checks if a given calendar event overlaps with existing events in the calendar.
|
|
1997
|
+
*
|
|
1998
|
+
* @param {CalendarEvent} eventItem - The `eventItem` parameter in the `hasOverlapEvent` function represents a `CalendarEvent` object that contains information about an event such as its start time, end time, and possibly other details related to the event.
|
|
1999
|
+
* @returns {boolean} The function `hasOverlapEvent` returns a boolean value indicating whether there is an overlap in the calendar event slots. If there is an overlap, it returns `true`, otherwise it returns `false`.
|
|
2000
|
+
*/
|
|
2001
|
+
hasOverlapEvent(eventItem) {
|
|
2002
|
+
const [start, end] = this.getIndexRangeFromEvent(eventItem);
|
|
2003
|
+
let overlapFlag = false;
|
|
2004
|
+
for (let i = start; i < end; i++) {
|
|
2005
|
+
if (this.slots[i]) {
|
|
2006
|
+
overlapFlag = true;
|
|
2007
|
+
break;
|
|
2008
|
+
}
|
|
2009
|
+
}
|
|
2010
|
+
return overlapFlag;
|
|
2011
|
+
}
|
|
2012
|
+
/**
|
|
2013
|
+
* The function `updateColumnSlots` updates the slots array by replacing a range of elements with a given event item.
|
|
2014
|
+
*
|
|
2015
|
+
* @param {CalendarEvent} eventItem - The `eventItem` parameter is a `CalendarEvent` object that represents an event in a calendar.
|
|
2016
|
+
*/
|
|
2017
|
+
updateSlots(eventItem) {
|
|
2018
|
+
const [start, end] = this.getIndexRangeFromEvent(eventItem);
|
|
2019
|
+
if (end > start) {
|
|
2020
|
+
this.slots = this.slots
|
|
2021
|
+
.slice(0, start)
|
|
2022
|
+
.concat(Array(end - start).fill(eventItem), this.slots.slice(end));
|
|
2023
|
+
}
|
|
2024
|
+
}
|
|
2025
|
+
/**
|
|
2026
|
+
* The function `getIndexRangeFromEvent` takes a `CalendarEvent` object and returns an array of time indices based on the start and end times of the event.
|
|
2027
|
+
*
|
|
2028
|
+
* @param {CalendarEvent} eventItem - A CalendarEvent object containing information about a specific event in a calendar, such as its start time and end time.
|
|
2029
|
+
* @returns {number[]} An array of two numbers representing the index range of the start and end times of the given CalendarEvent.
|
|
2030
|
+
*/
|
|
2031
|
+
getIndexRangeFromEvent(eventItem) {
|
|
2032
|
+
const { startTime, endTime } = eventItem;
|
|
2033
|
+
return [getTimeIndex(startTime), getTimeIndex(endTime)];
|
|
2034
|
+
}
|
|
2035
|
+
}
|
|
2036
|
+
VegaCalendarDayViewTimedEventLayoutColumn.defaultSlots = Array(96).fill(null);
|
|
2037
|
+
|
|
2038
|
+
/** The `VegaCalendarDayViewEventLayoutGenerator` class in TypeScript generates a layout for calendar events in a day view. */
|
|
2039
|
+
class VegaCalendarDayViewTimedEventLayoutGenerator extends VegaCalendarBaseEventLayoutGenerator {
|
|
2040
|
+
/**
|
|
2041
|
+
* The function generates a layout for displaying calendar events in a day view.
|
|
2042
|
+
*
|
|
2043
|
+
* @param {CalendarEvent[]} calendarEvents - CalendarEvent[] - an array of calendar events containing information such as event title, start time, end time, and other relevant details.
|
|
2044
|
+
* @returns {VegaCalendarDayViewTimedEventLayout} A `VegaCalendarDayViewTimedEventLayout` object is being returned, which is constructed using the `layoutColumns` array containing `VegaCalendarDayViewTimedEventLayoutColumn` objects.
|
|
2045
|
+
*/
|
|
2046
|
+
generate(calendarEvents) {
|
|
2047
|
+
const layoutColumns = [
|
|
2048
|
+
new VegaCalendarDayViewTimedEventLayoutColumn(),
|
|
2049
|
+
];
|
|
2050
|
+
calendarEvents.forEach((eventItem) => {
|
|
2051
|
+
this.addCurrentEventToLayout(layoutColumns, eventItem);
|
|
2052
|
+
});
|
|
2053
|
+
return new VegaCalendarDayViewTimedEventLayout(layoutColumns);
|
|
2054
|
+
}
|
|
2055
|
+
/**
|
|
2056
|
+
* The function creates a new instance of VegaCalendarDayViewTimedEventLayoutColumn.
|
|
2057
|
+
*
|
|
2058
|
+
* @returns {VegaCalendarDayViewTimedEventLayoutColumn} An instance of the class `VegaCalendarDayViewTimedEventLayoutColumn` is being returned.
|
|
2059
|
+
*/
|
|
2060
|
+
createNewLayoutCell() {
|
|
2061
|
+
return new VegaCalendarDayViewTimedEventLayoutColumn();
|
|
2062
|
+
}
|
|
2063
|
+
}
|
|
2064
|
+
|
|
2065
|
+
/** The VegaCalendarEventSorter class in TypeScript provides a sort method to sort an array of CalendarEvent objects. */
|
|
2066
|
+
class VegaCalendarEventSorter {
|
|
2067
|
+
/**
|
|
2068
|
+
* The function "sort" takes an array of CalendarEvent objects and returns the same array without performing any sorting.
|
|
2069
|
+
*
|
|
2070
|
+
* @param {CalendarEvent[]} events - CalendarEvent[] - an array of CalendarEvent objects that need to be sorted.
|
|
2071
|
+
* @param {number} currentViewIndex - The current index of the row
|
|
2072
|
+
* @param {VegaCalendarFullDayEventLayout} fullDayEventLayout - The current row all long event layout
|
|
2073
|
+
* @returns {Nullable<CalendarEvent>} The `sort` function is currently returning the input array of `CalendarEvent` objects as is, without performing any sorting operation.
|
|
2074
|
+
*/
|
|
2075
|
+
sort(events, currentViewIndex, fullDayEventLayout) {
|
|
2076
|
+
const allDayEvents = [];
|
|
2077
|
+
const groupEvents = [];
|
|
2078
|
+
const otherEvents = [];
|
|
2079
|
+
for (let i = 0; i < events.length; i++) {
|
|
2080
|
+
const currentEvent = events[i];
|
|
2081
|
+
if (currentEvent) {
|
|
2082
|
+
if (currentEvent.isGroupEvent()) {
|
|
2083
|
+
groupEvents.push(currentEvent);
|
|
2084
|
+
}
|
|
2085
|
+
else if (currentEvent.isAllDayEvent) {
|
|
2086
|
+
allDayEvents.push(currentEvent);
|
|
2087
|
+
}
|
|
2088
|
+
else {
|
|
2089
|
+
otherEvents.push(currentEvent);
|
|
2090
|
+
}
|
|
2091
|
+
}
|
|
2092
|
+
}
|
|
2093
|
+
let result = allDayEvents.concat(this.sortCalendarEventByTime(otherEvents));
|
|
2094
|
+
let currentViewOrderGroupEvents = fullDayEventLayout.getEventsByIndex(currentViewIndex);
|
|
2095
|
+
const currentEvents = currentViewOrderGroupEvents.filter((item) => item);
|
|
2096
|
+
result = groupEvents
|
|
2097
|
+
.filter((groupEvent) => {
|
|
2098
|
+
return currentEvents.findIndex((item) => item === groupEvent) < 0;
|
|
2099
|
+
})
|
|
2100
|
+
.concat(result);
|
|
2101
|
+
if (currentViewOrderGroupEvents.length > currentEvents.length) {
|
|
2102
|
+
const insertItems = result.slice(0, currentViewOrderGroupEvents.length - currentEvents.length);
|
|
2103
|
+
result = result.slice(currentViewOrderGroupEvents.length - currentEvents.length);
|
|
2104
|
+
currentViewOrderGroupEvents = this.insertEventsToEmptyPosition(currentViewOrderGroupEvents, insertItems);
|
|
2105
|
+
}
|
|
2106
|
+
result = currentViewOrderGroupEvents.concat(result);
|
|
2107
|
+
return result;
|
|
2108
|
+
}
|
|
2109
|
+
/**
|
|
2110
|
+
* The function `sortCalendarEventByTime` sorts an array of `CalendarEvent` objects based on their start and end times.
|
|
2111
|
+
*
|
|
2112
|
+
* @param {CalendarEvent[]} events - An array of CalendarEvent objects. Each CalendarEvent object contains information about a specific event, such as startTime and endTime.
|
|
2113
|
+
* @returns {CalendarEvent[]} The `sortCalendarEventByTime` function is returning an array of `CalendarEvent` objects sorted by their start time and end time. The events are sorted in ascending order based on their start time, and if two events have the same start time, they are further sorted in descending order based on their end time.
|
|
2114
|
+
*/
|
|
2115
|
+
sortCalendarEventByTime(events) {
|
|
2116
|
+
return events.sort((eventA, eventB) => {
|
|
2117
|
+
const eventAStartIndex = getTimeIndex(eventA.startTime);
|
|
2118
|
+
const eventBStartIndex = getTimeIndex(eventB.startTime);
|
|
2119
|
+
if (eventAStartIndex === eventBStartIndex) {
|
|
2120
|
+
return getTimeIndex(eventB.endTime) - getTimeIndex(eventA.endTime);
|
|
2121
|
+
}
|
|
2122
|
+
else {
|
|
2123
|
+
return eventAStartIndex - eventBStartIndex;
|
|
2124
|
+
}
|
|
2125
|
+
});
|
|
2126
|
+
}
|
|
2127
|
+
/**
|
|
2128
|
+
* The function inserts events from a given array into empty positions in another array of events.
|
|
2129
|
+
*
|
|
2130
|
+
* @param {Nullable<CalendarEvent>[]} viewEvents - `viewEvents` is an array of nullable
|
|
2131
|
+
* `CalendarEvent` objects representing the events currently displayed in the calendar view. Each
|
|
2132
|
+
* element in the array can either be a `CalendarEvent` object or `null`.
|
|
2133
|
+
* @param {CalendarEvent[]} events - The `events` parameter in the `insertEventsToEmptyPosition`
|
|
2134
|
+
* function represents an array of `CalendarEvent` objects that need to be inserted into the
|
|
2135
|
+
* `viewEvents` array at empty positions. The function iterates over the `viewEvents` array and
|
|
2136
|
+
* inserts events from the `events` array
|
|
2137
|
+
* @returns {CalendarEvent|null[]} The `insertEventsToEmptyPosition` function returns an array of `Nullable<CalendarEvent>`
|
|
2138
|
+
* where events from the `events` array are inserted into empty positions in the `viewEvents` array.
|
|
2139
|
+
* If there are no empty positions in `viewEvents`, the function returns the original `viewEvents`
|
|
2140
|
+
* array.
|
|
2141
|
+
*/
|
|
2142
|
+
insertEventsToEmptyPosition(viewEvents, events) {
|
|
2143
|
+
return viewEvents.map((item) => {
|
|
2144
|
+
if (events.length && !item) {
|
|
2145
|
+
const insertItem = events[0];
|
|
2146
|
+
events = events.slice(1);
|
|
2147
|
+
return insertItem;
|
|
2148
|
+
}
|
|
2149
|
+
else {
|
|
2150
|
+
return item;
|
|
2151
|
+
}
|
|
2152
|
+
});
|
|
2153
|
+
}
|
|
2154
|
+
}
|
|
2155
|
+
|
|
2156
|
+
var __decorate$7 = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {
|
|
2157
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
2158
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
2159
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
2160
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
2161
|
+
};
|
|
2162
|
+
/** The `VegaCalendarTimedEventRenderer` class in TypeScript React renders timed events for a calendar view based on the current day's events. timed events render for day view and week view */
|
|
2163
|
+
class VegaCalendarTimedEventRenderer extends globalSlimmerRegistry.VegaSlimmer {
|
|
2164
|
+
constructor() {
|
|
2165
|
+
super(...arguments);
|
|
2166
|
+
this.calendarEventSorter = new VegaCalendarEventSorter();
|
|
2167
|
+
this.dayViewTimedEventLayoutGenerator = new VegaCalendarDayViewTimedEventLayoutGenerator();
|
|
2168
|
+
}
|
|
2169
|
+
/**
|
|
2170
|
+
* render current preiod normal events
|
|
2171
|
+
*
|
|
2172
|
+
* @returns {HTMLElement} events element
|
|
2173
|
+
*/
|
|
2174
|
+
render() {
|
|
2175
|
+
const viewSource = this.calendarView.dateItems[0];
|
|
2176
|
+
return (index.h("div", { class: "day-event-container" }, viewSource.map((item) => {
|
|
2177
|
+
return (index.h("div", { key: `${item.month}-${item.date}`, class: "day-event-col" }, this.renderTimedEvents(item)));
|
|
2178
|
+
})));
|
|
2179
|
+
}
|
|
2180
|
+
/**
|
|
2181
|
+
* render current day events
|
|
2182
|
+
*
|
|
2183
|
+
* @param {CalendarDate} date calendar Date
|
|
2184
|
+
* @returns {HTMLElement[]} event elements
|
|
2185
|
+
*/
|
|
2186
|
+
renderTimedEvents(date) {
|
|
2187
|
+
const events = this.calendarEventController
|
|
2188
|
+
.getCurrentDateEvents(date)
|
|
2189
|
+
.filter((eventItem) => !eventItem.isAllDayEvent && !eventItem.isGroupEvent());
|
|
2190
|
+
const sortEvents = this.calendarEventSorter.sortCalendarEventByTime(events);
|
|
2191
|
+
const layout = this.dayViewTimedEventLayoutGenerator.generate(sortEvents);
|
|
2192
|
+
return this.dayViewEventLayoutRenderer.render(layout);
|
|
2193
|
+
}
|
|
2194
|
+
}
|
|
2195
|
+
__decorate$7([
|
|
2196
|
+
globalSlimmerRegistry.MapToComponentField()
|
|
2197
|
+
], VegaCalendarTimedEventRenderer.prototype, "calendarView", void 0);
|
|
2198
|
+
__decorate$7([
|
|
2199
|
+
globalSlimmerRegistry.MapToComponentField()
|
|
2200
|
+
], VegaCalendarTimedEventRenderer.prototype, "calendarEventController", void 0);
|
|
2201
|
+
__decorate$7([
|
|
2202
|
+
globalSlimmerRegistry.MapToComponentField()
|
|
2203
|
+
], VegaCalendarTimedEventRenderer.prototype, "dayViewEventLayoutRenderer", void 0);
|
|
2204
|
+
|
|
2205
|
+
/** The VegaCalendarLongEventLayout class manages the layout of long events in a calendar by organizing them into rows. */
|
|
2206
|
+
class VegaCalendarFullDayEventLayout extends VegaCalendarBaseEventLayout {
|
|
2207
|
+
/**
|
|
2208
|
+
* The constructor function initializes a VegaCalendarFullDayEventLayoutRow array in TypeScript.
|
|
2209
|
+
*
|
|
2210
|
+
* @param {VegaCalendarFullDayEventLayoutRow[]} rows - An array of VegaCalendarFullDayEventLayoutRow objects.
|
|
2211
|
+
*/
|
|
2212
|
+
constructor(rows) {
|
|
2213
|
+
super();
|
|
2214
|
+
this.cells = rows;
|
|
2215
|
+
}
|
|
2216
|
+
/**
|
|
2217
|
+
* This TypeScript function returns the index of a row containing a specific calendar event.
|
|
2218
|
+
*
|
|
2219
|
+
* @param {CalendarEvent} eventItem - The `eventItem` parameter is a `CalendarEvent` object that represents an event in a calendar.
|
|
2220
|
+
* @returns {number} The function `getEventRowsIndex` returns the index of the row in the `rows` array where the `eventItem` is found based on the condition specified in the `findIndex` method.
|
|
2221
|
+
*/
|
|
2222
|
+
getEventRowsIndex(eventItem) {
|
|
2223
|
+
return this.cells.findIndex((row) => row.getEventStartIndex(eventItem) >= 0);
|
|
2224
|
+
}
|
|
2225
|
+
/**
|
|
2226
|
+
* This function retrieves CalendarEvents from each row in a calendar layout based on a specified index.
|
|
2227
|
+
*
|
|
2228
|
+
* @param {number} index - The `index` parameter in the `getEventsByIndex` method is a number that
|
|
2229
|
+
* represents the slot index for which you want to retrieve calendar events. The method iterates
|
|
2230
|
+
* through each row in the `rows` array and retrieves the calendar event at the specified slot index from each row. The method
|
|
2231
|
+
* @returns {(Nullable<CalendarEvent>)[]} An array of CalendarEvent objects is being returned.
|
|
2232
|
+
*/
|
|
2233
|
+
getEventsByIndex(index) {
|
|
2234
|
+
const result = [];
|
|
2235
|
+
let lastItemIndex = 0;
|
|
2236
|
+
this.cells.forEach((row, rowIndex) => {
|
|
2237
|
+
const currentEvent = row.getEventBySlotIndex(index);
|
|
2238
|
+
result.push(currentEvent);
|
|
2239
|
+
if (currentEvent) {
|
|
2240
|
+
lastItemIndex = rowIndex;
|
|
2241
|
+
}
|
|
2242
|
+
});
|
|
2243
|
+
return result.slice(0, lastItemIndex + 1);
|
|
2244
|
+
}
|
|
2245
|
+
}
|
|
2246
|
+
|
|
2247
|
+
/** The `VegaCalendarLongEventLayoutRow` class in TypeScript manages the layout of long events in a calendar by updating slots and checking for overlaps. */
|
|
2248
|
+
class VegaCalendarFullDayEventLayoutRow extends VegaCalendarBaseEventLayoutCell {
|
|
2249
|
+
constructor() {
|
|
2250
|
+
super(...arguments);
|
|
2251
|
+
this.slots = VegaCalendarFullDayEventLayoutRow.defaultSlots;
|
|
2252
|
+
}
|
|
2253
|
+
/**
|
|
2254
|
+
* The function `updateRowSlots` updates a row of slots in a calendar view with a long event.
|
|
2255
|
+
*
|
|
2256
|
+
* @param {VegaCalendarFullDayEventView} eventView - The `eventView` parameter in the `updateRowSlots` method is of type `VegaCalendarFullDayEventView`. It contains information about a long event in a
|
|
2257
|
+
*/
|
|
2258
|
+
updateSlots(eventView) {
|
|
2259
|
+
const { start, end } = eventView;
|
|
2260
|
+
this.slots = this.slots
|
|
2261
|
+
.slice(0, start)
|
|
2262
|
+
.concat(Array(end - start + 1).fill(eventView.event), this.slots.slice(end + 1));
|
|
2263
|
+
}
|
|
2264
|
+
/**
|
|
2265
|
+
* The function checks if a given event overlaps with existing events in a calendar view.
|
|
2266
|
+
*
|
|
2267
|
+
* @param {VegaCalendarFullDayEventView} eventView - The `eventView` parameter in the `hasOverlapEvent`
|
|
2268
|
+
* function represents a view of a long event in a Vega calendar. It contains the `start` and `end`
|
|
2269
|
+
* properties which specify the start and end times of the event. The function checks if there is any
|
|
2270
|
+
* overlap with existing events in
|
|
2271
|
+
* @returns {boolean} The function `hasOverlapEvent` returns a boolean value indicating whether there is an
|
|
2272
|
+
* overlap in the slots between the start and end times of the given `VegaCalendarFullDayEventView` event.
|
|
2273
|
+
*/
|
|
2274
|
+
hasOverlapEvent(eventView) {
|
|
2275
|
+
const { start, end } = eventView;
|
|
2276
|
+
let overlapFlag = false;
|
|
2277
|
+
for (let i = start; i < end + 1; i++) {
|
|
2278
|
+
if (this.slots[i]) {
|
|
2279
|
+
overlapFlag = true;
|
|
2280
|
+
break;
|
|
2281
|
+
}
|
|
2282
|
+
}
|
|
2283
|
+
return overlapFlag;
|
|
2284
|
+
}
|
|
2285
|
+
}
|
|
2286
|
+
VegaCalendarFullDayEventLayoutRow.defaultSlots = Array(7).fill(null);
|
|
2287
|
+
|
|
2288
|
+
/** The `VegaCalendarLongEventLayoutGenerator` class in TypeScript generates a layout for long calendar events with overlapping prevention logic. */
|
|
2289
|
+
class VegaCalendarFullDayEventLayoutGenerator extends VegaCalendarBaseEventLayoutGenerator {
|
|
2290
|
+
/**
|
|
2291
|
+
* The function generates a long event layout for a calendar based on the input calendar events.
|
|
2292
|
+
*
|
|
2293
|
+
* @param {CalendarEvent[][]} calendarEvents - CalendarEvent[][] is a two-dimensional array where each
|
|
2294
|
+
* element represents a day in the calendar and contains an array of CalendarEvent objects representing events on that day.
|
|
2295
|
+
* @returns {VegaCalendarFullDayEventLayout} A new instance of `VegaCalendarFullDayEventLayout` is being returned, which is constructed
|
|
2296
|
+
* using the `layoutRows` array containing `VegaCalendarFullDayEventLayoutRow` objects.
|
|
2297
|
+
*/
|
|
2298
|
+
generate(calendarEvents) {
|
|
2299
|
+
const allShouldOrderLongEvents = this.collectAllShouldOrderLongEvents(calendarEvents);
|
|
2300
|
+
const layoutRows = [new VegaCalendarFullDayEventLayoutRow()];
|
|
2301
|
+
allShouldOrderLongEvents.forEach((eventView) => {
|
|
2302
|
+
this.addCurrentEventToLayout(layoutRows, eventView);
|
|
2303
|
+
});
|
|
2304
|
+
return new VegaCalendarFullDayEventLayout(layoutRows);
|
|
2305
|
+
}
|
|
2306
|
+
/**
|
|
2307
|
+
* The function creates a new instance of VegaCalendarFullDayEventLayoutRow.
|
|
2308
|
+
*
|
|
2309
|
+
* @returns {VegaCalendarFullDayEventLayoutRow} An instance of the class `VegaCalendarFullDayEventLayoutRow` is being returned.
|
|
2310
|
+
*/
|
|
2311
|
+
createNewLayoutCell() {
|
|
2312
|
+
return new VegaCalendarFullDayEventLayoutRow();
|
|
2313
|
+
}
|
|
2314
|
+
/**
|
|
2315
|
+
* Filter the all should order group event from event list
|
|
2316
|
+
*
|
|
2317
|
+
* @param {CalendarEvent[][]} allEvents all event list
|
|
2318
|
+
* @returns {VegaCalendarFullDayEventView[]} the group event view list
|
|
2319
|
+
*/
|
|
2320
|
+
collectAllShouldOrderLongEvents(allEvents) {
|
|
2321
|
+
const allLongEventViews = {};
|
|
2322
|
+
allEvents.forEach((items, index) => {
|
|
2323
|
+
const longEvents = items.filter((item) => item && item.isGroupEvent());
|
|
2324
|
+
longEvents.forEach((groupEvent) => {
|
|
2325
|
+
if (!allLongEventViews[groupEvent.eventKey]) {
|
|
2326
|
+
allLongEventViews[groupEvent.eventKey] = {
|
|
2327
|
+
start: index,
|
|
2328
|
+
end: index,
|
|
2329
|
+
event: groupEvent,
|
|
2330
|
+
};
|
|
2331
|
+
}
|
|
2332
|
+
else {
|
|
2333
|
+
allLongEventViews[groupEvent.eventKey] = Object.assign(Object.assign({}, allLongEventViews[groupEvent.eventKey]), { end: index, start: index - allLongEventViews[groupEvent.eventKey].end !== 1
|
|
2334
|
+
? index
|
|
2335
|
+
: allLongEventViews[groupEvent.eventKey].start });
|
|
2336
|
+
}
|
|
2337
|
+
});
|
|
2338
|
+
});
|
|
2339
|
+
const shouldSortLongEventViews = Object.values(allLongEventViews);
|
|
2340
|
+
return this.sortLongEventViews(shouldSortLongEventViews);
|
|
2341
|
+
}
|
|
2342
|
+
/**
|
|
2343
|
+
* This function sorts an array of VegaCalendarFullDayEventView objects based on their start and end times.
|
|
2344
|
+
*
|
|
2345
|
+
* @param {VegaCalendarFullDayEventView[]} eventViews - The `eventViews` parameter is an array of
|
|
2346
|
+
* `VegaCalendarFullDayEventView` objects that represent long events in a calendar. The function
|
|
2347
|
+
* `sortLongEventViews` takes this array as input and sorts it based on the start and end times of the events.
|
|
2348
|
+
* @returns {VegaCalendarFullDayEventView[]} The function `sortLongEventViews` is returning an array of `VegaCalendarFullDayEventView`
|
|
2349
|
+
* objects that have been sorted based on the comparison logic provided in the sorting function. The sorting is done based on the `start` and `end` properties of the objects in the array.
|
|
2350
|
+
*/
|
|
2351
|
+
sortLongEventViews(eventViews) {
|
|
2352
|
+
return eventViews.sort((itemA, itemB) => {
|
|
2353
|
+
const { startDate: startA, endDate: endA } = itemA.event;
|
|
2354
|
+
const { startDate: startB, endDate: endB } = itemB.event;
|
|
2355
|
+
startA.setHours(0, 0, 0);
|
|
2356
|
+
startB.setHours(0, 0, 0);
|
|
2357
|
+
endA.setHours(23, 59, 59);
|
|
2358
|
+
endB.setHours(23, 59, 59);
|
|
2359
|
+
const num = endB.valueOf() - startB.valueOf() - (endA.valueOf() - startA.valueOf());
|
|
2360
|
+
if (startA.valueOf() !== startB.valueOf()) {
|
|
2361
|
+
return startA.valueOf() - startB.valueOf();
|
|
2362
|
+
}
|
|
2363
|
+
else {
|
|
2364
|
+
return num;
|
|
2365
|
+
}
|
|
2366
|
+
});
|
|
2367
|
+
}
|
|
2368
|
+
}
|
|
2369
|
+
|
|
2370
|
+
var __decorate$6 = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {
|
|
2371
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
2372
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
2373
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
2374
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
2375
|
+
};
|
|
2376
|
+
/** This code snippet defines a TypeScript class `VegaCalendarFullDayEventLayoutRenderer` that extends `VegaSlimmer`. Here's a breakdown of what the class and its methods are doing: */
|
|
2377
|
+
class VegaCalendarFullDayEventLayoutRenderer extends globalSlimmerRegistry.VegaSlimmer {
|
|
2378
|
+
constructor() {
|
|
2379
|
+
super(...arguments);
|
|
2380
|
+
this.longEventLayoutGenerator = new VegaCalendarFullDayEventLayoutGenerator();
|
|
2381
|
+
this.calendarEventSorter = new VegaCalendarEventSorter();
|
|
2382
|
+
}
|
|
2383
|
+
/**
|
|
2384
|
+
* The function `sortLongEvents` sorts calendar events based on a fixed layout generated by `longEventLayoutGenerator`.
|
|
2385
|
+
*
|
|
2386
|
+
* @param {CalendarEvent[][]} calendarEvents - calendar current row all events
|
|
2387
|
+
* @returns {Nullable<CalendarEvent>[][]} the events after sorter
|
|
2388
|
+
*/
|
|
2389
|
+
sortLongEvents(calendarEvents) {
|
|
2390
|
+
this.fullDayEventLayout = this.longEventLayoutGenerator.generate(calendarEvents);
|
|
2391
|
+
return calendarEvents.map((items, index) => {
|
|
2392
|
+
return this.calendarEventSorter.sort(items, index, this.fullDayEventLayout);
|
|
2393
|
+
});
|
|
2394
|
+
}
|
|
2395
|
+
/**
|
|
2396
|
+
* render the month view or week view long events
|
|
2397
|
+
*
|
|
2398
|
+
* @param {Nullable<CalendarEvent>[]} calendarEvents current events
|
|
2399
|
+
* @param {currentViewIndex} currentViewIndex the current index of the row
|
|
2400
|
+
* @returns {HTMLElement[]} event elements
|
|
2401
|
+
*/
|
|
2402
|
+
render(calendarEvents, currentViewIndex) {
|
|
2403
|
+
return calendarEvents.map((item, index$1) => {
|
|
2404
|
+
if (item) {
|
|
2405
|
+
return (index.h("div", { key: item.eventKey, class: this.viewMode === 'month' ? 'month-event-block' : 'day-event-block', style: this.getEventStyle(item, currentViewIndex, index$1, this.viewMode === 'month'
|
|
2406
|
+
? VegaCalendarFullDayEventLayoutRenderer.monthViewEventOffsetTop
|
|
2407
|
+
: 0) }, this.eventItemRenderer.render(item, {
|
|
2408
|
+
'month-event': this.viewMode === 'month',
|
|
2409
|
+
'day-event': this.viewMode !== 'month',
|
|
2410
|
+
})));
|
|
2411
|
+
}
|
|
2412
|
+
});
|
|
2413
|
+
}
|
|
2414
|
+
/*
|
|
2415
|
+
* The below method is e2e-test covered in
|
|
2416
|
+
* @see{module:vega-calendar-render-full-day-event-correct}
|
|
2417
|
+
*/
|
|
2418
|
+
/* istanbul ignore next */
|
|
2419
|
+
/**
|
|
2420
|
+
* Get the current event layout style from the params
|
|
2421
|
+
*
|
|
2422
|
+
* @param {CalendarEvent} calendarEvent current event item
|
|
2423
|
+
* @param {number} currentViewIndex the current date index of the row
|
|
2424
|
+
* @param {number} itemIndex the current event index of the event array
|
|
2425
|
+
* @param {number} offsetTop the default offset top for the event
|
|
2426
|
+
* @returns {VegaCalendarEventStyle} layout style object
|
|
2427
|
+
*/
|
|
2428
|
+
getEventStyle(calendarEvent, currentViewIndex, itemIndex, offsetTop) {
|
|
2429
|
+
const cellCount = this.calendarView.weekdays.length;
|
|
2430
|
+
const start = currentViewIndex;
|
|
2431
|
+
let end = currentViewIndex + 1;
|
|
2432
|
+
const top = itemIndex;
|
|
2433
|
+
let visible = true;
|
|
2434
|
+
const order = this.fullDayEventLayout.getEventRowsIndex(calendarEvent);
|
|
2435
|
+
if (order >= 0) {
|
|
2436
|
+
const startIndex = this.fullDayEventLayout.eventLayoutCells[order].getEventStartIndex(calendarEvent);
|
|
2437
|
+
const endIndex = this.fullDayEventLayout.eventLayoutCells[order].getEventEndIndex(calendarEvent);
|
|
2438
|
+
if (startIndex === currentViewIndex) {
|
|
2439
|
+
end = endIndex + 1;
|
|
2440
|
+
}
|
|
2441
|
+
else {
|
|
2442
|
+
visible = false;
|
|
2443
|
+
}
|
|
2444
|
+
}
|
|
2445
|
+
return {
|
|
2446
|
+
position: 'absolute',
|
|
2447
|
+
left: `${(100 / cellCount) * start}%`,
|
|
2448
|
+
top: `${top * VegaCalendarEventItemRenderer.backgroundColorModeEventHeight + offsetTop}px`,
|
|
2449
|
+
width: `${(100 / cellCount) * (end - start)}%`,
|
|
2450
|
+
opacity: visible ? '1' : '0',
|
|
2451
|
+
};
|
|
2452
|
+
}
|
|
2453
|
+
}
|
|
2454
|
+
VegaCalendarFullDayEventLayoutRenderer.monthViewEventOffsetTop = 26;
|
|
2455
|
+
__decorate$6([
|
|
2456
|
+
globalSlimmerRegistry.MapToComponentField()
|
|
2457
|
+
], VegaCalendarFullDayEventLayoutRenderer.prototype, "eventItemRenderer", void 0);
|
|
2458
|
+
__decorate$6([
|
|
2459
|
+
globalSlimmerRegistry.MapToComponentField()
|
|
2460
|
+
], VegaCalendarFullDayEventLayoutRenderer.prototype, "viewMode", void 0);
|
|
2461
|
+
__decorate$6([
|
|
2462
|
+
globalSlimmerRegistry.MapToComponentField()
|
|
2463
|
+
], VegaCalendarFullDayEventLayoutRenderer.prototype, "calendarView", void 0);
|
|
2464
|
+
|
|
2465
|
+
const vegaCalendarCss = ".border-divider-top{border:1px solid rgba(var(--v-border-divider-secondary, 199, 217, 229, 1));border-left-width:0px;border-right-width:0px;border-bottom-width:0px}.border-divider-left{border:1px solid rgba(var(--v-border-divider-secondary, 199, 217, 229, 1));border-top-width:0px;border-right-width:0px;border-bottom-width:0px}.border-divider-right{border:1px solid rgba(var(--v-border-divider-secondary, 199, 217, 229, 1));border-top-width:0px;border-left-width:0px;border-bottom-width:0px}.border-divider-bottom{border:1px solid rgba(var(--v-border-divider-secondary, 199, 217, 229, 1));border-top-width:0px;border-left-width:0px;border-right-width:0px}:host{display:flex;flex-direction:column;border-radius:12px;border:1px solid rgba(var(--v-border-divider, 171, 198, 216, 1));background-color:rgba(var(--v-bg-primary, 252, 252, 252, 1));overflow:hidden;width:100%;height:100%;box-sizing:border-box;max-height:1966px}.calendar-switch-panel{padding:24px;border-bottom-width:1px;border-top-width:0px;border-left-width:0px;border-right-width:0px;border-style:solid;border-color:rgba(var(--v-border-color-divider, 171, 198, 216, 1));flex-shrink:0;width:100%;box-sizing:border-box}.calendar-switch-panel .calendar-date-switch-container{display:flex;gap:8px;align-items:center;flex-direction:row}.calendar-switch-panel .calendar-view-switch-container{display:flex;gap:16px;align-items:center;flex-direction:row}.calendar-switch-panel .calendar-current-date{padding-left:8px}.calendar-view{width:100%;position:relative;flex-grow:1;overflow-y:auto;overflow-x:hidden}.calendar-view-month .calendar-view-month-container{width:100%;display:grid;min-height:100%;grid-template-rows:43px repeat(6, minmax(64px, 1fr))}.calendar-view-month .calendar-view-title{background-color:rgba(var(--v-bg-primary, 252, 252, 252, 1));top:0;left:0;z-index:62}.calendar-view-month .calendar-view-title div{padding-top:12px;padding-bottom:12px;color:rgba(var(--v-text-secondary, 107, 116, 125, 1));font-family:\"Inter\", sans-serif;font-size:14px;font-weight:700;line-height:18px;text-align:center}@media screen and (min-width: 768px) and (max-width: 1023px){.calendar-view-month .calendar-view-title div{font-family:\"Inter\", sans-serif;font-size:14px;font-weight:700;line-height:18px}}@media screen and (min-width: 1024px) and (max-width: 1439px){.calendar-view-month .calendar-view-title div{font-family:\"Inter\", sans-serif;font-size:14px;font-weight:700;line-height:18px}}@media screen and (min-width: 1440px) and (max-width: 9999px){.calendar-view-month .calendar-view-title div{font-family:\"Inter\", sans-serif;font-size:14px;font-weight:700;line-height:18px}}.calendar-view-month .calendar-view-row{position:relative;display:grid;grid-template-rows:1fr;grid-template-columns:repeat(7, minmax(64px, 1fr))}.calendar-view-month .calendar-view-row.calendar-view-title{position:sticky}.calendar-view-month .calendar-view-row:last-child{border-bottom-width:0px}.calendar-view-month .calendar-view-row .row-cell{overflow:hidden;display:flex;flex-direction:column;justify-content:space-between}.calendar-view-month .calendar-view-row .row-cell:last-child{border-right-width:0px}.calendar-view-month .calendar-view-row .row-cell .date{padding-top:4px;padding-bottom:4px;padding-right:12px;padding-left:8px}.calendar-view-month .calendar-view-row .row-cell .date>div{display:inline-block;color:rgba(var(--v-text-secondary, 107, 116, 125, 1));font-family:\"Inter\", sans-serif;font-size:14px;font-weight:400;line-height:18px}@media screen and (min-width: 768px) and (max-width: 1023px){.calendar-view-month .calendar-view-row .row-cell .date>div{font-family:\"Inter\", sans-serif;font-size:14px;font-weight:400;line-height:18px}}@media screen and (min-width: 1024px) and (max-width: 1439px){.calendar-view-month .calendar-view-row .row-cell .date>div{font-family:\"Inter\", sans-serif;font-size:14px;font-weight:400;line-height:18px}}@media screen and (min-width: 1440px) and (max-width: 9999px){.calendar-view-month .calendar-view-row .row-cell .date>div{font-family:\"Inter\", sans-serif;font-size:14px;font-weight:400;line-height:18px}}.calendar-view-month .calendar-view-row .row-cell .date .month-block{margin-right:2px}.calendar-view-month .calendar-view-row .row-cell .date .grid-col{text-align:center;border-top-left-radius:9999px;border-bottom-left-radius:9999px;border-top-right-radius:9999px;border-bottom-right-radius:9999px;cursor:pointer;width:18px;height:18px;line-height:18px}.calendar-view-month .calendar-view-row .row-cell .date .grid-col:hover{background-color:rgba(var(--v-bg-action-secondary-hover, 4, 112, 236, 0.1))}.calendar-view-month .calendar-view-row .row-cell .date .grid-col:active{background-color:rgba(var(--v-bg-action-secondary-active, 29, 65, 195, 0.1))}.calendar-view-month .calendar-view-row .row-cell .date .grid-col:focus-visible{outline:2px solid rgba(var(--v-border-color-action, 19, 98, 226, 1));outline-offset:2px}.calendar-view-month .calendar-view-row .row-cell.current-month-day .date>div{color:rgba(var(--v-text-primary, 32, 54, 69, 1))}.calendar-view-month .calendar-view-row .row-cell.disabled{background-color:rgba(var(--v-bg-secondary, 245, 247, 247, 1))}.calendar-view-month .calendar-view-row .row-cell.disabled .date>div{color:rgba(var(--v-text-disabled, 176, 180, 181, 1))}.calendar-view-month .calendar-view-row .row-cell.active .date .grid-col{background-color:rgba(var(--v-bg-action, 19, 98, 226, 1));border-top-left-radius:9999px;border-bottom-left-radius:9999px;color:rgba(var(--v-text-on-action, 252, 252, 252, 1))}.calendar-view-month .calendar-view-row .row-cell.active .date .grid-col:hover{background-color:rgba(var(--v-bg-action-hover, 4, 112, 236, 1))}.calendar-view-month .calendar-view-row .row-cell.active .date .grid-col:active{background-color:rgba(var(--v-bg-action-active, 29, 65, 195, 1))}.calendar-view-month .calendar-view-row .row-cell.active .date .grid-col:focus-visible{outline:2px solid rgba(var(--v-border-color-action, 19, 98, 226, 1));outline-offset:2px}.calendar-view-container{width:100%}.calendar-view-container .calendar-view-title-container{background-color:rgba(var(--v-bg-primary, 252, 252, 252, 1));position:sticky;top:0;left:0;z-index:62}.calendar-view-container .calendar-view-row{box-sizing:border-box;width:100%;display:flex;flex-direction:row}.calendar-view-container .calendar-view-row .time-line,.calendar-view-container .calendar-view-row .time-line-empty,.calendar-view-container .calendar-view-row .time-line-all{width:72px;text-align:right;padding-right:8px;box-sizing:border-box;font-family:\"Inter\", sans-serif;font-size:14px;font-weight:400;line-height:18px;color:rgba(var(--v-text-primary, 32, 54, 69, 1));flex-shrink:0}@media screen and (min-width: 768px) and (max-width: 1023px){.calendar-view-container .calendar-view-row .time-line,.calendar-view-container .calendar-view-row .time-line-empty,.calendar-view-container .calendar-view-row .time-line-all{font-family:\"Inter\", sans-serif;font-size:14px;font-weight:400;line-height:18px}}@media screen and (min-width: 1024px) and (max-width: 1439px){.calendar-view-container .calendar-view-row .time-line,.calendar-view-container .calendar-view-row .time-line-empty,.calendar-view-container .calendar-view-row .time-line-all{font-family:\"Inter\", sans-serif;font-size:14px;font-weight:400;line-height:18px}}@media screen and (min-width: 1440px) and (max-width: 9999px){.calendar-view-container .calendar-view-row .time-line,.calendar-view-container .calendar-view-row .time-line-empty,.calendar-view-container .calendar-view-row .time-line-all{font-family:\"Inter\", sans-serif;font-size:14px;font-weight:400;line-height:18px}}.calendar-view-container .calendar-view-title{width:100%}.calendar-view-container .calendar-view-title>div{padding:12px;padding-bottom:8px;color:rgba(var(--v-text-secondary, 107, 116, 125, 1));font-family:\"Inter\", sans-serif;font-size:14px;font-weight:700;line-height:18px;text-align:center;display:flex;flex-direction:column;gap:8px}@media screen and (min-width: 768px) and (max-width: 1023px){.calendar-view-container .calendar-view-title>div{font-family:\"Inter\", sans-serif;font-size:14px;font-weight:700;line-height:18px}}@media screen and (min-width: 1024px) and (max-width: 1439px){.calendar-view-container .calendar-view-title>div{font-family:\"Inter\", sans-serif;font-size:14px;font-weight:700;line-height:18px}}@media screen and (min-width: 1440px) and (max-width: 9999px){.calendar-view-container .calendar-view-title>div{font-family:\"Inter\", sans-serif;font-size:14px;font-weight:700;line-height:18px}}.calendar-view-container .calendar-view-title .week-day{cursor:pointer;color:rgba(var(--v-text-primary, 32, 54, 69, 1));font-family:\"Inter\", sans-serif;font-size:20px;font-weight:500;line-height:24px;letter-spacing:0px}@media screen and (min-width: 768px) and (max-width: 1023px){.calendar-view-container .calendar-view-title .week-day{font-family:\"Inter\", sans-serif;font-size:20px;font-weight:500;line-height:24px;letter-spacing:0px}}@media screen and (min-width: 1024px) and (max-width: 1439px){.calendar-view-container .calendar-view-title .week-day{font-family:\"Inter\", sans-serif;font-size:20px;font-weight:500;line-height:24px;letter-spacing:0px}}@media screen and (min-width: 1440px) and (max-width: 9999px){.calendar-view-container .calendar-view-title .week-day{font-family:\"Inter\", sans-serif;font-size:20px;font-weight:500;line-height:24px;letter-spacing:0px}}.calendar-view-container .calendar-view-title .active div{color:rgba(var(--v-text-link, 19, 98, 226, 1))}.calendar-view-container .calendar-view-event-all-container{align-items:center}.calendar-view-container .calendar-view-event-all{display:grid;grid-template-rows:1fr;flex-grow:1;min-height:18px}.calendar-view-container .calendar-view-day-container .time-line{display:grid;grid-template-rows:16px repeat(24, minmax(74px, 1fr))}.calendar-view-container .calendar-view-day-container .time-line .time-text{margin-top:-9px}.calendar-view-container .calendar-view-day-container .calendar-view-content{width:100%}.calendar-view-container .calendar-view-day-container .calendar-view-content .grid-col{display:grid;grid-template-rows:16px repeat(24, minmax(74px, 1fr));grid-template-columns:minmax(64px, 1fr)}.calendar-view-container .calendar-view-day-container .calendar-view-content .grid-col>.border-divider-top:first-child{border-top-width:0px}.calendar-view-container .calendar-view-content-container{width:100%;position:relative}.calendar-view-week .calendar-view-container{min-height:100%}.calendar-view-week .calendar-view-container .calendar-view-title{display:grid;grid-template-rows:1fr;grid-template-columns:repeat(7, minmax(64px, 1fr))}.calendar-view-week .calendar-view-container .calendar-view-event-all{grid-template-columns:repeat(7, minmax(64px, 1fr))}.calendar-view-week .calendar-view-container .calendar-view-day-container .calendar-view-content{display:grid;grid-template-columns:repeat(7, minmax(64px, 1fr))}.calendar-view-week .time-marker-container .time-marker{display:grid;grid-template-columns:repeat(7, minmax(64px, 1fr))}.calendar-view-week .day-event-container{display:grid;grid-template-columns:repeat(7, minmax(64px, 1fr))}.calendar-view-day .calendar-view-container{min-height:100%}.time-marker-container{position:absolute;min-width:100%;left:0;top:16px;height:calc(100% - 16px);pointer-events:none}.time-marker-container.hidden{display:none}.time-marker-container .time-marker{position:absolute;height:2px;display:grid;min-width:100%;left:0;top:0;z-index:61}.time-marker-container .time-marker div{width:100%;height:2px;background-color:rgba(var(--v-bg-status-error, 255, 110, 139, 1));opacity:0.3}.time-marker-container .time-marker div.active{opacity:1;position:relative}.time-marker-container .time-marker div.active::before{content:\"\";display:block;border-top-left-radius:9999px;border-bottom-left-radius:9999px;border-top-right-radius:9999px;border-bottom-right-radius:9999px;position:absolute;width:8px;height:8px;background-color:rgba(var(--v-bg-status-error, 255, 110, 139, 1));top:-3px;left:-4px}.day-event-container{position:absolute;min-width:100%;left:0;top:16px;height:calc(100% - 16px);pointer-events:none}.day-event-container .day-event-col{height:100%;overflow:hidden}.day-event-container vega-calendar-event{pointer-events:auto;height:100%}.calendar-view-month .month-event-row{position:absolute;width:100%;overflow:hidden;height:calc(100% - 26px);left:0;bottom:0}.calendar-view-month .events-container{width:100%;box-sizing:border-box;overflow:hidden;padding:2px;display:flex;flex-direction:column;gap:2px;justify-content:space-between}.calendar-view-month .events-container .event-list{display:flex;flex-direction:column;gap:2px}.calendar-view-month .events-container .event-list .month-event-block{box-sizing:border-box;padding-left:2px;padding-right:3px}.calendar-view-month .events-container .month-event-more .more-button{display:inline-block;height:16px;font-family:\"Inter\", sans-serif;font-size:12px;font-weight:700;line-height:16px;letter-spacing:0px;color:rgba(var(--v-text-link, 19, 98, 226, 1));cursor:pointer;border-radius:2px}@media screen and (min-width: 768px) and (max-width: 1023px){.calendar-view-month .events-container .month-event-more .more-button{font-family:\"Inter\", sans-serif;font-size:12px;font-weight:700;line-height:16px;letter-spacing:0px}}@media screen and (min-width: 1024px) and (max-width: 1439px){.calendar-view-month .events-container .month-event-more .more-button{font-family:\"Inter\", sans-serif;font-size:12px;font-weight:700;line-height:16px;letter-spacing:0px}}@media screen and (min-width: 1440px) and (max-width: 9999px){.calendar-view-month .events-container .month-event-more .more-button{font-family:\"Inter\", sans-serif;font-size:12px;font-weight:700;line-height:16px;letter-spacing:0px}}.calendar-view-month .events-container .month-event-more .more-button:focus-visible{outline:2px solid rgba(var(--v-border-color-action, 19, 98, 226, 1));outline-offset:0px}.calendar-view-container .calendar-view-event-all{position:relative}.calendar-view-container .calendar-view-event-all .placeholder-block{padding-top:2px;padding-bottom:2px;box-sizing:content-box}.calendar-view-container .calendar-view-event-all .placeholder-block span{display:none}.calendar-view-container .calendar-view-event-all .day-event-block{padding-top:2px;padding-right:2px;box-sizing:border-box;padding-left:3px}.calendar-view-container .day-event-col{position:relative}.calendar-view-container .day-event-col .time-event-block{box-sizing:border-box;padding-right:8px;padding-bottom:2px;padding-top:3px}.calendar-view-container .day-event-col .time-event-block vega-calendar-event.bg-shadow::part(event-container):not(:focus){outline:2px solid rgba(var(--v-bg-primary, 252, 252, 252, 1))}.calendar-view-container .day-event-col .time-event-block:focus-within{z-index:60 !important}";
|
|
2466
|
+
|
|
2467
|
+
var __decorate$5 = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {
|
|
2468
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
2469
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function")
|
|
2470
|
+
r = Reflect.decorate(decorators, target, key, desc);
|
|
2471
|
+
else
|
|
2472
|
+
for (var i = decorators.length - 1; i >= 0; i--)
|
|
2473
|
+
if (d = decorators[i])
|
|
2474
|
+
r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
2475
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
2476
|
+
};
|
|
2477
|
+
const VegaCalendar = class {
|
|
2478
|
+
constructor(hostRef) {
|
|
2479
|
+
index.registerInstance(this, hostRef);
|
|
2480
|
+
this.vegaChange = index.createEvent(this, "vegaChange", 7);
|
|
2481
|
+
this.change = index.createEvent(this, "change", 7);
|
|
2482
|
+
this.vegaEventClick = index.createEvent(this, "vegaEventClick", 7);
|
|
2483
|
+
this.eventClick = index.createEvent(this, "eventClick", 7);
|
|
2484
|
+
this.globalSlimmer = {};
|
|
2485
|
+
this.vegaComponentUsageRuntimeMetricsSlimmer = new componentUsageRuntimeMetrics.VegaComponentUsageRuntimeMetricsSlimmer();
|
|
2486
|
+
this.renderer = new VegaCalendarRenderer();
|
|
2487
|
+
this.switchPanelRenderer = new VegaCalendarSwitchPanelRenderer();
|
|
2488
|
+
this.viewRenderer = new VegaCalendarViewRenderer();
|
|
2489
|
+
this.monthViewRenderer = new VegaCalendarMonthViewRenderer();
|
|
2490
|
+
this.viewWithTimeRenderer = new VegaCalendarViewWithTimeRenderer();
|
|
2491
|
+
this.timeLineRenderer = new VegaCalendarTimeLineRenderer();
|
|
2492
|
+
this.monthEventRenderer = new VegaCalendarMonthEventRenderer();
|
|
2493
|
+
//The current period controller should be before the calendar view controller because the initial current period should be before the initial calendar view
|
|
2494
|
+
this.currentPeriodController = new VegaCalendarCurrentPeriodController();
|
|
2495
|
+
this.calendarViewController = new VegaCalendarViewController();
|
|
2496
|
+
this.dayViewFullDayEventRenderer = new VegaCalendarFullDayEventRenderer();
|
|
2497
|
+
this.dayViewTimedEventRenderer = new VegaCalendarTimedEventRenderer();
|
|
2498
|
+
this.eventItemRenderer = new VegaCalendarEventItemRenderer();
|
|
2499
|
+
this.dayViewEventLayoutRenderer = new VegaCalendarDayViewEventLayoutRenderer();
|
|
2500
|
+
this.fullDayEventLayoutRenderer = new VegaCalendarFullDayEventLayoutRenderer();
|
|
2501
|
+
this.calendarEventController = new VegaCalendarEventController();
|
|
2502
|
+
this.eventResponsiveController = new VegaCalendarEventResponsiveController();
|
|
2503
|
+
this.changeEventEmitter = eventEmitSlimmer.createEventEmitSlimmer(VegaCalendar, vegaEventId.VegaChange);
|
|
2504
|
+
this.eventClickEmitter = eventEmitSlimmer.createEventEmitSlimmer(VegaCalendar, vegaEventId.VegaEventClick);
|
|
2505
|
+
this.changeEventPrevent = new childNodesEventPreventSlimmer.ChildNodesEventPreventSlimmer([vegaEventId.VegaChange], () => this.switchPanelRenderer.getSwitchPanelRef());
|
|
2506
|
+
this.timeFormatNotifySlimmer = subStateObserverSlimmer.createSubStateNotifySlimmer(VegaCalendar, 'timeFormat', 'watchTimeFormat');
|
|
2507
|
+
this.calendarEvents = [];
|
|
2508
|
+
/**
|
|
2509
|
+
* Specifies the current view mode of the calendar.
|
|
2510
|
+
*/
|
|
2511
|
+
/* eslint-disable @stencil/strict-mutable */
|
|
2512
|
+
this.viewMode = 'month';
|
|
2513
|
+
/**
|
|
2514
|
+
* Specifies the time format of the calendar.
|
|
2515
|
+
*/
|
|
2516
|
+
this.timeFormat = '24-hour';
|
|
2517
|
+
}
|
|
2518
|
+
/**
|
|
2519
|
+
* watch the state calendar current period change
|
|
2520
|
+
*/
|
|
2521
|
+
watchCurrentPeriodChange() {
|
|
2522
|
+
}
|
|
2523
|
+
/**
|
|
2524
|
+
* Watch the view mode change
|
|
2525
|
+
*
|
|
2526
|
+
* @param {VegaCalendarViewModeType} newValue the new value of view mode
|
|
2527
|
+
*/
|
|
2528
|
+
watchViewModeChange(newValue) {
|
|
2529
|
+
}
|
|
2530
|
+
/**
|
|
2531
|
+
* Watch the calendar events change
|
|
2532
|
+
*
|
|
2533
|
+
* @param {VegaCalendarRawEvent[]} newValue
|
|
2534
|
+
*/
|
|
2535
|
+
watchEventsChange(newValue) {
|
|
2536
|
+
}
|
|
2537
|
+
/**
|
|
2538
|
+
* Watches changes in the calendar's time format.
|
|
2539
|
+
*
|
|
2540
|
+
* @param {TimeFormat} newValue
|
|
2541
|
+
*/
|
|
2542
|
+
watchTimeFormat(newValue) {
|
|
2543
|
+
}
|
|
2544
|
+
render() {
|
|
2545
|
+
return component.sanitizeVegaComponent(index.h(index.Host, null, this.renderer.render()), this.host);
|
|
2546
|
+
}
|
|
2547
|
+
get host() { return index.getElement(this); }
|
|
2548
|
+
static get watchers() { return {
|
|
2549
|
+
"currentPeriod": ["watchCurrentPeriodChange"],
|
|
2550
|
+
"viewMode": ["watchViewModeChange"],
|
|
2551
|
+
"events": ["watchEventsChange"],
|
|
2552
|
+
"timeFormat": ["watchTimeFormat"]
|
|
2553
|
+
}; }
|
|
2554
|
+
};
|
|
2555
|
+
__decorate$5([
|
|
2556
|
+
componentUsageRuntimeMetrics.InjectVegaGlobalSlimmer()
|
|
2557
|
+
], VegaCalendar.prototype, "globalSlimmer", void 0);
|
|
2558
|
+
__decorate$5([
|
|
2559
|
+
globalSlimmerRegistry.InjectVegaSlimmer()
|
|
2560
|
+
], VegaCalendar.prototype, "vegaComponentUsageRuntimeMetricsSlimmer", void 0);
|
|
2561
|
+
__decorate$5([
|
|
2562
|
+
globalSlimmerRegistry.InjectVegaSlimmer()
|
|
2563
|
+
], VegaCalendar.prototype, "renderer", void 0);
|
|
2564
|
+
__decorate$5([
|
|
2565
|
+
globalSlimmerRegistry.InjectVegaSlimmer()
|
|
2566
|
+
], VegaCalendar.prototype, "switchPanelRenderer", void 0);
|
|
2567
|
+
__decorate$5([
|
|
2568
|
+
globalSlimmerRegistry.InjectVegaSlimmer()
|
|
2569
|
+
], VegaCalendar.prototype, "viewRenderer", void 0);
|
|
2570
|
+
__decorate$5([
|
|
2571
|
+
globalSlimmerRegistry.InjectVegaSlimmer()
|
|
2572
|
+
], VegaCalendar.prototype, "monthViewRenderer", void 0);
|
|
2573
|
+
__decorate$5([
|
|
2574
|
+
globalSlimmerRegistry.InjectVegaSlimmer()
|
|
2575
|
+
], VegaCalendar.prototype, "viewWithTimeRenderer", void 0);
|
|
2576
|
+
__decorate$5([
|
|
2577
|
+
globalSlimmerRegistry.InjectVegaSlimmer()
|
|
2578
|
+
], VegaCalendar.prototype, "timeLineRenderer", void 0);
|
|
2579
|
+
__decorate$5([
|
|
2580
|
+
globalSlimmerRegistry.InjectVegaSlimmer()
|
|
2581
|
+
], VegaCalendar.prototype, "monthEventRenderer", void 0);
|
|
2582
|
+
__decorate$5([
|
|
2583
|
+
globalSlimmerRegistry.InjectVegaSlimmer()
|
|
2584
|
+
], VegaCalendar.prototype, "currentPeriodController", void 0);
|
|
2585
|
+
__decorate$5([
|
|
2586
|
+
globalSlimmerRegistry.InjectVegaSlimmer()
|
|
2587
|
+
], VegaCalendar.prototype, "calendarViewController", void 0);
|
|
2588
|
+
__decorate$5([
|
|
2589
|
+
globalSlimmerRegistry.InjectVegaSlimmer()
|
|
2590
|
+
], VegaCalendar.prototype, "dayViewFullDayEventRenderer", void 0);
|
|
2591
|
+
__decorate$5([
|
|
2592
|
+
globalSlimmerRegistry.InjectVegaSlimmer()
|
|
2593
|
+
], VegaCalendar.prototype, "dayViewTimedEventRenderer", void 0);
|
|
2594
|
+
__decorate$5([
|
|
2595
|
+
globalSlimmerRegistry.InjectVegaSlimmer()
|
|
2596
|
+
], VegaCalendar.prototype, "eventItemRenderer", void 0);
|
|
2597
|
+
__decorate$5([
|
|
2598
|
+
globalSlimmerRegistry.InjectVegaSlimmer()
|
|
2599
|
+
], VegaCalendar.prototype, "dayViewEventLayoutRenderer", void 0);
|
|
2600
|
+
__decorate$5([
|
|
2601
|
+
globalSlimmerRegistry.InjectVegaSlimmer()
|
|
2602
|
+
], VegaCalendar.prototype, "fullDayEventLayoutRenderer", void 0);
|
|
2603
|
+
__decorate$5([
|
|
2604
|
+
globalSlimmerRegistry.InjectVegaSlimmer()
|
|
2605
|
+
], VegaCalendar.prototype, "calendarEventController", void 0);
|
|
2606
|
+
__decorate$5([
|
|
2607
|
+
globalSlimmerRegistry.InjectVegaSlimmer()
|
|
2608
|
+
], VegaCalendar.prototype, "eventResponsiveController", void 0);
|
|
2609
|
+
__decorate$5([
|
|
2610
|
+
globalSlimmerRegistry.InjectVegaSlimmer()
|
|
2611
|
+
], VegaCalendar.prototype, "changeEventEmitter", void 0);
|
|
2612
|
+
__decorate$5([
|
|
2613
|
+
globalSlimmerRegistry.InjectVegaSlimmer()
|
|
2614
|
+
], VegaCalendar.prototype, "eventClickEmitter", void 0);
|
|
2615
|
+
__decorate$5([
|
|
2616
|
+
globalSlimmerRegistry.InjectVegaSlimmer()
|
|
2617
|
+
], VegaCalendar.prototype, "changeEventPrevent", void 0);
|
|
2618
|
+
__decorate$5([
|
|
2619
|
+
globalSlimmerRegistry.InjectVegaSlimmer()
|
|
2620
|
+
], VegaCalendar.prototype, "timeFormatNotifySlimmer", void 0);
|
|
2621
|
+
VegaCalendar.style = vegaCalendarCss;
|
|
2622
|
+
|
|
2623
|
+
const clockThree = {
|
|
2624
|
+
icon: `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Pro 6.3.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2023 Fonticons, Inc. --><path fill="currentColor" d="M464 256A208 208 0 1 1 48 256a208 208 0 1 1 416 0zM0 256a256 256 0 1 0 512 0A256 256 0 1 0 0 256zM232 120V256c0 13.3 10.7 24 24 24H360c13.3 0 24-10.7 24-24s-10.7-24-24-24H280V120c0-13.3-10.7-24-24-24s-24 10.7-24 24z"/></svg>`,
|
|
2625
|
+
};
|
|
2626
|
+
|
|
2627
|
+
var __decorate$4 = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {
|
|
2628
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
2629
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
2630
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
2631
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
2632
|
+
};
|
|
2633
|
+
/** The `VegaCalendarEventRenderer` class is a TypeScript React component used for rendering calendar events with different display modes and custom styling. */
|
|
2634
|
+
class VegaCalendarEventRenderer extends globalSlimmerRegistry.VegaSlimmer {
|
|
2635
|
+
/*
|
|
2636
|
+
* The below method is e2e-test covered in
|
|
2637
|
+
* @see{module:vega-calendar-event-title-max-height-e2e}
|
|
2638
|
+
*/
|
|
2639
|
+
/* istanbul ignore next */
|
|
2640
|
+
/**
|
|
2641
|
+
* This function returns the event title container as a nullable HTMLDivElement.
|
|
2642
|
+
*
|
|
2643
|
+
* @returns {Nullable<HTMLDivElement>} The method `getEventTitleContainer` is returning a nullable HTMLDivElement.
|
|
2644
|
+
*/
|
|
2645
|
+
getEventTitleContainerRef() {
|
|
2646
|
+
return this.eventTitleContainerRef;
|
|
2647
|
+
}
|
|
2648
|
+
/**
|
|
2649
|
+
* The function conditionally renders either a group event or a normal event based on a boolean flag.
|
|
2650
|
+
*
|
|
2651
|
+
* @returns {HTMLElement} the event element
|
|
2652
|
+
*/
|
|
2653
|
+
render() {
|
|
2654
|
+
return (index.h(index.Fragment, null,
|
|
2655
|
+
this.injectBackgroundColorStyle(),
|
|
2656
|
+
this.calendarEvent.isAllDayEvent || this.calendarEvent.isGroupEvent()
|
|
2657
|
+
? this.renderBackgroundModeEvent()
|
|
2658
|
+
: this.renderNormalEvent()));
|
|
2659
|
+
}
|
|
2660
|
+
/**
|
|
2661
|
+
* render background mode event element
|
|
2662
|
+
*
|
|
2663
|
+
* @returns {HTMLDivElement} div element
|
|
2664
|
+
*/
|
|
2665
|
+
renderBackgroundModeEvent() {
|
|
2666
|
+
const disabled = this.calendarEvent.disabled;
|
|
2667
|
+
return (index.h("div", { role: "button", tabIndex: 0, class: {
|
|
2668
|
+
'background-color-mode': true,
|
|
2669
|
+
'event-bg-color': !disabled,
|
|
2670
|
+
'bg-disabled': disabled,
|
|
2671
|
+
} }, this.calendarEvent.title));
|
|
2672
|
+
}
|
|
2673
|
+
/**
|
|
2674
|
+
* render event element
|
|
2675
|
+
*
|
|
2676
|
+
* @returns {HTMLAnchorElement} event element
|
|
2677
|
+
*/
|
|
2678
|
+
renderNormalEvent() {
|
|
2679
|
+
const { variant = 'primary', disabled, startTime, endTime, title, } = this.calendarEvent;
|
|
2680
|
+
const isMonthEvent = !this.host.classList.contains('day-event');
|
|
2681
|
+
const classMap = {
|
|
2682
|
+
'event-container': true,
|
|
2683
|
+
'disabled': disabled,
|
|
2684
|
+
[variant]: true,
|
|
2685
|
+
};
|
|
2686
|
+
if (isMonthEvent) {
|
|
2687
|
+
return (index.h("div", { role: "button", tabIndex: 0, class: classMap },
|
|
2688
|
+
this.renderEventStatus(),
|
|
2689
|
+
index.h("div", { class: "event-title" }, `${this.formatDisplayTime(startTime)} ${title}`)));
|
|
2690
|
+
}
|
|
2691
|
+
else {
|
|
2692
|
+
const eventDuration = this.calendarEvent.getEventDuration();
|
|
2693
|
+
return (index.h("div", { part: "event-container", class: Object.assign(Object.assign({}, classMap), { 'vertical': eventDuration > 30, 'duration-half-an-hour': eventDuration === 30, 'event-bg-color': !disabled, 'bg-disabled': disabled }), role: "button", tabIndex: 0 },
|
|
2694
|
+
this.renderEventStatus(),
|
|
2695
|
+
index.h("div", { class: "cover-block" }),
|
|
2696
|
+
index.h("div", { class: "event-content" },
|
|
2697
|
+
index.h("div", { class: {
|
|
2698
|
+
'event-title': true,
|
|
2699
|
+
'title-word-wrap': eventDuration > 30,
|
|
2700
|
+
}, ref: (node) => (this.eventTitleContainerRef = node) }, title),
|
|
2701
|
+
index.h("div", { class: "event-time" },
|
|
2702
|
+
index.h("vega-icon", { size: "size-12", icon: internalIconManager.VegaInternalIconManager.getIconKey('clock-three') }),
|
|
2703
|
+
index.h("span", null, `${this.formatDisplayTime(startTime)} - ${this.formatDisplayTime(endTime)}`)))));
|
|
2704
|
+
}
|
|
2705
|
+
}
|
|
2706
|
+
/**
|
|
2707
|
+
* render event status element, a color badge or a color bar element
|
|
2708
|
+
*
|
|
2709
|
+
* @returns {HTMLDivElement} div element
|
|
2710
|
+
*/
|
|
2711
|
+
renderEventStatus() {
|
|
2712
|
+
const disabled = this.calendarEvent.disabled;
|
|
2713
|
+
return (index.h("div", { class: {
|
|
2714
|
+
'event-status': true,
|
|
2715
|
+
'event-bg-color': !disabled,
|
|
2716
|
+
'bg-disabled': disabled,
|
|
2717
|
+
} },
|
|
2718
|
+
index.h("span", { class: {
|
|
2719
|
+
stripe: this.calendarEvent.variant === 'secondary',
|
|
2720
|
+
} })));
|
|
2721
|
+
}
|
|
2722
|
+
/**
|
|
2723
|
+
* render the custom color style tag element
|
|
2724
|
+
*
|
|
2725
|
+
* @returns {HTMLStyleElement} style element
|
|
2726
|
+
*/
|
|
2727
|
+
injectBackgroundColorStyle() {
|
|
2728
|
+
return index.h("style", null, this.colorController.getBackgroundColorStyle());
|
|
2729
|
+
}
|
|
2730
|
+
/**
|
|
2731
|
+
* Takes a time string as input and formats it to ensure it always has two digits for hours and minutes.
|
|
2732
|
+
*
|
|
2733
|
+
* @param {string} timeString the event time string
|
|
2734
|
+
* @returns {string} time string after format
|
|
2735
|
+
*/
|
|
2736
|
+
formatDisplayTime(timeString) {
|
|
2737
|
+
const [hour, minutes] = timeString.split(':');
|
|
2738
|
+
if (this.timeFormat === '24-hour') {
|
|
2739
|
+
return `${hour.padStart(2, '0')}:${minutes.padStart(2, '0')}`;
|
|
2740
|
+
}
|
|
2741
|
+
else {
|
|
2742
|
+
const hourNum = Number(hour);
|
|
2743
|
+
const amPm = hourNum >= 12 ? 'pm' : 'am';
|
|
2744
|
+
const minutesResult = minutes.padStart(2, '0');
|
|
2745
|
+
if (hourNum > 12) {
|
|
2746
|
+
return `${hourNum - 12}:${minutesResult} pm`;
|
|
2747
|
+
}
|
|
2748
|
+
else if (hourNum === 0) {
|
|
2749
|
+
return `12:${minutesResult} am`;
|
|
2750
|
+
}
|
|
2751
|
+
else {
|
|
2752
|
+
return `${hourNum}:${minutesResult} ${amPm}`;
|
|
2753
|
+
}
|
|
2754
|
+
}
|
|
2755
|
+
}
|
|
2756
|
+
}
|
|
2757
|
+
(() => {
|
|
2758
|
+
internalIconManager.VegaInternalIconManager.register({
|
|
2759
|
+
'clock-three': clockThree,
|
|
2760
|
+
});
|
|
2761
|
+
})();
|
|
2762
|
+
__decorate$4([
|
|
2763
|
+
globalSlimmerRegistry.MapToComponentField()
|
|
2764
|
+
], VegaCalendarEventRenderer.prototype, "host", void 0);
|
|
2765
|
+
__decorate$4([
|
|
2766
|
+
globalSlimmerRegistry.MapToComponentField()
|
|
2767
|
+
], VegaCalendarEventRenderer.prototype, "timeFormat", void 0);
|
|
2768
|
+
__decorate$4([
|
|
2769
|
+
globalSlimmerRegistry.MapToComponentField()
|
|
2770
|
+
], VegaCalendarEventRenderer.prototype, "calendarEvent", void 0);
|
|
2771
|
+
__decorate$4([
|
|
2772
|
+
globalSlimmerRegistry.MapToComponentField()
|
|
2773
|
+
], VegaCalendarEventRenderer.prototype, "colorController", void 0);
|
|
2774
|
+
|
|
2775
|
+
var __decorate$3 = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {
|
|
2776
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
2777
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
2778
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
2779
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
2780
|
+
};
|
|
2781
|
+
/** The `VegaCalendarEventBgColorController` class in TypeScript provides methods to handle background color for calendar events based on a color map and custom color variables. */
|
|
2782
|
+
class VegaCalendarEventBgColorController extends globalSlimmerRegistry.VegaSlimmer {
|
|
2783
|
+
/**
|
|
2784
|
+
* Get the background color css string from the background token or background color string
|
|
2785
|
+
*
|
|
2786
|
+
* @returns {string} css string
|
|
2787
|
+
*/
|
|
2788
|
+
getBackgroundColorStyle() {
|
|
2789
|
+
const color = this.calendarEvent.color || 'bg-accent6-primary';
|
|
2790
|
+
if (typeGuard.isBackgroundColorTokenType(color)) {
|
|
2791
|
+
return `.event-bg-color{${stateBackgroundColorFormatter.stateBackgroundColorFormatter.formatToken(color)}}`;
|
|
2792
|
+
}
|
|
2793
|
+
else {
|
|
2794
|
+
return `.event-bg-color{background-color:${color}}`;
|
|
2795
|
+
}
|
|
2796
|
+
}
|
|
2797
|
+
}
|
|
2798
|
+
__decorate$3([
|
|
2799
|
+
globalSlimmerRegistry.MapToComponentField()
|
|
2800
|
+
], VegaCalendarEventBgColorController.prototype, "calendarEvent", void 0);
|
|
2801
|
+
|
|
2802
|
+
var __decorate$2 = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {
|
|
2803
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
2804
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
2805
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
2806
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
2807
|
+
};
|
|
2808
|
+
/** The `VegaCalendarEventSubStateController` class in TypeScript initializes a calendar with specified subStates. */
|
|
2809
|
+
class VegaCalendarEventSubStateController extends subStateObserverSlimmer.SubStateObserverSlimmer {
|
|
2810
|
+
/**
|
|
2811
|
+
* The constructor function initializes a calendar with specified subStates in TypeScript.
|
|
2812
|
+
*/
|
|
2813
|
+
constructor() {
|
|
2814
|
+
super({
|
|
2815
|
+
parent: 'vega-calendar',
|
|
2816
|
+
subStates: [
|
|
2817
|
+
{
|
|
2818
|
+
subStateName: 'timeFormat',
|
|
2819
|
+
parentStateName: 'timeFormat',
|
|
2820
|
+
},
|
|
2821
|
+
],
|
|
2822
|
+
});
|
|
2823
|
+
}
|
|
2824
|
+
}
|
|
2825
|
+
__decorate$2([
|
|
2826
|
+
globalSlimmerRegistry.MapToComponentField({ writable: true })
|
|
2827
|
+
], VegaCalendarEventSubStateController.prototype, "timeFormat", void 0);
|
|
2828
|
+
|
|
2829
|
+
var __decorate$1 = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {
|
|
2830
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
2831
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
2832
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
2833
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
2834
|
+
};
|
|
2835
|
+
/**
|
|
2836
|
+
* The `VegaCalendarTitleMaxHeightController` class in TypeScript sets the maximum height for
|
|
2837
|
+
* a vertical title element based on its line height and current height.
|
|
2838
|
+
*/
|
|
2839
|
+
class VegaCalendarTitleMaxHeightController extends globalSlimmerRegistry.VegaSlimmer {
|
|
2840
|
+
/*
|
|
2841
|
+
* The below method is e2e-test covered in
|
|
2842
|
+
* @see{module:vega-calendar-event-title-max-height-e2e}
|
|
2843
|
+
*/
|
|
2844
|
+
/* istanbul ignore next */
|
|
2845
|
+
/**
|
|
2846
|
+
* The function sets the maximum height of a vertical title element based on its line height and
|
|
2847
|
+
* current height.
|
|
2848
|
+
*/
|
|
2849
|
+
setVerticalTitleMaxHeight() {
|
|
2850
|
+
const title = this.renderer.getEventTitleContainerRef();
|
|
2851
|
+
if (title && title.classList.contains('title-word-wrap')) {
|
|
2852
|
+
const styles = window.getComputedStyle(title);
|
|
2853
|
+
const height = pixel.parsePixelStringToNumber(styles.height);
|
|
2854
|
+
const lineHeight = pixel.parsePixelStringToNumber(styles.lineHeight);
|
|
2855
|
+
// We need to ensure that at least one line is displayed
|
|
2856
|
+
const maxLines = Math.max(Math.floor(height / lineHeight), 1);
|
|
2857
|
+
title.style.maxHeight = `${maxLines * lineHeight}px`;
|
|
2858
|
+
}
|
|
2859
|
+
}
|
|
2860
|
+
}
|
|
2861
|
+
__decorate$1([
|
|
2862
|
+
globalSlimmerRegistry.MapToComponentField()
|
|
2863
|
+
], VegaCalendarTitleMaxHeightController.prototype, "renderer", void 0);
|
|
2864
|
+
|
|
2865
|
+
const vegaCalendarEventCss = ".bg-disabled{background-color:rgba(var(--v-bg-disabled, 176, 180, 181, 1))}:host{display:block;box-sizing:border-box;width:100%}:host .background-color-mode{border-radius:2px;padding-left:8px;padding-right:8px;color:rgba(var(--v-text-black, 32, 54, 69, 1));font-family:\"Inter\", sans-serif;font-size:12px;font-weight:700;line-height:16px;letter-spacing:0px;cursor:pointer;overflow:hidden;white-space:nowrap}@media screen and (min-width: 768px) and (max-width: 1023px){:host .background-color-mode{font-family:\"Inter\", sans-serif;font-size:12px;font-weight:700;line-height:16px;letter-spacing:0px}}@media screen and (min-width: 1024px) and (max-width: 1439px){:host .background-color-mode{font-family:\"Inter\", sans-serif;font-size:12px;font-weight:700;line-height:16px;letter-spacing:0px}}@media screen and (min-width: 1440px) and (max-width: 9999px){:host .background-color-mode{font-family:\"Inter\", sans-serif;font-size:12px;font-weight:700;line-height:16px;letter-spacing:0px}}:host .event-container{display:block;width:100%;border-radius:4px;cursor:pointer;box-sizing:border-box;overflow:hidden}:host(.month-event) .event-container{padding-left:2px;padding-right:2px;display:flex;flex-direction:row;gap:4px;align-items:center;min-height:16px}:host(.month-event) .event-container .event-status{width:8px;height:8px;box-sizing:border-box;border-top-left-radius:9999px;border-bottom-left-radius:9999px;border-top-right-radius:9999px;border-bottom-right-radius:9999px;margin-left:2px;flex-shrink:0}:host(.month-event) .event-container .event-status span{display:none;width:100%;height:100%;border-top-left-radius:9999px;border-bottom-left-radius:9999px;border-top-right-radius:9999px;border-bottom-right-radius:9999px}:host(.month-event) .event-container .event-title{font-family:\"Inter\", sans-serif;font-size:12px;font-weight:400;line-height:16px;color:rgba(var(--v-text-primary, 32, 54, 69, 1));flex-grow:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}@media screen and (min-width: 768px) and (max-width: 1023px){:host(.month-event) .event-container .event-title{font-family:\"Inter\", sans-serif;font-size:12px;font-weight:400;line-height:16px}}@media screen and (min-width: 1024px) and (max-width: 1439px){:host(.month-event) .event-container .event-title{font-family:\"Inter\", sans-serif;font-size:12px;font-weight:400;line-height:16px}}@media screen and (min-width: 1440px) and (max-width: 9999px){:host(.month-event) .event-container .event-title{font-family:\"Inter\", sans-serif;font-size:12px;font-weight:400;line-height:16px}}:host(.month-event) .event-container.secondary .event-status span{display:block;background-size:4px 4px;opacity:0.8}:host(.month-event) .event-container.tertiary .event-status{padding:1px}:host(.month-event) .event-container.tertiary .event-status span{display:block;background-color:rgba(var(--v-bg-primary, 252, 252, 252, 1))}:host(.month-event) .event-container.disabled .event-status{background-color:rgba(var(--v-bg-disabled, 176, 180, 181, 1))}:host(.month-event) .event-container:hover{background-color:rgba(var(--v-bg-action-secondary-hover, 4, 112, 236, 0.1))}:host(.month-event) .event-container:active{background-color:rgba(var(--v-bg-action-secondary-active, 29, 65, 195, 0.1))}:host(.month-event) .event-container:focus{outline:2px solid rgba(var(--v-border-color-action, 19, 98, 226, 1));outline-offset:0px}:host(.day-event) .event-container{padding-left:8px;padding-right:8px;position:relative}:host(.day-event) .event-container .event-status{position:absolute;width:4px;height:100%;left:0;top:0;z-index:1}:host(.day-event) .event-container .event-status span{display:none}:host(.day-event) .event-container .cover-block{position:absolute;height:100%;width:100%;background-color:rgba(var(--v-bg-primary, 252, 252, 252, 1));border-radius:4px;left:0;top:0;opacity:0.7}:host(.day-event) .event-container .event-content,:host(.day-event) .event-container .event-time{display:flex;flex-direction:row;align-items:center}:host(.day-event) .event-container .event-content{gap:8px;position:relative;height:100%;box-sizing:border-box}:host(.day-event) .event-container .event-time{gap:4px;color:rgba(var(--v-text-primary, 32, 54, 69, 1));font-family:\"Inter\", sans-serif;font-size:12px;font-weight:400;line-height:16px}@media screen and (min-width: 768px) and (max-width: 1023px){:host(.day-event) .event-container .event-time{font-family:\"Inter\", sans-serif;font-size:12px;font-weight:400;line-height:16px}}@media screen and (min-width: 1024px) and (max-width: 1439px){:host(.day-event) .event-container .event-time{font-family:\"Inter\", sans-serif;font-size:12px;font-weight:400;line-height:16px}}@media screen and (min-width: 1440px) and (max-width: 9999px){:host(.day-event) .event-container .event-time{font-family:\"Inter\", sans-serif;font-size:12px;font-weight:400;line-height:16px}}:host(.day-event) .event-container .event-time vega-icon{flex-shrink:0}:host(.day-event) .event-container .event-time span{white-space:nowrap}:host(.day-event) .event-container .event-title{color:rgba(var(--v-text-primary, 32, 54, 69, 1));font-family:\"Inter\", sans-serif;font-size:12px;font-weight:700;line-height:16px;letter-spacing:0px}@media screen and (min-width: 768px) and (max-width: 1023px){:host(.day-event) .event-container .event-title{font-family:\"Inter\", sans-serif;font-size:12px;font-weight:700;line-height:16px;letter-spacing:0px}}@media screen and (min-width: 1024px) and (max-width: 1439px){:host(.day-event) .event-container .event-title{font-family:\"Inter\", sans-serif;font-size:12px;font-weight:700;line-height:16px;letter-spacing:0px}}@media screen and (min-width: 1440px) and (max-width: 9999px){:host(.day-event) .event-container .event-title{font-family:\"Inter\", sans-serif;font-size:12px;font-weight:700;line-height:16px;letter-spacing:0px}}:host(.day-event) .event-container .event-title.title-word-wrap{overflow:hidden}:host(.day-event) .event-container .event-title:not(.title-word-wrap){white-space:nowrap}:host(.day-event) .event-container.duration-half-an-hour{padding-top:8px;padding-bottom:8px}:host(.day-event) .event-container.vertical{height:100%}:host(.day-event) .event-container.vertical .event-content{flex-direction:column;align-items:flex-start;gap:4px;padding-top:8px;padding-bottom:8px}:host(.day-event) .event-container.secondary .event-status span,:host(.day-event) .event-container.tertiary .event-status span{display:block;position:absolute;border-top-left-radius:4px;border-bottom-left-radius:4px}:host(.day-event) .event-container.secondary .cover-block,:host(.day-event) .event-container.tertiary .cover-block{width:calc(100% - 2px);height:calc(100% - 2px);top:1px;left:1px}:host(.day-event) .event-container.secondary .event-status span{width:100%;height:100%;top:0px;left:0px;background-size:4px 4px;opacity:0.8}:host(.day-event) .event-container.secondary .cover-block{opacity:0.9}:host(.day-event) .event-container.tertiary .event-status span{background-color:rgba(var(--v-bg-primary, 252, 252, 252, 1));width:2px;height:calc(100% - 2px);top:1px;left:1px}:host(.day-event) .event-container.tertiary .cover-block{opacity:1}:host(.day-event) .event-container.disabled{background-color:rgba(var(--v-bg-disabled, 176, 180, 181, 1))}:host(.day-event) .event-container.disabled .event-status{background-color:rgba(var(--v-bg-disabled, 176, 180, 181, 1))}:host(.day-event) .event-container:focus{outline:2px solid rgba(var(--v-border-color-action, 19, 98, 226, 1));outline-offset:0px}:host(.month-event.calendar-event-large-size) .background-color-mode{border-radius:4px;padding-top:4px;padding-bottom:4px}:host(.month-event.calendar-event-large-size) .event-container{padding-top:4px;padding-bottom:4px}.stripe{background-image:linear-gradient(-45deg, transparent 25%, rgba(var(--v-bg-primary, 252, 252, 252, 1)) 25% 50%, transparent 50% 75%, rgba(var(--v-bg-primary, 252, 252, 252, 1)) 75% 100%)}";
|
|
2866
|
+
|
|
2867
|
+
var __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {
|
|
2868
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
2869
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function")
|
|
2870
|
+
r = Reflect.decorate(decorators, target, key, desc);
|
|
2871
|
+
else
|
|
2872
|
+
for (var i = decorators.length - 1; i >= 0; i--)
|
|
2873
|
+
if (d = decorators[i])
|
|
2874
|
+
r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
2875
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
2876
|
+
};
|
|
2877
|
+
const VegaCalendarEvent = class {
|
|
2878
|
+
constructor(hostRef) {
|
|
2879
|
+
index.registerInstance(this, hostRef);
|
|
2880
|
+
this.globalSlimmer = {};
|
|
2881
|
+
this.pageResizeObserverSlimmer = new pageResizeObserverSlimmer.PageResizeObserverSlimmer({
|
|
2882
|
+
target: () => this.host,
|
|
2883
|
+
callback:
|
|
2884
|
+
/**
|
|
2885
|
+
* The below method is e2e-test covered in
|
|
2886
|
+
* @see{module:vega-calendar-event-title-max-height-e2e}
|
|
2887
|
+
*/
|
|
2888
|
+
/* istanbul ignore next */
|
|
2889
|
+
() => this.titleMaxHeightController.setVerticalTitleMaxHeight(),
|
|
2890
|
+
});
|
|
2891
|
+
this.vegaComponentUsageRuntimeMetricsSlimmer = new componentUsageRuntimeMetrics.VegaComponentUsageRuntimeMetricsSlimmer();
|
|
2892
|
+
this.renderer = new VegaCalendarEventRenderer();
|
|
2893
|
+
this.colorController = new VegaCalendarEventBgColorController();
|
|
2894
|
+
this.subStateController = new VegaCalendarEventSubStateController();
|
|
2895
|
+
this.titleMaxHeightController = new VegaCalendarTitleMaxHeightController();
|
|
2896
|
+
this.timeFormat = '24-hour';
|
|
2897
|
+
}
|
|
2898
|
+
render() {
|
|
2899
|
+
return component.sanitizeVegaComponent(index.h(index.Host, null, this.calendarEvent ? this.renderer.render() : null), this.host);
|
|
2900
|
+
}
|
|
2901
|
+
get host() { return index.getElement(this); }
|
|
2902
|
+
};
|
|
2903
|
+
__decorate([
|
|
2904
|
+
componentUsageRuntimeMetrics.InjectVegaGlobalSlimmer()
|
|
2905
|
+
], VegaCalendarEvent.prototype, "globalSlimmer", void 0);
|
|
2906
|
+
__decorate([
|
|
2907
|
+
globalSlimmerRegistry.InjectVegaSlimmer()
|
|
2908
|
+
], VegaCalendarEvent.prototype, "pageResizeObserverSlimmer", void 0);
|
|
2909
|
+
__decorate([
|
|
2910
|
+
globalSlimmerRegistry.InjectVegaSlimmer()
|
|
2911
|
+
], VegaCalendarEvent.prototype, "vegaComponentUsageRuntimeMetricsSlimmer", void 0);
|
|
2912
|
+
__decorate([
|
|
2913
|
+
globalSlimmerRegistry.InjectVegaSlimmer()
|
|
2914
|
+
], VegaCalendarEvent.prototype, "renderer", void 0);
|
|
2915
|
+
__decorate([
|
|
2916
|
+
globalSlimmerRegistry.InjectVegaSlimmer()
|
|
2917
|
+
], VegaCalendarEvent.prototype, "colorController", void 0);
|
|
2918
|
+
__decorate([
|
|
2919
|
+
globalSlimmerRegistry.InjectVegaSlimmer()
|
|
2920
|
+
], VegaCalendarEvent.prototype, "subStateController", void 0);
|
|
2921
|
+
__decorate([
|
|
2922
|
+
globalSlimmerRegistry.InjectVegaSlimmer()
|
|
2923
|
+
], VegaCalendarEvent.prototype, "titleMaxHeightController", void 0);
|
|
2924
|
+
VegaCalendarEvent.style = vegaCalendarEventCss;
|
|
2925
|
+
|
|
2926
|
+
exports.vega_calendar = VegaCalendar;
|
|
2927
|
+
exports.vega_calendar_event = VegaCalendarEvent;
|