@fullcalendar/core 7.0.0-beta.3 → 7.0.0-beta.4

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 (184) hide show
  1. package/index.cjs +54 -45
  2. package/index.global.js +205 -151
  3. package/index.global.min.js +2 -2
  4. package/index.js +56 -47
  5. package/internal-common.cjs +5151 -5106
  6. package/internal-common.d.ts +128 -85
  7. package/internal-common.js +5150 -5106
  8. package/internal.cjs +2 -1
  9. package/internal.d.ts +1 -1
  10. package/internal.js +1 -1
  11. package/locales/af.global.js +1 -1
  12. package/locales/af.global.min.js +1 -1
  13. package/locales/ar-dz.global.js +1 -1
  14. package/locales/ar-dz.global.min.js +1 -1
  15. package/locales/ar-kw.global.js +1 -1
  16. package/locales/ar-kw.global.min.js +1 -1
  17. package/locales/ar-ly.global.js +1 -1
  18. package/locales/ar-ly.global.min.js +1 -1
  19. package/locales/ar-ma.global.js +1 -1
  20. package/locales/ar-ma.global.min.js +1 -1
  21. package/locales/ar-sa.global.js +1 -1
  22. package/locales/ar-sa.global.min.js +1 -1
  23. package/locales/ar-tn.global.js +1 -1
  24. package/locales/ar-tn.global.min.js +1 -1
  25. package/locales/ar.global.js +1 -1
  26. package/locales/ar.global.min.js +1 -1
  27. package/locales/az.global.js +1 -1
  28. package/locales/az.global.min.js +1 -1
  29. package/locales/bg.global.js +1 -1
  30. package/locales/bg.global.min.js +1 -1
  31. package/locales/bn.global.js +1 -1
  32. package/locales/bn.global.min.js +1 -1
  33. package/locales/bs.global.js +1 -1
  34. package/locales/bs.global.min.js +1 -1
  35. package/locales/ca.global.js +1 -1
  36. package/locales/ca.global.min.js +1 -1
  37. package/locales/cs.global.js +1 -1
  38. package/locales/cs.global.min.js +1 -1
  39. package/locales/cy.global.js +1 -1
  40. package/locales/cy.global.min.js +1 -1
  41. package/locales/da.global.js +1 -1
  42. package/locales/da.global.min.js +1 -1
  43. package/locales/de-at.cjs +1 -2
  44. package/locales/de-at.global.js +2 -3
  45. package/locales/de-at.global.min.js +2 -2
  46. package/locales/de-at.js +1 -2
  47. package/locales/de.cjs +1 -2
  48. package/locales/de.global.js +2 -3
  49. package/locales/de.global.min.js +2 -2
  50. package/locales/de.js +1 -2
  51. package/locales/el.global.js +1 -1
  52. package/locales/el.global.min.js +1 -1
  53. package/locales/en-au.global.js +1 -1
  54. package/locales/en-au.global.min.js +1 -1
  55. package/locales/en-gb.global.js +1 -1
  56. package/locales/en-gb.global.min.js +1 -1
  57. package/locales/en-nz.global.js +1 -1
  58. package/locales/en-nz.global.min.js +1 -1
  59. package/locales/eo.global.js +1 -1
  60. package/locales/eo.global.min.js +1 -1
  61. package/locales/es-us.global.js +1 -1
  62. package/locales/es-us.global.min.js +1 -1
  63. package/locales/es.cjs +1 -2
  64. package/locales/es.global.js +2 -3
  65. package/locales/es.global.min.js +2 -2
  66. package/locales/es.js +1 -2
  67. package/locales/et.global.js +1 -1
  68. package/locales/et.global.min.js +1 -1
  69. package/locales/eu.global.js +1 -1
  70. package/locales/eu.global.min.js +1 -1
  71. package/locales/fa.global.js +1 -1
  72. package/locales/fa.global.min.js +1 -1
  73. package/locales/fi.global.js +1 -1
  74. package/locales/fi.global.min.js +1 -1
  75. package/locales/fr-ca.global.js +1 -1
  76. package/locales/fr-ca.global.min.js +1 -1
  77. package/locales/fr-ch.global.js +1 -1
  78. package/locales/fr-ch.global.min.js +1 -1
  79. package/locales/fr.global.js +1 -1
  80. package/locales/fr.global.min.js +1 -1
  81. package/locales/gl.cjs +1 -2
  82. package/locales/gl.global.js +2 -3
  83. package/locales/gl.global.min.js +2 -2
  84. package/locales/gl.js +1 -2
  85. package/locales/he.global.js +1 -1
  86. package/locales/he.global.min.js +1 -1
  87. package/locales/hi.global.js +1 -1
  88. package/locales/hi.global.min.js +1 -1
  89. package/locales/hr.global.js +1 -1
  90. package/locales/hr.global.min.js +1 -1
  91. package/locales/hu.global.js +1 -1
  92. package/locales/hu.global.min.js +1 -1
  93. package/locales/hy-am.global.js +1 -1
  94. package/locales/hy-am.global.min.js +1 -1
  95. package/locales/id.global.js +1 -1
  96. package/locales/id.global.min.js +1 -1
  97. package/locales/is.global.js +1 -1
  98. package/locales/is.global.min.js +1 -1
  99. package/locales/it.global.js +1 -1
  100. package/locales/it.global.min.js +1 -1
  101. package/locales/ja.global.js +1 -1
  102. package/locales/ja.global.min.js +1 -1
  103. package/locales/ka.global.js +1 -1
  104. package/locales/ka.global.min.js +1 -1
  105. package/locales/kk.global.js +1 -1
  106. package/locales/kk.global.min.js +1 -1
  107. package/locales/km.global.js +1 -1
  108. package/locales/km.global.min.js +1 -1
  109. package/locales/ko.global.js +1 -1
  110. package/locales/ko.global.min.js +1 -1
  111. package/locales/ku.global.js +1 -1
  112. package/locales/ku.global.min.js +1 -1
  113. package/locales/lb.global.js +1 -1
  114. package/locales/lb.global.min.js +1 -1
  115. package/locales/lt.global.js +1 -1
  116. package/locales/lt.global.min.js +1 -1
  117. package/locales/lv.global.js +1 -1
  118. package/locales/lv.global.min.js +1 -1
  119. package/locales/mk.global.js +1 -1
  120. package/locales/mk.global.min.js +1 -1
  121. package/locales/ms.global.js +1 -1
  122. package/locales/ms.global.min.js +1 -1
  123. package/locales/nb.global.js +1 -1
  124. package/locales/nb.global.min.js +1 -1
  125. package/locales/ne.global.js +1 -1
  126. package/locales/ne.global.min.js +1 -1
  127. package/locales/nl.global.js +1 -1
  128. package/locales/nl.global.min.js +1 -1
  129. package/locales/nn.global.js +1 -1
  130. package/locales/nn.global.min.js +1 -1
  131. package/locales/pl.global.js +1 -1
  132. package/locales/pl.global.min.js +1 -1
  133. package/locales/pt-br.cjs +1 -2
  134. package/locales/pt-br.global.js +2 -3
  135. package/locales/pt-br.global.min.js +2 -2
  136. package/locales/pt-br.js +1 -2
  137. package/locales/pt.global.js +1 -1
  138. package/locales/pt.global.min.js +1 -1
  139. package/locales/ro.global.js +1 -1
  140. package/locales/ro.global.min.js +1 -1
  141. package/locales/ru.global.js +1 -1
  142. package/locales/ru.global.min.js +1 -1
  143. package/locales/si-lk.global.js +1 -1
  144. package/locales/si-lk.global.min.js +1 -1
  145. package/locales/sk.global.js +1 -1
  146. package/locales/sk.global.min.js +1 -1
  147. package/locales/sl.global.js +1 -1
  148. package/locales/sl.global.min.js +1 -1
  149. package/locales/sm.global.js +1 -1
  150. package/locales/sm.global.min.js +1 -1
  151. package/locales/sq.global.js +1 -1
  152. package/locales/sq.global.min.js +1 -1
  153. package/locales/sr-cyrl.global.js +1 -1
  154. package/locales/sr-cyrl.global.min.js +1 -1
  155. package/locales/sr.global.js +1 -1
  156. package/locales/sr.global.min.js +1 -1
  157. package/locales/sv.cjs +1 -2
  158. package/locales/sv.global.js +2 -3
  159. package/locales/sv.global.min.js +2 -2
  160. package/locales/sv.js +1 -2
  161. package/locales/ta-in.global.js +1 -1
  162. package/locales/ta-in.global.min.js +1 -1
  163. package/locales/th.global.js +1 -1
  164. package/locales/th.global.min.js +1 -1
  165. package/locales/tr.global.js +1 -1
  166. package/locales/tr.global.min.js +1 -1
  167. package/locales/ug.global.js +1 -1
  168. package/locales/ug.global.min.js +1 -1
  169. package/locales/uk.global.js +1 -1
  170. package/locales/uk.global.min.js +1 -1
  171. package/locales/uz-cy.global.js +1 -1
  172. package/locales/uz-cy.global.min.js +1 -1
  173. package/locales/uz.global.js +1 -1
  174. package/locales/uz.global.min.js +1 -1
  175. package/locales/vi.global.js +1 -1
  176. package/locales/vi.global.min.js +1 -1
  177. package/locales/zh-cn.global.js +1 -1
  178. package/locales/zh-cn.global.min.js +1 -1
  179. package/locales/zh-tw.global.js +1 -1
  180. package/locales/zh-tw.global.min.js +1 -1
  181. package/locales-all.global.js +7 -13
  182. package/locales-all.global.min.js +2 -2
  183. package/package.json +1 -1
  184. package/preact.js +1 -1
package/index.cjs CHANGED
@@ -30,9 +30,9 @@ const MINIMAL_RAW_EN_LOCALE = {
30
30
  weekText: 'W',
31
31
  weekTextLong: 'Week',
32
32
  closeHint: 'Close',
33
- timeHint: 'Time',
34
- eventHint: 'Event',
33
+ eventsHint: 'Events',
35
34
  allDayText: 'all-day',
35
+ timedText: 'timed',
36
36
  moreLinkText: 'more',
37
37
  noEventsText: 'No events to display',
38
38
  };
@@ -47,7 +47,7 @@ const RAW_EN_LOCALE = Object.assign(Object.assign({}, MINIMAL_RAW_EN_LOCALE), {
47
47
  ? 'Today'
48
48
  : `This ${buttonText}`;
49
49
  },
50
- }, viewHint: '$0 view', navLinkHint: 'Go to $0', moreLinkHint(eventCnt) {
50
+ }, viewHint: '$0 view', viewChangeHint: 'Change view', navLinkHint: 'Go to $0', moreLinkHint(eventCnt) {
51
51
  return `Show ${eventCnt} more event${eventCnt === 1 ? '' : 's'}`;
52
52
  } });
53
53
  function organizeRawLocales(explicitRawLocales) {
@@ -719,17 +719,25 @@ function parseToolbars(calendarOptions, calendarOptionOverrides, theme, viewSpec
719
719
  return { header, footer };
720
720
  }
721
721
  function parseToolbar(sectionStrHash, calendarOptions, calendarOptionOverrides, theme, viewSpecs, calendarApi) {
722
- let sectionWidgets = {};
722
+ let isRtl = calendarOptions.direction === 'rtl';
723
723
  let viewsWithButtons = [];
724
724
  let hasTitle = false;
725
- for (let sectionName in sectionStrHash) {
726
- let sectionStr = sectionStrHash[sectionName];
725
+ function processSectionStr(sectionStr) {
727
726
  let sectionRes = parseSection(sectionStr, calendarOptions, calendarOptionOverrides, theme, viewSpecs, calendarApi);
728
- sectionWidgets[sectionName] = sectionRes.widgets;
729
727
  viewsWithButtons.push(...sectionRes.viewsWithButtons);
730
728
  hasTitle = hasTitle || sectionRes.hasTitle;
729
+ return sectionRes.widgets;
731
730
  }
732
- return { sectionWidgets, viewsWithButtons, hasTitle };
731
+ const sectionWidgets = {
732
+ start: processSectionStr(sectionStrHash[isRtl ? 'right' : 'left'] || sectionStrHash.start || ''),
733
+ center: processSectionStr(sectionStrHash.center || ''),
734
+ end: processSectionStr(sectionStrHash[isRtl ? 'left' : 'right'] || sectionStrHash.end || ''),
735
+ };
736
+ return {
737
+ sectionWidgets,
738
+ viewsWithButtons,
739
+ hasTitle,
740
+ };
733
741
  }
734
742
  /*
735
743
  BAD: querying icons and text here. should be done at render time
@@ -757,6 +765,7 @@ theme, viewSpecs, calendarApi) {
757
765
  let buttonIcon; // only one of these will be set
758
766
  let buttonText; // "
759
767
  let buttonHint;
768
+ let isView = false;
760
769
  // ^ for the title="" attribute, for accessibility
761
770
  if ((customButtonProps = calendarCustomButtons[buttonName])) {
762
771
  buttonClick = (ev) => {
@@ -770,6 +779,7 @@ theme, viewSpecs, calendarApi) {
770
779
  buttonHint = customButtonProps.hint || customButtonProps.text;
771
780
  }
772
781
  else if ((viewSpec = viewSpecs[buttonName])) {
782
+ isView = true;
773
783
  viewsWithButtons.push(buttonName);
774
784
  buttonClick = () => {
775
785
  calendarApi.changeView(buttonName);
@@ -807,7 +817,7 @@ theme, viewSpecs, calendarApi) {
807
817
  ], calendarButtonText[buttonName]);
808
818
  }
809
819
  }
810
- return { buttonName, buttonClick, buttonIcon, buttonText, buttonHint };
820
+ return { buttonName, buttonClick, buttonIcon, buttonText, buttonHint, isView };
811
821
  })));
812
822
  return { widgets, viewsWithButtons, hasTitle };
813
823
  }
@@ -1631,27 +1641,41 @@ class ToolbarSection extends internalCommon.BaseComponent {
1631
1641
  }, ...children);
1632
1642
  }
1633
1643
  renderWidgetGroup(widgetGroup) {
1634
- let { props } = this;
1635
- let { theme } = this.context;
1644
+ let { props, context } = this;
1645
+ let { options, theme } = context;
1636
1646
  let children = [];
1637
1647
  let isOnlyButtons = true;
1648
+ let isOnlyView = true;
1649
+ for (const widget of widgetGroup) {
1650
+ const { buttonName, isView } = widget;
1651
+ if (buttonName === 'title') {
1652
+ isOnlyButtons = false;
1653
+ }
1654
+ else if (!isView) {
1655
+ isOnlyView = false;
1656
+ }
1657
+ }
1638
1658
  for (let widget of widgetGroup) {
1639
1659
  let { buttonName, buttonClick, buttonText, buttonIcon, buttonHint } = widget;
1640
1660
  if (buttonName === 'title') {
1641
- isOnlyButtons = false;
1642
- children.push(preact.createElement("h2", { className: "fc-toolbar-title" }, props.title));
1661
+ children.push(preact.createElement("div", { role: 'heading', "aria-level": options.headingLevel, id: props.titleId, className: 'fc-toolbar-title' }, props.title));
1643
1662
  }
1644
1663
  else {
1645
1664
  let isPressed = buttonName === props.activeButton;
1646
1665
  let isDisabled = (!props.isTodayEnabled && buttonName === 'today') ||
1647
1666
  (!props.isPrevEnabled && buttonName === 'prev') ||
1648
1667
  (!props.isNextEnabled && buttonName === 'next');
1649
- children.push(preact.createElement("button", { type: "button", title: typeof buttonHint === 'function' ? buttonHint(props.navUnit) : buttonHint, disabled: isDisabled, "aria-pressed": isPressed, className: internalCommon.joinClassNames(`fc-${buttonName}-button`, theme.getClassName('button'), isPressed && theme.getClassName('buttonActive')), onClick: buttonClick }, buttonText || (buttonIcon ? preact.createElement("span", { className: buttonIcon, role: "img" }) : '')));
1668
+ children.push(preact.createElement("button", Object.assign({ type: "button", disabled: isDisabled }, ((isOnlyButtons && isOnlyView)
1669
+ ? { 'role': 'tab', 'aria-selected': isPressed }
1670
+ : { 'aria-pressed': isPressed }), { "aria-label": typeof buttonHint === 'function' ? buttonHint(props.navUnit) : buttonHint, className: internalCommon.joinClassNames(`fc-${buttonName}-button`, theme.getClassName('button'), isPressed && theme.getClassName('buttonActive')), onClick: buttonClick }), buttonText || (buttonIcon ? preact.createElement("span", { className: buttonIcon, "aria-hidden": true }) : '')));
1650
1671
  }
1651
1672
  }
1652
1673
  if (children.length > 1) {
1653
- let groupClassName = (isOnlyButtons && theme.getClassName('buttonGroup')) || '';
1654
- return preact.createElement('div', { className: groupClassName }, ...children);
1674
+ return preact.createElement('div', {
1675
+ role: (isOnlyButtons && isOnlyView) ? 'tablist' : undefined,
1676
+ 'aria-label': (isOnlyButtons && isOnlyView) ? options.viewChangeHint : undefined,
1677
+ className: isOnlyButtons ? theme.getClassName('buttonGroup') : undefined,
1678
+ }, ...children);
1655
1679
  }
1656
1680
  return children[0];
1657
1681
  }
@@ -1660,33 +1684,15 @@ class ToolbarSection extends internalCommon.BaseComponent {
1660
1684
  class Toolbar extends internalCommon.BaseComponent {
1661
1685
  render() {
1662
1686
  let { model, className } = this.props;
1663
- let forceLtr = false;
1664
- let startContent;
1665
- let endContent;
1666
- let sectionWidgets = model.sectionWidgets;
1667
- let centerContent = sectionWidgets.center;
1668
- if (sectionWidgets.left) {
1669
- forceLtr = true;
1670
- startContent = sectionWidgets.left;
1671
- }
1672
- else {
1673
- startContent = sectionWidgets.start;
1674
- }
1675
- if (sectionWidgets.right) {
1676
- forceLtr = true;
1677
- endContent = sectionWidgets.right;
1678
- }
1679
- else {
1680
- endContent = sectionWidgets.end;
1681
- }
1682
- return (preact.createElement("div", { className: internalCommon.joinClassNames(className, 'fc-toolbar', forceLtr && 'fc-toolbar-ltr') },
1683
- this.renderSection('start', startContent || []),
1684
- this.renderSection('center', centerContent || []),
1685
- this.renderSection('end', endContent || [])));
1687
+ let { sectionWidgets } = model;
1688
+ return (preact.createElement("div", { className: internalCommon.joinClassNames(className, 'fc-toolbar') },
1689
+ this.renderSection('start', sectionWidgets.start),
1690
+ this.renderSection('center', sectionWidgets.center),
1691
+ this.renderSection('end', sectionWidgets.end)));
1686
1692
  }
1687
1693
  renderSection(key, widgetGroups) {
1688
1694
  let { props } = this;
1689
- return (preact.createElement(ToolbarSection, { key: key, name: key, widgetGroups: widgetGroups, title: props.title, navUnit: props.navUnit, activeButton: props.activeButton, isTodayEnabled: props.isTodayEnabled, isPrevEnabled: props.isPrevEnabled, isNextEnabled: props.isNextEnabled }));
1695
+ return (preact.createElement(ToolbarSection, { key: key, name: key, widgetGroups: widgetGroups, title: props.title, titleId: props.titleId, navUnit: props.navUnit, activeButton: props.activeButton, isTodayEnabled: props.isTodayEnabled, isPrevEnabled: props.isPrevEnabled, isNextEnabled: props.isNextEnabled }));
1690
1696
  }
1691
1697
  }
1692
1698
 
@@ -1785,6 +1791,7 @@ class CalendarContent extends internalCommon.PureComponent {
1785
1791
  this.buildViewPropTransformers = internalCommon.memoize(buildViewPropTransformers);
1786
1792
  this.buildToolbarProps = internalCommon.memoize(buildToolbarProps);
1787
1793
  this.interactionsStore = {};
1794
+ this.viewTitleId = internalCommon.getUniqueDomId();
1788
1795
  // Component Registration
1789
1796
  // -----------------------------------------------------------------------------------------------------------------
1790
1797
  this.registerInteractiveComponent = (component, settingsInput) => {
@@ -1835,9 +1842,9 @@ class CalendarContent extends internalCommon.PureComponent {
1835
1842
  }
1836
1843
  let viewContext = this.buildViewContext(props.viewSpec, props.viewApi, props.options, props.dateProfileGenerator, props.dateEnv, props.theme, props.pluginHooks, props.dispatch, props.getCurrentData, props.emitter, props.calendarApi, this.registerInteractiveComponent, this.unregisterInteractiveComponent);
1837
1844
  return (preact.createElement(internalCommon.ViewContextType.Provider, { value: viewContext },
1838
- toolbarConfig.header && (preact.createElement(Toolbar, Object.assign({ className: "fc-header-toolbar", model: toolbarConfig.header }, toolbarProps))),
1845
+ toolbarConfig.header && (preact.createElement(Toolbar, Object.assign({ className: "fc-header-toolbar", model: toolbarConfig.header, titleId: this.viewTitleId }, toolbarProps))),
1839
1846
  preact.createElement(ViewHarness, { height: viewHeight, heightLiquid: viewHeightLiquid, aspectRatio: viewAspectRatio },
1840
- this.renderView(props),
1847
+ this.renderView(props, toolbarProps.title),
1841
1848
  this.buildAppendContent()),
1842
1849
  toolbarConfig.footer && (preact.createElement(Toolbar, Object.assign({ className: "fc-footer-toolbar", model: toolbarConfig.footer }, toolbarProps)))));
1843
1850
  }
@@ -1870,9 +1877,9 @@ class CalendarContent extends internalCommon.PureComponent {
1870
1877
  let children = props.pluginHooks.viewContainerAppends.map((buildAppendContent) => buildAppendContent(props));
1871
1878
  return preact.createElement(preact.Fragment, {}, ...children);
1872
1879
  }
1873
- renderView(props) {
1880
+ renderView(props, title) {
1874
1881
  let { pluginHooks } = props;
1875
- let { viewSpec } = props;
1882
+ let { viewSpec, toolbarConfig } = props;
1876
1883
  let viewProps = {
1877
1884
  dateProfile: props.dateProfile,
1878
1885
  businessHours: props.businessHours,
@@ -1883,6 +1890,8 @@ class CalendarContent extends internalCommon.PureComponent {
1883
1890
  eventDrag: props.eventDrag,
1884
1891
  eventResize: props.eventResize,
1885
1892
  forPrint: props.forPrint,
1893
+ labelId: toolbarConfig.header && toolbarConfig.header.hasTitle ? this.viewTitleId : undefined,
1894
+ labelStr: toolbarConfig.header && toolbarConfig.header.hasTitle ? undefined : title,
1886
1895
  };
1887
1896
  let transformers = this.buildViewPropTransformers(pluginHooks.viewPropsTransformers);
1888
1897
  for (let transformer of transformers) {
@@ -2060,7 +2069,7 @@ function sliceEvents(props, allDay) {
2060
2069
  return internalCommon.sliceEventStore(props.eventStore, props.eventUiBases, props.dateProfile.activeRange, allDay ? props.nextDayThreshold : null).fg;
2061
2070
  }
2062
2071
 
2063
- const version = '7.0.0-beta.3';
2072
+ const version = '7.0.0-beta.4';
2064
2073
 
2065
2074
  exports.JsonRequestError = internalCommon.JsonRequestError;
2066
2075
  exports.Calendar = Calendar;