docs: public ObservableList<Item> getPropertySheetItems() {
          ObservableList<Item> items = FXCollections.observableArrayList();
  
          items.add(new Item() {
  
              @Override
              public Optional<ObservableValue<?>> getObservableValue() {
                  return Optional.of(calendarProperty());
              }
  
              @Override
              public Class<?> getType() {
                  return Calendar.class;
              }
  
              @Override
              public String getCategory() {
                  return ENTRY_CATEGORY;
              }
  
              @Override
              public String getName() {
                  return "Calendar"; //$NON-NLS-1$
              }
  
              @Override
              public String getDescription() {
                  return "Calendar"; //$NON-NLS-1$
              }
  
              @Override
              public Object getValue() {
                  return getCalendar();
              }
  
              @Override
              public void setValue(Object value) {
                  setCalendar((Calendar) value);
              }
          });
  
          items.add(new Item() {
  
              @Override
              public Optional<ObservableValue<?>> getObservableValue() {
                  return Optional.of(startTimeProperty());
              }
  
              @Override
              public Class<?> getType() {
                  return LocalTime.class;
              }
  
              @Override
              public String getCategory() {
                  return ENTRY_CATEGORY;
              }
  
              @Override
              public String getName() {
                  return "Start time"; //$NON-NLS-1$
              }
  
              @Override
              public String getDescription() {
                  return "Start time"; //$NON-NLS-1$
              }
  
              @Override
              public Object getValue() {
                  return getStartTime();
              }
  
              @Override
              public void setValue(Object value) {
                  changeStartTime((LocalTime) value);
              }
          });
  
          items.add(new Item() {
  
              @Override
              public Optional<ObservableValue<?>> getObservableValue() {
                  return Optional.of(endTimeProperty());
              }
  
              @Override
              public Class<?> getType() {
                  return LocalTime.class;
              }
  
              @Override
              public String getCategory() {
                  return ENTRY_CATEGORY;
              }
  
              @Override
              public String getName() {
                  return "End time"; //$NON-NLS-1$
              }
  
              @Override
              public String getDescription() {
                  return "End time"; //$NON-NLS-1$
              }
  
              @Override
              public Object getValue() {
                  return getStartTime();
              }
  
              @Override
              public void setValue(Object value) {
                  changeEndTime((LocalTime) value);
              }
          });
  
          items.add(new Item() {
  
              @Override
              public Optional<ObservableValue<?>> getObservableValue() {
                  return Optional.of(startDateProperty());
              }
  
              @Override
              public Class<?> getType() {
                  return LocalDate.class;
              }
  
              @Override
              public String getCategory() {
                  return ENTRY_CATEGORY;
              }
  
              @Override
              public String getName() {
                  return "Start date"; //$NON-NLS-1$
              }
  
              @Override
              public String getDescription() {
                  return "Start date"; //$NON-NLS-1$
              }
  
              @Override
              public Object getValue() {
                  return getStartDate();
              }
  
              @Override
              public void setValue(Object value) {
                  changeStartDate((LocalDate) value);
              }
          });
  
          items.add(new Item() {
  
              @Override
              public Optional<ObservableValue<?>> getObservableValue() {
                  return Optional.of(endDateProperty());
              }
  
              @Override
              public Class<?> getType() {
                  return LocalDate.class;
              }
  
              @Override
              public String getCategory() {
                  return ENTRY_CATEGORY;
              }
  
              @Override
              public String getName() {
                  return "End date"; //$NON-NLS-1$
              }
  
              @Override
              public String getDescription() {
                  return "End date"; //$NON-NLS-1$
              }
  
              @Override
              public Object getValue() {
                  return getEndDate();
              }
  
              @Override
              public void setValue(Object value) {
                  changeEndDate((LocalDate) value);
              }
          });
  
          items.add(new Item() {
  
              @Override
              public Optional<ObservableValue<?>> getObservableValue() {
                  return Optional.of(zoneIdProperty());
              }
  
              @Override
              public Class<?> getType() {
                  return ZoneId.class;
              }
  
              @Override
              public String getCategory() {
                  return ENTRY_CATEGORY;
              }
  
              @Override
              public String getName() {
                  return "Zone ID"; //$NON-NLS-1$
              }
  
              @Override
              public String getDescription() {
                  return "Zone ID"; //$NON-NLS-1$
              }
  
              @Override
              public Object getValue() {
                  return getZoneId();
              }
  
              @Override
              public void setValue(Object value) {
                  setZoneId((ZoneId) value);
              }
          });
  
          items.add(new Item() {
  
              @Override
              public Optional<ObservableValue<?>> getObservableValue() {
                  return Optional.of(titleProperty());
              }
  
              @Override
              public Class<?> getType() {
                  return String.class;
              }
  
              @Override
              public String getCategory() {
                  return ENTRY_CATEGORY;
              }
  
              @Override
              public String getName() {
                  return "Title"; //$NON-NLS-1$
              }
  
              @Override
              public String getDescription() {
                  return "Title"; //$NON-NLS-1$
              }
  
              @Override
              public Object getValue() {
                  return getTitle();
              }
  
              @Override
              public void setValue(Object value) {
                  setTitle((String) value);
              }
          });
  
          items.add(new Item() {
  
              @Override
              public Optional<ObservableValue<?>> getObservableValue() {
                  return Optional.of(fullDayProperty());
              }
  
              @Override
              public Class<?> getType() {
                  return Boolean.class;
              }
  
              @Override
              public String getCategory() {
                  return ENTRY_CATEGORY;
              }
  
              @Override
              public String getName() {
                  return "Full Day"; //$NON-NLS-1$
              }
  
              @Override
              public String getDescription() {
                  return "Full Day"; //$NON-NLS-1$
              }
  
              @Override
              public Object getValue() {
                  return isFullDay();
              }
  
              @Override
              public void setValue(Object value) {
                  setFullDay((boolean) value);
              }
          });
  
          items.add(new Item() {
  
              @Override
              public Optional<ObservableValue<?>> getObservableValue() {
                  return Optional.of(locationProperty());
              }
  
              @Override
              public Class<?> getType() {
                  return String.class;
              }
  
              @Override
              public String getCategory() {
                  return ENTRY_CATEGORY;
              }
  
              @Override
              public String getName() {
                  return "Location"; //$NON-NLS-1$
              }
  
              @Override
              public String getDescription() {
                  return "Geographic location (free text)"; //$NON-NLS-1$
              }
  
              @Override
              public Object getValue() {
                  return getLocation();
              }
  
              @Override
              public void setValue(Object value) {
                  setLocation((String) value);
              }
          });
  
          items.add(new Item() {
  
              @Override
              public Optional<ObservableValue<?>> getObservableValue() {
                  return Optional.of(recurrenceRuleProperty());
              }
  
              @Override
              public Class<?> getType() {
                  return String.class;
              }
  
              @Override
              public String getCategory() {
                  return ENTRY_CATEGORY;
              }
  
              @Override
              public String getName() {
                  return "Recurrence Rule"; //$NON-NLS-1$
              }
  
              @Override
              public String getDescription() {
                  return "RRULE"; //$NON-NLS-1$
              }
  
              @Override
              public Object getValue() {
                  return getRecurrenceRule();
              }
  
              @Override
              public void setValue(Object value) {
                  setRecurrenceRule((String) value);
              }
          });
  
          items.add(new Item() {
  
              @Override
              public Optional<ObservableValue<?>> getObservableValue() {
                  return Optional.of(minimumDurationProperty());
              }
  
              @Override
              public Class<?> getType() {
                  return Duration.class;
              }
  
              @Override
              public String getCategory() {
                  return ENTRY_CATEGORY;
              }
  
              @Override
              public String getName() {
                  return "Minimum Duration"; //$NON-NLS-1$
              }
  
              @Override
              public String getDescription() {
                  return "Minimum Duration"; //$NON-NLS-1$
              }
  
              @Override
              public Object getValue() {
                  return getMinimumDuration();
              }
  
              @Override
              public void setValue(Object value) {
                  setMinimumDuration((Duration) value);
              }
          });
  
          return items;
      }