@redvars/peacock 3.6.2 → 3.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (200) hide show
  1. package/dist/ButtonConstants-D06bY4uy.js +114 -0
  2. package/dist/ButtonConstants-D06bY4uy.js.map +1 -0
  3. package/dist/{BaseHyperlinkMixin-BNuwbiEf.js → NativeHyperlinkMixin-DrYXyfMQ.js} +8 -10
  4. package/dist/NativeHyperlinkMixin-DrYXyfMQ.js.map +1 -0
  5. package/dist/assets/components.css +1 -1
  6. package/dist/assets/components.css.map +1 -1
  7. package/dist/assets/styles.css +1 -1
  8. package/dist/assets/styles.css.map +1 -1
  9. package/dist/button-colors-Dwnez1tR.js +586 -0
  10. package/dist/button-colors-Dwnez1tR.js.map +1 -0
  11. package/dist/button-group.js +8 -8
  12. package/dist/button-group.js.map +1 -1
  13. package/dist/button.js +236 -133
  14. package/dist/button.js.map +1 -1
  15. package/dist/calendar-column-view.js +0 -1
  16. package/dist/calendar-column-view.js.map +1 -1
  17. package/dist/calendar-month-view.js +0 -1
  18. package/dist/calendar-month-view.js.map +1 -1
  19. package/dist/canvas.js +126 -107
  20. package/dist/canvas.js.map +1 -1
  21. package/dist/card-content.js +0 -1
  22. package/dist/card-content.js.map +1 -1
  23. package/dist/card.js +96 -90
  24. package/dist/card.js.map +1 -1
  25. package/dist/cb-compound-expression.js +4 -1
  26. package/dist/cb-compound-expression.js.map +1 -1
  27. package/dist/cb-divider.js +0 -1
  28. package/dist/cb-divider.js.map +1 -1
  29. package/dist/cb-expression.js +0 -2
  30. package/dist/cb-expression.js.map +1 -1
  31. package/dist/cb-predicate.js +0 -1
  32. package/dist/cb-predicate.js.map +1 -1
  33. package/dist/code-highlighter.js +23 -6
  34. package/dist/code-highlighter.js.map +1 -1
  35. package/dist/custom-elements-jsdocs.json +5079 -17882
  36. package/dist/custom-elements.json +19272 -19314
  37. package/dist/fab.js +181 -117
  38. package/dist/fab.js.map +1 -1
  39. package/dist/flow-designer.js +4 -4
  40. package/dist/icon-button-DJ0kZXYr.js +318 -0
  41. package/dist/icon-button-DJ0kZXYr.js.map +1 -0
  42. package/dist/index.js +7 -7
  43. package/dist/{navigation-rail-CD7IrqbN.js → navigation-rail-CM_svs5_.js} +1311 -730
  44. package/dist/navigation-rail-CM_svs5_.js.map +1 -0
  45. package/dist/observe-slot-change-D8Xg-kSS.js +60 -0
  46. package/dist/observe-slot-change-D8Xg-kSS.js.map +1 -0
  47. package/dist/peacock-loader.js +10 -7
  48. package/dist/peacock-loader.js.map +1 -1
  49. package/dist/popover-content.js +0 -1
  50. package/dist/popover-content.js.map +1 -1
  51. package/dist/search.js +15 -15
  52. package/dist/search.js.map +1 -1
  53. package/dist/src/__controllers/attachable-controller.d.ts +109 -0
  54. package/dist/src/__mixins/{BaseButtonMixin.d.ts → NativeButtonMixin.d.ts} +3 -3
  55. package/dist/src/__mixins/{BaseHyperlinkMixin.d.ts → NativeHyperlinkMixin.d.ts} +3 -4
  56. package/dist/src/__utils/is-link.d.ts +1 -0
  57. package/dist/src/__utils/observe-slot-change.d.ts +1 -1
  58. package/dist/src/accordion/accordion-item.d.ts +0 -1
  59. package/dist/src/breadcrumb/breadcrumb-item/breadcrumb-item.d.ts +0 -1
  60. package/dist/src/button/ButtonConstants.d.ts +1 -0
  61. package/dist/src/button/GroupButtonInterface.d.ts +4 -0
  62. package/dist/src/button/button/button.d.ts +32 -7
  63. package/dist/src/button/button-group/button-group.d.ts +2 -1
  64. package/dist/src/button/icon-button/icon-button.d.ts +26 -5
  65. package/dist/src/button/index.d.ts +1 -1
  66. package/dist/src/calendar/calendar-column-view.d.ts +0 -1
  67. package/dist/src/calendar/calendar-month-view.d.ts +0 -1
  68. package/dist/src/canvas/canvas.d.ts +3 -3
  69. package/dist/src/card/card-content.d.ts +0 -1
  70. package/dist/src/card/card.d.ts +9 -6
  71. package/dist/src/chip/chip/chip.d.ts +22 -3
  72. package/dist/src/condition-builder/cb-compound-expression.d.ts +0 -1
  73. package/dist/src/condition-builder/cb-divider.d.ts +0 -1
  74. package/dist/src/condition-builder/cb-expression.d.ts +0 -1
  75. package/dist/src/condition-builder/cb-predicate.d.ts +0 -1
  76. package/dist/src/fab/fab.d.ts +20 -6
  77. package/dist/src/field/field.d.ts +1 -0
  78. package/dist/src/focus-ring/focus-ring.d.ts +26 -20
  79. package/dist/src/image/image.d.ts +2 -2
  80. package/dist/src/index.d.ts +1 -0
  81. package/dist/src/input/input.d.ts +1 -3
  82. package/dist/src/item/index.d.ts +1 -0
  83. package/dist/src/item/item.d.ts +49 -0
  84. package/dist/src/link/link.d.ts +1 -1
  85. package/dist/src/list/list-item.d.ts +1 -2
  86. package/dist/src/menu/menu-item/menu-item.d.ts +9 -11
  87. package/dist/src/menu/sub-menu/sub-menu.d.ts +1 -1
  88. package/dist/src/navigation-rail/navigation-rail-item.d.ts +0 -2
  89. package/dist/src/navigation-rail/navigation-rail.d.ts +2 -6
  90. package/dist/src/popover/popover-content.d.ts +0 -1
  91. package/dist/src/ripple/ripple.d.ts +9 -1
  92. package/dist/src/search/search.d.ts +2 -6
  93. package/dist/src/segmented-button/segmented-button.d.ts +0 -1
  94. package/dist/src/select/option.d.ts +0 -1
  95. package/dist/src/sidebar-menu/sidebar-menu-item.d.ts +0 -1
  96. package/dist/src/sidebar-menu/sidebar-sub-menu.d.ts +0 -1
  97. package/dist/src/tabs/tab-panel.d.ts +0 -1
  98. package/dist/src/tabs/tab.d.ts +4 -6
  99. package/dist/test/item.test.d.ts +1 -0
  100. package/dist/tsconfig.tsbuildinfo +1 -1
  101. package/package.json +4 -2
  102. package/readme.md +2 -2
  103. package/scss/components.scss +0 -1
  104. package/scss/mixin.scss +33 -13
  105. package/scss/styles.scss +1 -3
  106. package/src/__controllers/attachable-controller.ts +198 -0
  107. package/src/__mixins/NativeButtonMixin.ts +87 -0
  108. package/src/__mixins/{BaseHyperlinkMixin.ts → NativeHyperlinkMixin.ts} +15 -15
  109. package/src/__utils/is-link.ts +3 -0
  110. package/src/__utils/observe-slot-change.ts +46 -14
  111. package/src/accordion/accordion-item.scss +1 -1
  112. package/src/accordion/accordion-item.ts +0 -1
  113. package/src/breadcrumb/breadcrumb-item/breadcrumb-item.ts +0 -1
  114. package/src/button/ButtonConstants.ts +1 -0
  115. package/src/button/GroupButtonInterface.ts +4 -0
  116. package/src/button/button/button-colors.scss +2 -2
  117. package/src/button/button/button-layers.scss +124 -0
  118. package/src/button/button/button-sizes.scss +31 -53
  119. package/src/button/button/button.scss +139 -262
  120. package/src/button/button/button.ts +260 -106
  121. package/src/button/button/only-button.scss +13 -0
  122. package/src/button/button-group/button-group.ts +59 -17
  123. package/src/button/icon-button/icon-button-sizes.scss +12 -27
  124. package/src/button/icon-button/icon-button.ts +191 -83
  125. package/src/button/index.ts +1 -1
  126. package/src/calendar/calendar-column-view.ts +0 -1
  127. package/src/calendar/calendar-month-view.ts +0 -1
  128. package/src/canvas/canvas.scss +18 -6
  129. package/src/canvas/canvas.ts +125 -103
  130. package/src/card/card-content.ts +2 -3
  131. package/src/card/card.scss +87 -95
  132. package/src/card/card.ts +62 -60
  133. package/src/chip/chip/chip.scss +66 -71
  134. package/src/chip/chip/chip.ts +155 -56
  135. package/src/code-highlighter/code-highlighter.scss +1 -1
  136. package/src/code-highlighter/code-highlighter.ts +20 -5
  137. package/src/condition-builder/cb-compound-expression.scss +4 -0
  138. package/src/condition-builder/cb-compound-expression.ts +0 -1
  139. package/src/condition-builder/cb-divider.ts +0 -1
  140. package/src/condition-builder/cb-expression.scss +0 -1
  141. package/src/condition-builder/cb-expression.ts +0 -1
  142. package/src/condition-builder/cb-predicate.ts +0 -1
  143. package/src/elevation/elevation.scss +5 -1
  144. package/src/empty-state/empty-state.scss +1 -0
  145. package/src/fab/fab-colors.scss +2 -2
  146. package/src/fab/fab-sizes.scss +24 -34
  147. package/src/fab/fab.scss +77 -71
  148. package/src/fab/fab.ts +141 -65
  149. package/src/field/field.ts +6 -0
  150. package/src/focus-ring/focus-ring.ts +81 -72
  151. package/src/image/image.scss +21 -16
  152. package/src/image/image.ts +13 -14
  153. package/src/index.ts +1 -0
  154. package/src/input/input.ts +16 -25
  155. package/src/item/index.ts +1 -0
  156. package/src/item/item.scss +195 -0
  157. package/src/item/item.ts +362 -0
  158. package/src/link/link.scss +1 -10
  159. package/src/link/link.ts +4 -2
  160. package/src/list/list-item.ts +8 -8
  161. package/src/menu/menu/menu.ts +5 -9
  162. package/src/menu/menu-item/menu-item.scss +30 -108
  163. package/src/menu/menu-item/menu-item.ts +102 -133
  164. package/src/menu/sub-menu/sub-menu.ts +6 -3
  165. package/src/navigation-rail/navigation-rail-item.scss +5 -0
  166. package/src/navigation-rail/navigation-rail-item.ts +10 -15
  167. package/src/navigation-rail/navigation-rail.ts +2 -6
  168. package/src/peacock-loader.ts +5 -1
  169. package/src/popover/popover-content.ts +0 -1
  170. package/src/ripple/ripple.ts +52 -20
  171. package/src/search/search.scss +3 -0
  172. package/src/search/search.ts +11 -16
  173. package/src/segmented-button/segmented-button.ts +0 -1
  174. package/src/select/option.ts +1 -2
  175. package/src/select/select.scss +1 -10
  176. package/src/select/select.ts +2 -0
  177. package/src/sidebar-menu/sidebar-menu-item.ts +0 -1
  178. package/src/sidebar-menu/sidebar-sub-menu.ts +0 -1
  179. package/src/skeleton/skeleton.scss +5 -1
  180. package/src/tabs/tab-panel.ts +0 -1
  181. package/src/tabs/tab.ts +60 -70
  182. package/src/text/text.css-component.scss +3 -21
  183. package/src/tooltip/tooltip.scss +5 -8
  184. package/src/tooltip/tooltip.ts +1 -2
  185. package/dist/BaseButton-BNFAYn-S.js +0 -219
  186. package/dist/BaseButton-BNFAYn-S.js.map +0 -1
  187. package/dist/BaseHyperlinkMixin-BNuwbiEf.js.map +0 -1
  188. package/dist/button-colors-AvGh22Zn.js +0 -561
  189. package/dist/button-colors-AvGh22Zn.js.map +0 -1
  190. package/dist/icon-button-ohxHhy4t.js +0 -247
  191. package/dist/icon-button-ohxHhy4t.js.map +0 -1
  192. package/dist/navigation-rail-CD7IrqbN.js.map +0 -1
  193. package/dist/observe-slot-change-BGJfgg2E.js +0 -31
  194. package/dist/observe-slot-change-BGJfgg2E.js.map +0 -1
  195. package/dist/src/button/BaseButton.d.ts +0 -28
  196. package/dist/src/focus-ring/FocusAttachableController.d.ts +0 -8
  197. package/src/__mixins/BaseButtonMixin.ts +0 -83
  198. package/src/button/BaseButton.ts +0 -113
  199. package/src/focus-ring/FocusAttachableController.ts +0 -28
  200. package/src/popover/tooltip.css-component.scss +0 -19
@@ -1 +1 @@
1
- {"version":3,"file":"calendar-column-view.js","sources":["../../src/calendar/calendar-column-view.ts"],"sourcesContent":["import { LitElement, html, nothing } from 'lit';\nimport { property, state } from 'lit/decorators.js';\nimport {\n addDays,\n addHours,\n differenceInDays,\n startOfDay,\n endOfDay,\n calculateDateRange,\n formatDate,\n getTimePercent,\n LONG_EVENT_PADDING,\n} from './utils.js';\nimport { BaseEvent } from './base-event.js';\nimport { CalendarEvent } from './calendar-event.js';\nimport { EventManager } from './event-manager.js';\nimport type { ColumnEvent } from './event-manager.js';\nimport IndividualComponent from '@/IndividualComponent.js';\nimport styles from './calendar-column-view.scss';\n\n/**\n * @label Calendar Column View\n * @tag wc-calendar-column-view\n * @rawTag calendar-column-view\n * @parentRawTag calendar\n * @summary Internal column view component for the calendar (day/week views).\n */\n@IndividualComponent\nexport class CalendarColumnView extends LitElement {\n static styles = [styles];\n\n @property({ type: Array })\n events: CalendarEvent[] = [];\n\n @property({ type: String })\n view: string = 'week';\n\n @property({ type: Number })\n days: number = 7;\n\n @property({ type: Boolean, attribute: 'event-clickable' })\n eventClickable: boolean = true;\n\n @property({ type: Object, attribute: false })\n currentTime: Date = new Date();\n\n @property({ type: Object, attribute: false })\n contextDate: Date = new Date();\n\n @state()\n private dateRange: any = {};\n\n @state()\n private singleDayEvents: Record<string, ColumnEvent[][]> = {};\n\n @state()\n private multiDayEvents: ColumnEvent[][] = [];\n\n override connectedCallback() {\n super.connectedCallback();\n this._processEvents();\n }\n\n override willUpdate(changedProperties: Map<string, unknown>) {\n if (\n changedProperties.has('events') ||\n changedProperties.has('contextDate') ||\n changedProperties.has('view') ||\n changedProperties.has('days')\n ) {\n this._processEvents();\n }\n }\n\n override firstUpdated() {\n const viewBody = this.renderRoot.querySelector('.view-body');\n if (viewBody) {\n const viewBodyHeight = viewBody.scrollHeight;\n viewBody.scrollTo({\n top:\n (getTimePercent(this.currentTime) / 100) * viewBodyHeight - 150,\n });\n }\n }\n\n private _processEvents() {\n this.dateRange = calculateDateRange(this.view, this.contextDate, this.days);\n this.singleDayEvents = {};\n\n this._forEachDayInRange(i => {\n const manager = new EventManager();\n manager.addEvents(\n this.events.filter(\n event =>\n event.isOverlapping(new BaseEvent(startOfDay(i), endOfDay(i))) &&\n event.length() < 86400000,\n ),\n );\n manager.process();\n this.singleDayEvents[this._getDateOnly(i)] = manager.columns;\n });\n\n const multiManager = new EventManager();\n multiManager.addEvents(\n this.events.filter(\n event =>\n event.isOverlapping(\n new BaseEvent(this.dateRange.startDate, this.dateRange.endDate),\n ) && event.length() >= 86400000,\n ),\n );\n multiManager.process();\n this.multiDayEvents = multiManager.columns;\n }\n\n private _forEachDayInRange(callback: (d: Date) => void) {\n for (\n let i = new Date(this.dateRange.startDate);\n differenceInDays(startOfDay(this.dateRange.endDate), i) >= 0;\n i = addDays(i, 1)\n ) {\n callback(i);\n }\n }\n\n private _getDateOnly(date: Date): string {\n return formatDate(date, 'dd-MM-yyyy');\n }\n\n private _getDatePercent(date: Date): number {\n const currentDay = differenceInDays(\n startOfDay(date),\n this.dateRange.startDate,\n );\n const percent = (currentDay / this.dateRange.totalDays) * 100;\n if (percent < 0) return 0;\n if (percent > 100) return 100;\n return percent;\n }\n\n private _getDayClass(date: Date): string {\n const diff = differenceInDays(startOfDay(date), startOfDay(this.currentTime));\n if (diff === 0) return 'column today';\n if (diff < 0) return 'column past';\n return 'column future';\n }\n\n private _populateColorVars(\n styles: Record<string, string>,\n color: string,\n ) {\n styles['--calendar-event-bg-color'] = `var(--color-${color}-container)`;\n styles['--calendar-event-bg-color--hover'] = `var(--color-inverse-${color})`;\n styles['--calendar-event-border-color'] = `var(--color-${color})`;\n styles['--calendar-event-text-color'] = `var(--color-on-${color}-container)`;\n styles['--calendar-event-text-color--hover'] = `var(--color-on-${color})`;\n }\n\n private _emitDateClick(date: Date) {\n this.dispatchEvent(\n new CustomEvent('column-view-date-click', {\n detail: { date },\n bubbles: true,\n composed: true,\n }),\n );\n }\n\n private _emitEventClick(event: any) {\n this.dispatchEvent(\n new CustomEvent('column-view-event-click', {\n detail: { event },\n bubbles: true,\n composed: true,\n }),\n );\n }\n\n private _renderHeader() {\n const columns: any[] = [];\n this._forEachDayInRange(i => {\n columns.push(html`\n <div class=${this._getDayClass(i)}>\n <div class=\"column-content\">\n <div\n class=\"date\"\n @click=${() => this._emitDateClick(i)}\n >\n ${formatDate(i, 'dd')}\n </div>\n <div class=\"day\">${formatDate(i, 'E')}</div>\n </div>\n </div>\n `);\n });\n return columns;\n }\n\n private _renderMultiDayBackground() {\n const columns: any[] = [];\n this._forEachDayInRange(i => {\n columns.push(html`<div class=${this._getDayClass(i)}></div>`);\n });\n return columns;\n }\n\n private _renderScale() {\n const rows: any[] = [];\n for (let i = 0; i < 48; i++) {\n const cls = i % 2 ? 'row hour' : 'row';\n const sd = startOfDay(new Date());\n rows.push(html`\n <div class=${cls}>\n ${i % 2 === 0 && i\n ? html`<div class=\"time\">${formatDate(addHours(sd, i / 2), 'hh a')}</div>`\n : nothing}\n </div>\n `);\n }\n return html`<div class=\"background\">${rows}</div>`;\n }\n\n private _renderBackgroundGrid() {\n const rows: any[] = [];\n for (let i = 0; i < 48; i++) {\n const cls = i % 2 ? 'row hour' : 'row';\n const columns: any[] = [];\n this._forEachDayInRange(d => {\n columns.push(html`<div class=${this._getDayClass(d)}></div>`);\n });\n rows.push(html`<div class=${cls}>${columns}</div>`);\n }\n return html`<div class=\"background\">${rows}</div>`;\n }\n\n private _renderEvents() {\n const columns: any[] = [];\n this._forEachDayInRange(i => {\n const cls = this._getDayClass(i);\n const eventDay = this.singleDayEvents[this._getDateOnly(i)];\n columns.push(html`\n <div class=${cls}>\n <div class=\"column-content\">\n ${eventDay\n ? eventDay.map((nodes, columnIndex) =>\n nodes.map(node => {\n const evtCls = this.eventClickable\n ? 'event clickable'\n : 'event';\n const evtStyles: Record<string, string> = {\n top: `${getTimePercent(node.start, startOfDay(i))}%`,\n height: `${getTimePercent(node.end, startOfDay(i)) - getTimePercent(node.start, startOfDay(i))}%`,\n left: `${(columnIndex / eventDay.length) * 100}%`,\n width: `calc(${((1 * node.width) / eventDay.length) * 100}% - 1px)`,\n };\n if (node.color) {\n this._populateColorVars(evtStyles, node.color);\n }\n return html`\n <div\n class=${evtCls}\n style=${this._styleMap(evtStyles)}\n @click=${() => {\n if (this.eventClickable) this._emitEventClick(node.data);\n }}\n >\n <div class=\"event-title\">\n ${node.title || '(no title)'}\n </div>\n </div>\n `;\n }),\n )\n : nothing}\n </div>\n </div>\n `);\n });\n return html`<div class=\"events-container\">${columns}</div>`;\n }\n\n private _renderMultiDayEvents() {\n if (!this.multiDayEvents || !this.multiDayEvents.length) return nothing;\n return html`\n <div class=\"row-content\">\n ${this.multiDayEvents.map(\n nodes => html`\n <div class=\"row\">\n ${nodes.map(node => {\n const evtCls = this.eventClickable\n ? 'event clickable'\n : 'event';\n const evtStyles: Record<string, string> = {\n left: `${this._getDatePercent(node.start) + LONG_EVENT_PADDING}%`,\n width: `${this._getDatePercent(addDays(node.end, 1)) - this._getDatePercent(node.start) - 2 * LONG_EVENT_PADDING}%`,\n };\n if (node.color) {\n this._populateColorVars(evtStyles, node.color);\n }\n return html`\n <div\n class=${evtCls}\n style=${this._styleMap(evtStyles)}\n @click=${() => {\n if (this.eventClickable) this._emitEventClick(node.data);\n }}\n >\n <div class=\"event-title\">\n ${node.title || '(no title)'}\n </div>\n </div>\n `;\n })}\n </div>\n `,\n )}\n <div class=\"row-spacer\"></div>\n </div>\n `;\n }\n\n private _renderCurrentTime() {\n if (\n this.currentTime.valueOf() < this.dateRange.startDate?.valueOf() - 1 ||\n this.currentTime.valueOf() > this.dateRange.endDate?.valueOf() + 1\n ) {\n return nothing;\n }\n return html`\n <div\n class=\"current-time-line\"\n style=\"top: calc(${getTimePercent(this.currentTime)}% - 1px)\"\n >\n <div class=\"time\">${formatDate(this.currentTime, 'hh:mm a')}</div>\n <div\n class=\"dash-line\"\n style=\"width: ${this._getDatePercent(this.currentTime)}%\"\n ></div>\n <div\n class=\"dot\"\n style=\"left: calc(${this._getDatePercent(this.currentTime)}% - 0.25rem)\"\n ></div>\n <div\n class=\"line\"\n style=\"left: ${this._getDatePercent(this.currentTime)}%; width: ${(1 / this.dateRange.totalDays) * 100}%\"\n ></div>\n </div>\n `;\n }\n\n private _styleMap(styles: Record<string, string>): string {\n return Object.entries(styles)\n .map(([k, v]) => `${k}:${v}`)\n .join(';');\n }\n\n render() {\n return html`\n <div class=\"calendar-column-view\">\n <div class=\"view-header\">\n <div class=\"scale\"></div>\n <div class=\"columns\">${this._renderHeader()}</div>\n <div class=\"scrollbar-placeholder\"></div>\n </div>\n <div class=\"multi-day-section-wrapper\">\n <div class=\"multi-day-section-scroll\">\n <div class=\"multi-day-section\">\n <div class=\"multi-day-background\">\n <div class=\"scale\"></div>\n <div class=\"columns\">\n ${this._renderMultiDayBackground()}\n </div>\n </div>\n <div class=\"multi-events\">\n ${this._renderMultiDayEvents()}\n </div>\n </div>\n </div>\n </div>\n <div class=\"view-body\">\n <div class=\"view-body-scroll\">\n <div class=\"scale\">${this._renderScale()}</div>\n <div class=\"drawing-area\">\n ${this._renderBackgroundGrid()} ${this._renderEvents()}\n </div>\n ${this._renderCurrentTime()}\n </div>\n </div>\n </div>\n `;\n }\n}\n"],"names":["LitElement","html","nothing","styles","property","state"],"mappings":"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"}
1
+ {"version":3,"file":"calendar-column-view.js","sources":["../../src/calendar/calendar-column-view.ts"],"sourcesContent":["import { LitElement, html, nothing } from 'lit';\nimport { property, state } from 'lit/decorators.js';\nimport {\n addDays,\n addHours,\n differenceInDays,\n startOfDay,\n endOfDay,\n calculateDateRange,\n formatDate,\n getTimePercent,\n LONG_EVENT_PADDING,\n} from './utils.js';\nimport { BaseEvent } from './base-event.js';\nimport { CalendarEvent } from './calendar-event.js';\nimport { EventManager } from './event-manager.js';\nimport type { ColumnEvent } from './event-manager.js';\nimport IndividualComponent from '@/IndividualComponent.js';\nimport styles from './calendar-column-view.scss';\n\n/**\n * @label Calendar Column View\n * @tag wc-calendar-column-view\n * @rawTag calendar-column-view\n * @summary Internal column view component for the calendar (day/week views).\n */\n@IndividualComponent\nexport class CalendarColumnView extends LitElement {\n static styles = [styles];\n\n @property({ type: Array })\n events: CalendarEvent[] = [];\n\n @property({ type: String })\n view: string = 'week';\n\n @property({ type: Number })\n days: number = 7;\n\n @property({ type: Boolean, attribute: 'event-clickable' })\n eventClickable: boolean = true;\n\n @property({ type: Object, attribute: false })\n currentTime: Date = new Date();\n\n @property({ type: Object, attribute: false })\n contextDate: Date = new Date();\n\n @state()\n private dateRange: any = {};\n\n @state()\n private singleDayEvents: Record<string, ColumnEvent[][]> = {};\n\n @state()\n private multiDayEvents: ColumnEvent[][] = [];\n\n override connectedCallback() {\n super.connectedCallback();\n this._processEvents();\n }\n\n override willUpdate(changedProperties: Map<string, unknown>) {\n if (\n changedProperties.has('events') ||\n changedProperties.has('contextDate') ||\n changedProperties.has('view') ||\n changedProperties.has('days')\n ) {\n this._processEvents();\n }\n }\n\n override firstUpdated() {\n const viewBody = this.renderRoot.querySelector('.view-body');\n if (viewBody) {\n const viewBodyHeight = viewBody.scrollHeight;\n viewBody.scrollTo({\n top:\n (getTimePercent(this.currentTime) / 100) * viewBodyHeight - 150,\n });\n }\n }\n\n private _processEvents() {\n this.dateRange = calculateDateRange(this.view, this.contextDate, this.days);\n this.singleDayEvents = {};\n\n this._forEachDayInRange(i => {\n const manager = new EventManager();\n manager.addEvents(\n this.events.filter(\n event =>\n event.isOverlapping(new BaseEvent(startOfDay(i), endOfDay(i))) &&\n event.length() < 86400000,\n ),\n );\n manager.process();\n this.singleDayEvents[this._getDateOnly(i)] = manager.columns;\n });\n\n const multiManager = new EventManager();\n multiManager.addEvents(\n this.events.filter(\n event =>\n event.isOverlapping(\n new BaseEvent(this.dateRange.startDate, this.dateRange.endDate),\n ) && event.length() >= 86400000,\n ),\n );\n multiManager.process();\n this.multiDayEvents = multiManager.columns;\n }\n\n private _forEachDayInRange(callback: (d: Date) => void) {\n for (\n let i = new Date(this.dateRange.startDate);\n differenceInDays(startOfDay(this.dateRange.endDate), i) >= 0;\n i = addDays(i, 1)\n ) {\n callback(i);\n }\n }\n\n private _getDateOnly(date: Date): string {\n return formatDate(date, 'dd-MM-yyyy');\n }\n\n private _getDatePercent(date: Date): number {\n const currentDay = differenceInDays(\n startOfDay(date),\n this.dateRange.startDate,\n );\n const percent = (currentDay / this.dateRange.totalDays) * 100;\n if (percent < 0) return 0;\n if (percent > 100) return 100;\n return percent;\n }\n\n private _getDayClass(date: Date): string {\n const diff = differenceInDays(startOfDay(date), startOfDay(this.currentTime));\n if (diff === 0) return 'column today';\n if (diff < 0) return 'column past';\n return 'column future';\n }\n\n private _populateColorVars(\n styles: Record<string, string>,\n color: string,\n ) {\n styles['--calendar-event-bg-color'] = `var(--color-${color}-container)`;\n styles['--calendar-event-bg-color--hover'] = `var(--color-inverse-${color})`;\n styles['--calendar-event-border-color'] = `var(--color-${color})`;\n styles['--calendar-event-text-color'] = `var(--color-on-${color}-container)`;\n styles['--calendar-event-text-color--hover'] = `var(--color-on-${color})`;\n }\n\n private _emitDateClick(date: Date) {\n this.dispatchEvent(\n new CustomEvent('column-view-date-click', {\n detail: { date },\n bubbles: true,\n composed: true,\n }),\n );\n }\n\n private _emitEventClick(event: any) {\n this.dispatchEvent(\n new CustomEvent('column-view-event-click', {\n detail: { event },\n bubbles: true,\n composed: true,\n }),\n );\n }\n\n private _renderHeader() {\n const columns: any[] = [];\n this._forEachDayInRange(i => {\n columns.push(html`\n <div class=${this._getDayClass(i)}>\n <div class=\"column-content\">\n <div\n class=\"date\"\n @click=${() => this._emitDateClick(i)}\n >\n ${formatDate(i, 'dd')}\n </div>\n <div class=\"day\">${formatDate(i, 'E')}</div>\n </div>\n </div>\n `);\n });\n return columns;\n }\n\n private _renderMultiDayBackground() {\n const columns: any[] = [];\n this._forEachDayInRange(i => {\n columns.push(html`<div class=${this._getDayClass(i)}></div>`);\n });\n return columns;\n }\n\n private _renderScale() {\n const rows: any[] = [];\n for (let i = 0; i < 48; i++) {\n const cls = i % 2 ? 'row hour' : 'row';\n const sd = startOfDay(new Date());\n rows.push(html`\n <div class=${cls}>\n ${i % 2 === 0 && i\n ? html`<div class=\"time\">${formatDate(addHours(sd, i / 2), 'hh a')}</div>`\n : nothing}\n </div>\n `);\n }\n return html`<div class=\"background\">${rows}</div>`;\n }\n\n private _renderBackgroundGrid() {\n const rows: any[] = [];\n for (let i = 0; i < 48; i++) {\n const cls = i % 2 ? 'row hour' : 'row';\n const columns: any[] = [];\n this._forEachDayInRange(d => {\n columns.push(html`<div class=${this._getDayClass(d)}></div>`);\n });\n rows.push(html`<div class=${cls}>${columns}</div>`);\n }\n return html`<div class=\"background\">${rows}</div>`;\n }\n\n private _renderEvents() {\n const columns: any[] = [];\n this._forEachDayInRange(i => {\n const cls = this._getDayClass(i);\n const eventDay = this.singleDayEvents[this._getDateOnly(i)];\n columns.push(html`\n <div class=${cls}>\n <div class=\"column-content\">\n ${eventDay\n ? eventDay.map((nodes, columnIndex) =>\n nodes.map(node => {\n const evtCls = this.eventClickable\n ? 'event clickable'\n : 'event';\n const evtStyles: Record<string, string> = {\n top: `${getTimePercent(node.start, startOfDay(i))}%`,\n height: `${getTimePercent(node.end, startOfDay(i)) - getTimePercent(node.start, startOfDay(i))}%`,\n left: `${(columnIndex / eventDay.length) * 100}%`,\n width: `calc(${((1 * node.width) / eventDay.length) * 100}% - 1px)`,\n };\n if (node.color) {\n this._populateColorVars(evtStyles, node.color);\n }\n return html`\n <div\n class=${evtCls}\n style=${this._styleMap(evtStyles)}\n @click=${() => {\n if (this.eventClickable) this._emitEventClick(node.data);\n }}\n >\n <div class=\"event-title\">\n ${node.title || '(no title)'}\n </div>\n </div>\n `;\n }),\n )\n : nothing}\n </div>\n </div>\n `);\n });\n return html`<div class=\"events-container\">${columns}</div>`;\n }\n\n private _renderMultiDayEvents() {\n if (!this.multiDayEvents || !this.multiDayEvents.length) return nothing;\n return html`\n <div class=\"row-content\">\n ${this.multiDayEvents.map(\n nodes => html`\n <div class=\"row\">\n ${nodes.map(node => {\n const evtCls = this.eventClickable\n ? 'event clickable'\n : 'event';\n const evtStyles: Record<string, string> = {\n left: `${this._getDatePercent(node.start) + LONG_EVENT_PADDING}%`,\n width: `${this._getDatePercent(addDays(node.end, 1)) - this._getDatePercent(node.start) - 2 * LONG_EVENT_PADDING}%`,\n };\n if (node.color) {\n this._populateColorVars(evtStyles, node.color);\n }\n return html`\n <div\n class=${evtCls}\n style=${this._styleMap(evtStyles)}\n @click=${() => {\n if (this.eventClickable) this._emitEventClick(node.data);\n }}\n >\n <div class=\"event-title\">\n ${node.title || '(no title)'}\n </div>\n </div>\n `;\n })}\n </div>\n `,\n )}\n <div class=\"row-spacer\"></div>\n </div>\n `;\n }\n\n private _renderCurrentTime() {\n if (\n this.currentTime.valueOf() < this.dateRange.startDate?.valueOf() - 1 ||\n this.currentTime.valueOf() > this.dateRange.endDate?.valueOf() + 1\n ) {\n return nothing;\n }\n return html`\n <div\n class=\"current-time-line\"\n style=\"top: calc(${getTimePercent(this.currentTime)}% - 1px)\"\n >\n <div class=\"time\">${formatDate(this.currentTime, 'hh:mm a')}</div>\n <div\n class=\"dash-line\"\n style=\"width: ${this._getDatePercent(this.currentTime)}%\"\n ></div>\n <div\n class=\"dot\"\n style=\"left: calc(${this._getDatePercent(this.currentTime)}% - 0.25rem)\"\n ></div>\n <div\n class=\"line\"\n style=\"left: ${this._getDatePercent(this.currentTime)}%; width: ${(1 / this.dateRange.totalDays) * 100}%\"\n ></div>\n </div>\n `;\n }\n\n private _styleMap(styles: Record<string, string>): string {\n return Object.entries(styles)\n .map(([k, v]) => `${k}:${v}`)\n .join(';');\n }\n\n render() {\n return html`\n <div class=\"calendar-column-view\">\n <div class=\"view-header\">\n <div class=\"scale\"></div>\n <div class=\"columns\">${this._renderHeader()}</div>\n <div class=\"scrollbar-placeholder\"></div>\n </div>\n <div class=\"multi-day-section-wrapper\">\n <div class=\"multi-day-section-scroll\">\n <div class=\"multi-day-section\">\n <div class=\"multi-day-background\">\n <div class=\"scale\"></div>\n <div class=\"columns\">\n ${this._renderMultiDayBackground()}\n </div>\n </div>\n <div class=\"multi-events\">\n ${this._renderMultiDayEvents()}\n </div>\n </div>\n </div>\n </div>\n <div class=\"view-body\">\n <div class=\"view-body-scroll\">\n <div class=\"scale\">${this._renderScale()}</div>\n <div class=\"drawing-area\">\n ${this._renderBackgroundGrid()} ${this._renderEvents()}\n </div>\n ${this._renderCurrentTime()}\n </div>\n </div>\n </div>\n `;\n }\n}\n"],"names":["LitElement","html","nothing","styles","property","state"],"mappings":"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"}
@@ -176,7 +176,6 @@ var css_248z = i`@charset "UTF-8";
176
176
  * @label Calendar Month View
177
177
  * @tag wc-calendar-month-view
178
178
  * @rawTag calendar-month-view
179
- * @parentRawTag calendar
180
179
  * @summary Internal month view component for the calendar.
181
180
  */
182
181
  let CalendarMonthView = class CalendarMonthView extends i$1 {
@@ -1 +1 @@
1
- {"version":3,"file":"calendar-month-view.js","sources":["../../src/calendar/calendar-month-view.ts"],"sourcesContent":["import { LitElement, html, nothing } from 'lit';\nimport { property, state } from 'lit/decorators.js';\nimport {\n addDays,\n differenceInDays,\n startOfDay,\n endOfDay,\n calculateMonthRange,\n formatDate,\n getTimePercent,\n LONG_EVENT_PADDING,\n} from './utils.js';\nimport { BaseEvent } from './base-event.js';\nimport { CalendarEvent } from './calendar-event.js';\nimport { MonthEventManager } from './event-manager.js';\nimport type { ColumnEvent } from './event-manager.js';\nimport IndividualComponent from '@/IndividualComponent.js';\nimport styles from './calendar-month-view.scss';\n\n/**\n * @label Calendar Month View\n * @tag wc-calendar-month-view\n * @rawTag calendar-month-view\n * @parentRawTag calendar\n * @summary Internal month view component for the calendar.\n */\n@IndividualComponent\nexport class CalendarMonthView extends LitElement {\n static styles = [styles];\n\n @property({ type: Array })\n events: CalendarEvent[] = [];\n\n @property({ type: Boolean, attribute: 'event-clickable' })\n eventClickable: boolean = true;\n\n @property({ type: Object, attribute: false })\n currentTime: Date = new Date();\n\n @property({ type: Object, attribute: false })\n contextDate: Date = new Date();\n\n @state()\n private dateRange: any = {};\n\n @state()\n private weekDayEvents: ColumnEvent[][][] = [];\n\n override connectedCallback() {\n super.connectedCallback();\n this._processEvents();\n }\n\n override willUpdate(changedProperties: Map<string, unknown>) {\n if (\n changedProperties.has('events') ||\n changedProperties.has('contextDate')\n ) {\n this._processEvents();\n }\n }\n\n override firstUpdated() {\n const viewBody = this.renderRoot.querySelector('.view-body');\n if (viewBody) {\n const viewBodyHeight = viewBody.scrollHeight;\n viewBody.scrollTo({\n top:\n (getTimePercent(this.currentTime) / 100) * viewBodyHeight - 150,\n });\n }\n }\n\n private _processEvents() {\n this.dateRange = calculateMonthRange(this.contextDate, 1);\n this.weekDayEvents = [];\n\n for (\n let i = new Date(this.dateRange.startDate), j = 0;\n j < 6;\n i = addDays(i, 7), j++\n ) {\n const manager = new MonthEventManager();\n manager.addEvents(\n this.events.filter(event =>\n event.isOverlapping(\n new BaseEvent(startOfDay(i), endOfDay(addDays(i, 6))),\n ),\n ),\n );\n manager.process();\n this.weekDayEvents.push(manager.columns);\n }\n }\n\n private _getDatePercent(date: Date, dateRangeStartDate: Date): number {\n const currentDay = differenceInDays(startOfDay(date), dateRangeStartDate);\n const percent = (currentDay / 7) * 100;\n if (percent < 0) return 0;\n if (percent > 100) return 100;\n return percent;\n }\n\n private _getDayClass(date: Date): string {\n const diff = differenceInDays(\n startOfDay(date),\n startOfDay(this.currentTime),\n );\n if (diff === 0) return 'column today';\n if (diff < 0) return 'column past';\n return 'column future';\n }\n\n private _populateColorVars(\n styles: Record<string, string>,\n color: string,\n ) {\n styles['--calendar-event-bg-color'] = `var(--color-${color}-container)`;\n styles['--calendar-event-bg-color--hover'] = `var(--color-inverse-${color})`;\n styles['--calendar-event-border-color'] = `var(--color-${color})`;\n styles['--calendar-event-text-color'] = `var(--color-on-${color}-container)`;\n styles['--calendar-event-text-color--hover'] = `var(--color-on-${color})`;\n }\n\n private _emitEventClick(event: any) {\n this.dispatchEvent(\n new CustomEvent('month-view-event-click', {\n detail: { event },\n bubbles: true,\n composed: true,\n }),\n );\n }\n\n private _renderHeader() {\n const columns: any[] = [];\n for (\n let i = new Date(this.dateRange.startDate), j = 0;\n j < 7;\n i = addDays(i, 1), j++\n ) {\n columns.push(html`\n <div class=\"column\">\n <div class=\"column-content\">\n <div class=\"day\">${formatDate(i, 'EEEE')}</div>\n </div>\n </div>\n `);\n }\n return columns;\n }\n\n private _renderMultiDayBackground(sd: Date) {\n const columns: any[] = [];\n for (let i = new Date(sd), j = 0; j < 7; i = addDays(i, 1), j++) {\n columns.push(html`\n <div class=${this._getDayClass(i)}>\n <div class=\"column-content\">\n <div class=\"column-header\">\n <div class=\"day\">${formatDate(i, 'd')}</div>\n </div>\n </div>\n </div>\n `);\n }\n return columns;\n }\n\n private _renderEvents() {\n return this.weekDayEvents.map((eventDay, index) => {\n const weekStartDate = addDays(this.dateRange.startDate, index * 7);\n return html`\n <div class=\"multi-day-section\">\n <div class=\"multi-day-body-scroll\">\n <div class=\"multi-day-background\">\n <div class=\"columns\">\n ${this._renderMultiDayBackground(weekStartDate)}\n </div>\n </div>\n <div class=\"multi-events\">\n <div class=\"row-content\">\n ${eventDay.map(\n nodes => html`\n <div class=\"row\">\n ${nodes.map(node => {\n const evtCls = this.eventClickable\n ? 'event clickable'\n : 'event';\n const evtStyles: Record<string, string> = {\n left: `${this._getDatePercent(node.start, weekStartDate) + LONG_EVENT_PADDING}%`,\n width: `${this._getDatePercent(addDays(node.end, 1), weekStartDate) - this._getDatePercent(node.start, weekStartDate) - 2 * LONG_EVENT_PADDING}%`,\n };\n if (node.color) {\n this._populateColorVars(evtStyles, node.color);\n }\n return html`\n <div\n class=${evtCls}\n style=${this._styleMap(evtStyles)}\n @click=${() => {\n if (this.eventClickable)\n this._emitEventClick(node.data);\n }}\n >\n <div class=\"event-title\">\n ${node.title || '(no title)'}\n </div>\n </div>\n `;\n })}\n </div>\n `,\n )}\n <div class=\"row-spacer\"></div>\n </div>\n </div>\n </div>\n </div>\n `;\n });\n }\n\n private _styleMap(styles: Record<string, string>): string {\n return Object.entries(styles)\n .map(([k, v]) => `${k}:${v}`)\n .join(';');\n }\n\n render() {\n return html`\n <div class=\"calendar-month-view\">\n <div class=\"view-header\">\n <div class=\"columns\">${this._renderHeader()}</div>\n <div class=\"scrollbar-placeholder\"></div>\n </div>\n <div class=\"view-body\">\n <div class=\"view-body-scroll\">\n <div class=\"drawing-area\">${this._renderEvents()}</div>\n </div>\n </div>\n </div>\n `;\n }\n}\n"],"names":["LitElement","html","styles","property","state"],"mappings":"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"}
1
+ {"version":3,"file":"calendar-month-view.js","sources":["../../src/calendar/calendar-month-view.ts"],"sourcesContent":["import { LitElement, html, nothing } from 'lit';\nimport { property, state } from 'lit/decorators.js';\nimport {\n addDays,\n differenceInDays,\n startOfDay,\n endOfDay,\n calculateMonthRange,\n formatDate,\n getTimePercent,\n LONG_EVENT_PADDING,\n} from './utils.js';\nimport { BaseEvent } from './base-event.js';\nimport { CalendarEvent } from './calendar-event.js';\nimport { MonthEventManager } from './event-manager.js';\nimport type { ColumnEvent } from './event-manager.js';\nimport IndividualComponent from '@/IndividualComponent.js';\nimport styles from './calendar-month-view.scss';\n\n/**\n * @label Calendar Month View\n * @tag wc-calendar-month-view\n * @rawTag calendar-month-view\n * @summary Internal month view component for the calendar.\n */\n@IndividualComponent\nexport class CalendarMonthView extends LitElement {\n static styles = [styles];\n\n @property({ type: Array })\n events: CalendarEvent[] = [];\n\n @property({ type: Boolean, attribute: 'event-clickable' })\n eventClickable: boolean = true;\n\n @property({ type: Object, attribute: false })\n currentTime: Date = new Date();\n\n @property({ type: Object, attribute: false })\n contextDate: Date = new Date();\n\n @state()\n private dateRange: any = {};\n\n @state()\n private weekDayEvents: ColumnEvent[][][] = [];\n\n override connectedCallback() {\n super.connectedCallback();\n this._processEvents();\n }\n\n override willUpdate(changedProperties: Map<string, unknown>) {\n if (\n changedProperties.has('events') ||\n changedProperties.has('contextDate')\n ) {\n this._processEvents();\n }\n }\n\n override firstUpdated() {\n const viewBody = this.renderRoot.querySelector('.view-body');\n if (viewBody) {\n const viewBodyHeight = viewBody.scrollHeight;\n viewBody.scrollTo({\n top:\n (getTimePercent(this.currentTime) / 100) * viewBodyHeight - 150,\n });\n }\n }\n\n private _processEvents() {\n this.dateRange = calculateMonthRange(this.contextDate, 1);\n this.weekDayEvents = [];\n\n for (\n let i = new Date(this.dateRange.startDate), j = 0;\n j < 6;\n i = addDays(i, 7), j++\n ) {\n const manager = new MonthEventManager();\n manager.addEvents(\n this.events.filter(event =>\n event.isOverlapping(\n new BaseEvent(startOfDay(i), endOfDay(addDays(i, 6))),\n ),\n ),\n );\n manager.process();\n this.weekDayEvents.push(manager.columns);\n }\n }\n\n private _getDatePercent(date: Date, dateRangeStartDate: Date): number {\n const currentDay = differenceInDays(startOfDay(date), dateRangeStartDate);\n const percent = (currentDay / 7) * 100;\n if (percent < 0) return 0;\n if (percent > 100) return 100;\n return percent;\n }\n\n private _getDayClass(date: Date): string {\n const diff = differenceInDays(\n startOfDay(date),\n startOfDay(this.currentTime),\n );\n if (diff === 0) return 'column today';\n if (diff < 0) return 'column past';\n return 'column future';\n }\n\n private _populateColorVars(\n styles: Record<string, string>,\n color: string,\n ) {\n styles['--calendar-event-bg-color'] = `var(--color-${color}-container)`;\n styles['--calendar-event-bg-color--hover'] = `var(--color-inverse-${color})`;\n styles['--calendar-event-border-color'] = `var(--color-${color})`;\n styles['--calendar-event-text-color'] = `var(--color-on-${color}-container)`;\n styles['--calendar-event-text-color--hover'] = `var(--color-on-${color})`;\n }\n\n private _emitEventClick(event: any) {\n this.dispatchEvent(\n new CustomEvent('month-view-event-click', {\n detail: { event },\n bubbles: true,\n composed: true,\n }),\n );\n }\n\n private _renderHeader() {\n const columns: any[] = [];\n for (\n let i = new Date(this.dateRange.startDate), j = 0;\n j < 7;\n i = addDays(i, 1), j++\n ) {\n columns.push(html`\n <div class=\"column\">\n <div class=\"column-content\">\n <div class=\"day\">${formatDate(i, 'EEEE')}</div>\n </div>\n </div>\n `);\n }\n return columns;\n }\n\n private _renderMultiDayBackground(sd: Date) {\n const columns: any[] = [];\n for (let i = new Date(sd), j = 0; j < 7; i = addDays(i, 1), j++) {\n columns.push(html`\n <div class=${this._getDayClass(i)}>\n <div class=\"column-content\">\n <div class=\"column-header\">\n <div class=\"day\">${formatDate(i, 'd')}</div>\n </div>\n </div>\n </div>\n `);\n }\n return columns;\n }\n\n private _renderEvents() {\n return this.weekDayEvents.map((eventDay, index) => {\n const weekStartDate = addDays(this.dateRange.startDate, index * 7);\n return html`\n <div class=\"multi-day-section\">\n <div class=\"multi-day-body-scroll\">\n <div class=\"multi-day-background\">\n <div class=\"columns\">\n ${this._renderMultiDayBackground(weekStartDate)}\n </div>\n </div>\n <div class=\"multi-events\">\n <div class=\"row-content\">\n ${eventDay.map(\n nodes => html`\n <div class=\"row\">\n ${nodes.map(node => {\n const evtCls = this.eventClickable\n ? 'event clickable'\n : 'event';\n const evtStyles: Record<string, string> = {\n left: `${this._getDatePercent(node.start, weekStartDate) + LONG_EVENT_PADDING}%`,\n width: `${this._getDatePercent(addDays(node.end, 1), weekStartDate) - this._getDatePercent(node.start, weekStartDate) - 2 * LONG_EVENT_PADDING}%`,\n };\n if (node.color) {\n this._populateColorVars(evtStyles, node.color);\n }\n return html`\n <div\n class=${evtCls}\n style=${this._styleMap(evtStyles)}\n @click=${() => {\n if (this.eventClickable)\n this._emitEventClick(node.data);\n }}\n >\n <div class=\"event-title\">\n ${node.title || '(no title)'}\n </div>\n </div>\n `;\n })}\n </div>\n `,\n )}\n <div class=\"row-spacer\"></div>\n </div>\n </div>\n </div>\n </div>\n `;\n });\n }\n\n private _styleMap(styles: Record<string, string>): string {\n return Object.entries(styles)\n .map(([k, v]) => `${k}:${v}`)\n .join(';');\n }\n\n render() {\n return html`\n <div class=\"calendar-month-view\">\n <div class=\"view-header\">\n <div class=\"columns\">${this._renderHeader()}</div>\n <div class=\"scrollbar-placeholder\"></div>\n </div>\n <div class=\"view-body\">\n <div class=\"view-body-scroll\">\n <div class=\"drawing-area\">${this._renderEvents()}</div>\n </div>\n </div>\n </div>\n `;\n }\n}\n"],"names":["LitElement","html","styles","property","state"],"mappings":"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"}
package/dist/canvas.js CHANGED
@@ -21,8 +21,22 @@ var css_248z = i`* {
21
21
  }
22
22
 
23
23
  .canvas-wrapper {
24
+ position: relative;
24
25
  background: var(--canvas-background);
25
- border-radius: var(--shape-corner-medium);
26
+ }
27
+
28
+ .canvas {
29
+ display: block;
30
+ }
31
+
32
+ .canvas-background,
33
+ .canvas-shapes {
34
+ position: absolute;
35
+ inset: 0;
36
+ }
37
+
38
+ .canvas-background {
39
+ pointer-events: none;
26
40
  }
27
41
 
28
42
  #canvas-background circle {
@@ -31,14 +45,13 @@ var css_248z = i`* {
31
45
 
32
46
  #endarrow polyline {
33
47
  fill: none;
34
- stroke: var(--canvas-arrow-color);
48
+ stroke: context-stroke;
35
49
  vector-effect: non-scaling-stroke;
36
50
  stroke-width: 2;
51
+ stroke-linejoin: round;
52
+ stroke-linecap: round;
37
53
  }
38
54
 
39
- .line.no-color {
40
- stroke: var(--canvas-line-color);
41
- }
42
55
  .line.variant-dashed {
43
56
  stroke-dasharray: 6 6;
44
57
  }
@@ -64,6 +77,8 @@ var css_248z = i`* {
64
77
  }`;
65
78
 
66
79
  var Canvas_1;
80
+ const GRID_GAP = 10;
81
+ const GRID_DOT_RADIUS = 1;
67
82
  /**
68
83
  * @label Canvas
69
84
  * @tag wc-canvas
@@ -101,8 +116,6 @@ let Canvas = Canvas_1 = class Canvas extends i$1 {
101
116
  * Zoom multiplier for the canvas dimensions.
102
117
  */
103
118
  this.zoom = 1;
104
- this.unitSize = 1;
105
- this.gap = this.unitSize * 10;
106
119
  }
107
120
  static getNextPoint(point, direction, length) {
108
121
  if (direction === 'down')
@@ -115,47 +128,44 @@ let Canvas = Canvas_1 = class Canvas extends i$1 {
115
128
  return { x: point.x + length, y: point.y };
116
129
  return { x: point.x, y: point.y };
117
130
  }
118
- static updateComputationArea(point, area) {
119
- const nextArea = { ...area };
120
- if (point.x > nextArea.width)
121
- nextArea.width = point.x;
122
- else if (point.x < nextArea.x)
123
- nextArea.x = point.x;
124
- if (point.y > nextArea.height)
125
- nextArea.height = point.y;
126
- else if (point.y < nextArea.y)
127
- nextArea.y = point.y;
128
- return nextArea;
131
+ static updateExtents(extents, x, y) {
132
+ if (x < extents.minX)
133
+ extents.minX = x;
134
+ if (x > extents.maxX)
135
+ extents.maxX = x;
136
+ if (y < extents.minY)
137
+ extents.minY = y;
138
+ if (y > extents.maxY)
139
+ extents.maxY = y;
129
140
  }
130
141
  static getStrokeVariantClasses(variant) {
131
142
  return {
132
143
  line: true,
133
- 'no-color': false,
134
144
  'variant-dashed': variant === 'dashed' || variant === 'animated-dashed',
135
145
  'variant-animated-dashed': variant === 'animated-dashed',
136
146
  };
137
147
  }
138
148
  computeShapes(initialBounds) {
139
- const dotRadius = this.unitSize;
140
- let computedViewbox = { ...initialBounds };
149
+ // Track world-space bounds (grid units) as shapes are processed.
150
+ const extents = {
151
+ minX: initialBounds.x,
152
+ minY: initialBounds.y,
153
+ maxX: initialBounds.x + initialBounds.width,
154
+ maxY: initialBounds.y + initialBounds.height,
155
+ };
141
156
  const shapes = this.shapes.map(shape => {
142
157
  switch (shape.type) {
143
158
  case 'circle': {
144
159
  const r = shape.radius || 1;
145
160
  const cx = shape.x || 0;
146
161
  const cy = shape.y || 0;
147
- if (cx + Math.ceil(r) > computedViewbox.width)
148
- computedViewbox.width = cx + Math.ceil(r);
149
- if (cx - Math.ceil(r) < computedViewbox.x)
150
- computedViewbox.x = cx - Math.ceil(r);
151
- if (cy + Math.ceil(r) > computedViewbox.height)
152
- computedViewbox.height = cy + Math.ceil(r);
153
- if (cy - Math.ceil(r) < computedViewbox.y)
154
- computedViewbox.y = cy - Math.ceil(r);
162
+ Canvas_1.updateExtents(extents, cx - r, cy - r);
163
+ Canvas_1.updateExtents(extents, cx + r, cy + r);
164
+ // Convert from grid units to SVG pixels using the fixed gap.
155
165
  return w `<circle
156
- cx=${cx * this.gap + dotRadius}
157
- cy=${cy * this.gap + dotRadius}
158
- r=${r * this.gap}
166
+ cx=${cx * GRID_GAP + GRID_DOT_RADIUS}
167
+ cy=${cy * GRID_GAP + GRID_DOT_RADIUS}
168
+ r=${r * GRID_GAP}
159
169
  fill=${shape.color || 'var(--canvas-line-color, var(--color-on-surface))'}
160
170
  />`;
161
171
  }
@@ -164,33 +174,28 @@ let Canvas = Canvas_1 = class Canvas extends i$1 {
164
174
  const h = shape.height || 1;
165
175
  const rx = shape.x || 0;
166
176
  const ry = shape.y || 0;
167
- if (rx + Math.ceil(w$1) > computedViewbox.width)
168
- computedViewbox.width = rx + Math.ceil(w$1);
169
- if (rx - Math.ceil(w$1) < computedViewbox.x)
170
- computedViewbox.x = rx - Math.ceil(w$1);
171
- if (ry + Math.ceil(h) > computedViewbox.height)
172
- computedViewbox.height = ry + Math.ceil(h);
173
- if (ry - Math.ceil(h) < computedViewbox.y)
174
- computedViewbox.y = ry - Math.ceil(h);
177
+ Canvas_1.updateExtents(extents, rx, ry);
178
+ Canvas_1.updateExtents(extents, rx + w$1, ry + h);
175
179
  return w `<rect
176
- x=${rx * this.gap + dotRadius}
177
- y=${ry * this.gap}
178
- width=${w$1 * this.gap + dotRadius}
179
- height=${h * this.gap + dotRadius}
180
+ x=${rx * GRID_GAP + GRID_DOT_RADIUS}
181
+ y=${ry * GRID_GAP}
182
+ width=${w$1 * GRID_GAP + GRID_DOT_RADIUS}
183
+ height=${h * GRID_GAP + GRID_DOT_RADIUS}
180
184
  fill=${shape.color || 'var(--canvas-line-color, var(--color-on-surface))'}
181
185
  />`;
182
186
  }
183
187
  case 'line': {
184
188
  const start = shape.start || { x: 0, y: 0 };
185
189
  const end = shape.end || { x: 0, y: 0 };
186
- const pathString = `M${start.x * this.gap + dotRadius} ${start.y * this.gap + dotRadius} L${end.x * this.gap + dotRadius} ${end.y * this.gap + dotRadius}`;
190
+ Canvas_1.updateExtents(extents, start.x, start.y);
191
+ Canvas_1.updateExtents(extents, end.x, end.y);
192
+ const pathString = `M${start.x * GRID_GAP + GRID_DOT_RADIUS} ${start.y * GRID_GAP + GRID_DOT_RADIUS} L${end.x * GRID_GAP + GRID_DOT_RADIUS} ${end.y * GRID_GAP + GRID_DOT_RADIUS}`;
187
193
  const strokeColor = shape.color ||
188
194
  'var(--canvas-line-color, var(--color-on-surface))';
189
195
  return w `<path
190
196
  class=${e({
191
197
  ...Canvas_1.getStrokeVariantClasses(shape.variant),
192
198
  clickable: !!shape.clickable,
193
- 'no-color': !shape.color,
194
199
  })}
195
200
  stroke-width="2"
196
201
  stroke-linecap="round"
@@ -204,35 +209,38 @@ let Canvas = Canvas_1 = class Canvas extends i$1 {
204
209
  }
205
210
  case 'connector': {
206
211
  const start = shape.start || { x: 0, y: 0 };
207
- let pathString = `M${start.x * this.gap + dotRadius} ${start.y * this.gap + dotRadius}`;
212
+ let pathString = `M${start.x * GRID_GAP + GRID_DOT_RADIUS} ${start.y * GRID_GAP + GRID_DOT_RADIUS}`;
208
213
  let current = { ...start };
209
- computedViewbox = Canvas_1.updateComputationArea(current, computedViewbox);
214
+ Canvas_1.updateExtents(extents, current.x, current.y);
210
215
  const pathSegments = shape.path || [];
211
216
  for (let i = 0; i < pathSegments.length; i += 1) {
212
217
  const path = pathSegments[i];
213
218
  if (i === 0) {
219
+ // Move one unit first so curved corner joins don't overlap start.
214
220
  const point = Canvas_1.getNextPoint(current, path.direction, 1);
215
- pathString += ` L${point.x * this.gap + dotRadius} ${point.y * this.gap + dotRadius}`;
221
+ pathString += ` L${point.x * GRID_GAP + GRID_DOT_RADIUS} ${point.y * GRID_GAP + GRID_DOT_RADIUS}`;
216
222
  current = { ...point };
217
- computedViewbox = Canvas_1.updateComputationArea(current, computedViewbox);
223
+ Canvas_1.updateExtents(extents, current.x, current.y);
218
224
  }
219
225
  const point = Canvas_1.getNextPoint(current, path.direction, path.length - 2);
220
- pathString += ` L${point.x * this.gap + dotRadius} ${point.y * this.gap + dotRadius}`;
226
+ pathString += ` L${point.x * GRID_GAP + GRID_DOT_RADIUS} ${point.y * GRID_GAP + GRID_DOT_RADIUS}`;
221
227
  current = { ...point };
222
- computedViewbox = Canvas_1.updateComputationArea(current, computedViewbox);
228
+ Canvas_1.updateExtents(extents, current.x, current.y);
223
229
  if (i === pathSegments.length - 1) {
224
230
  const endPoint = Canvas_1.getNextPoint(current, path.direction, 1);
225
- pathString += ` L${endPoint.x * this.gap + dotRadius} ${endPoint.y * this.gap + dotRadius}`;
231
+ pathString += ` L${endPoint.x * GRID_GAP + GRID_DOT_RADIUS} ${endPoint.y * GRID_GAP + GRID_DOT_RADIUS}`;
226
232
  current = { ...endPoint };
227
- computedViewbox = Canvas_1.updateComputationArea(current, computedViewbox);
233
+ Canvas_1.updateExtents(extents, current.x, current.y);
228
234
  }
229
235
  else {
230
236
  const nextPath = pathSegments[i + 1];
231
237
  const midPoint = Canvas_1.getNextPoint(current, path.direction, 1);
238
+ Canvas_1.updateExtents(extents, midPoint.x, midPoint.y);
232
239
  const nextPoint = Canvas_1.getNextPoint(midPoint, nextPath.direction, 1);
233
- pathString += ` Q ${midPoint.x * this.gap + dotRadius} ${midPoint.y * this.gap + dotRadius} ${nextPoint.x * this.gap + dotRadius} ${nextPoint.y * this.gap + dotRadius}`;
240
+ // Use a quadratic segment to round corners between directions.
241
+ pathString += ` Q ${midPoint.x * GRID_GAP + GRID_DOT_RADIUS} ${midPoint.y * GRID_GAP + GRID_DOT_RADIUS} ${nextPoint.x * GRID_GAP + GRID_DOT_RADIUS} ${nextPoint.y * GRID_GAP + GRID_DOT_RADIUS}`;
234
242
  current = { ...nextPoint };
235
- computedViewbox = Canvas_1.updateComputationArea(current, computedViewbox);
243
+ Canvas_1.updateExtents(extents, current.x, current.y);
236
244
  }
237
245
  }
238
246
  const strokeColor = shape.color ||
@@ -241,7 +249,6 @@ let Canvas = Canvas_1 = class Canvas extends i$1 {
241
249
  <path
242
250
  class=${e({
243
251
  ...Canvas_1.getStrokeVariantClasses(shape.variant),
244
- 'no-color': !shape.color,
245
252
  })}
246
253
  stroke-width="2"
247
254
  stroke-linecap="round"
@@ -266,17 +273,64 @@ let Canvas = Canvas_1 = class Canvas extends i$1 {
266
273
  return A;
267
274
  }
268
275
  });
269
- // Padding
270
- computedViewbox.x -= this.padding;
271
- computedViewbox.y -= this.padding;
272
- computedViewbox.width += this.padding;
273
- computedViewbox.height += this.padding;
274
- computedViewbox.width -= computedViewbox.x;
275
- computedViewbox.height -= computedViewbox.y;
276
+ // Expand bounds with padding so shapes are not flush to the edge.
277
+ const computedViewbox = {
278
+ x: extents.minX - this.padding,
279
+ y: extents.minY - this.padding,
280
+ width: Math.max(extents.maxX - extents.minX + this.padding * 2, 0),
281
+ height: Math.max(extents.maxY - extents.minY + this.padding * 2, 0),
282
+ };
276
283
  return { shapes, computedViewbox };
277
284
  }
285
+ renderBackgroundSvg(computedViewBox, svgViewBox) {
286
+ return b `
287
+ <svg
288
+ class="canvas canvas-background"
289
+ height="100%"
290
+ width="100%"
291
+ viewBox=${svgViewBox}
292
+ aria-hidden="true"
293
+ >
294
+ <defs>
295
+ <pattern
296
+ id="canvas-background"
297
+ patternUnits="userSpaceOnUse"
298
+ width=${GRID_GAP}
299
+ height=${GRID_GAP}
300
+ >
301
+ <circle cx="1" cy="1" r=${GRID_DOT_RADIUS} />
302
+ </pattern>
303
+ </defs>
304
+
305
+ <rect
306
+ x=${computedViewBox.x * GRID_GAP}
307
+ y=${computedViewBox.y * GRID_GAP}
308
+ width="100%"
309
+ height="100%"
310
+ fill="url(#canvas-background)"
311
+ />
312
+ </svg>
313
+ `;
314
+ }
315
+ renderShapesSvg(shapes, svgViewBox) {
316
+ return b `
317
+ <svg
318
+ class="canvas canvas-shapes"
319
+ height="100%"
320
+ width="100%"
321
+ viewBox=${svgViewBox}
322
+ >
323
+ <defs>
324
+ <marker id="endarrow" markerWidth="10" markerHeight="10" refX="5" refY="5" markerUnits="strokeWidth" orient="auto">
325
+ <polyline points="0 2, 5 5, 0 8"></polyline>
326
+ </marker>
327
+ </defs>
328
+
329
+ ${shapes}
330
+ </svg>
331
+ `;
332
+ }
278
333
  render() {
279
- const dotRadius = this.unitSize;
280
334
  let computedViewBox = { width: 0, height: 0, x: 0, y: 0 };
281
335
  const { shapes, computedViewbox } = this.computeShapes(computedViewBox);
282
336
  computedViewBox = computedViewbox;
@@ -289,53 +343,18 @@ let Canvas = Canvas_1 = class Canvas extends i$1 {
289
343
  height: parseInt(viewBox[3], 10),
290
344
  };
291
345
  }
292
- const wrapperWidth = (computedViewBox.width * this.gap + 2) * dotRadius * this.zoom;
293
- const wrapperHeight = (computedViewBox.height * this.gap + 2) * dotRadius * this.zoom;
294
- const svgViewBox = `${computedViewBox.x * this.gap} ${computedViewBox.y * this.gap} ${computedViewBox.width * this.gap + 2 * dotRadius} ${computedViewBox.height * this.gap + 2 * dotRadius}`;
346
+ // Zoom scales the outer viewport size while the SVG viewBox stays in world units.
347
+ const wrapperWidth = (computedViewBox.width * GRID_GAP + 2) * GRID_DOT_RADIUS * this.zoom;
348
+ const wrapperHeight = (computedViewBox.height * GRID_GAP + 2) * GRID_DOT_RADIUS * this.zoom;
349
+ // viewBox maps world-space extents into the internal SVG coordinate system.
350
+ const svgViewBox = `${computedViewBox.x * GRID_GAP} ${computedViewBox.y * GRID_GAP} ${computedViewBox.width * GRID_GAP + 2 * GRID_DOT_RADIUS} ${computedViewBox.height * GRID_GAP + 2 * GRID_DOT_RADIUS}`;
295
351
  return b `
296
352
  <div
297
353
  class="canvas-wrapper"
298
354
  style="width: ${wrapperWidth}px; height: ${wrapperHeight}px;"
299
355
  >
300
- <svg
301
- class="canvas"
302
- height="100%"
303
- width="100%"
304
- viewBox=${svgViewBox}
305
- >
306
- <defs>
307
- <pattern
308
- id="canvas-background"
309
- patternUnits="userSpaceOnUse"
310
- width=${this.gap}
311
- height=${this.gap}
312
- >
313
- <circle cx="1" cy="1" r=${dotRadius} />
314
- </pattern>
315
-
316
- <marker
317
- id="endarrow"
318
- markerWidth="15"
319
- markerHeight="22.5"
320
- refX="9"
321
- refY="15"
322
- markerUnits="userSpaceOnUse"
323
- orient="auto"
324
- >
325
- <polyline points="0 22.5, 7.5 15, 0 7.5"></polyline>
326
- </marker>
327
- </defs>
328
-
329
- <rect
330
- x=${computedViewBox.x * this.gap}
331
- y=${computedViewBox.y * this.gap}
332
- width="100%"
333
- height="100%"
334
- fill="url(#canvas-background)"
335
- />
336
-
337
- ${shapes}
338
- </svg>
356
+ ${this.renderBackgroundSvg(computedViewBox, svgViewBox)}
357
+ ${this.renderShapesSvg(shapes, svgViewBox)}
339
358
  </div>
340
359
  `;
341
360
  }