<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE rfc [
<!ENTITY nbsp "&#160;">
<!ENTITY zwsp "&#8203;">
<!ENTITY nbhy "&#8209;">
<!ENTITY wj "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt"?>
<?rfc toc="yes"?>
<?rfc tocompact="yes"?>
<?rfc tocdepth="4"?>
<?rfc compact="yes"?>
<?rfc subcompact="yes"?>
<?rfc sortrefs="yes"?>
<?rfc symrefs="yes"?>
<?rfc iprnotified="no"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" category="exp" consensus="true" docName="draft-ietf-calext-jscalendar-icalendar-08" obsoletes="" updates="" submissionType="IETF" xml:lang="en" tocInclude="true" symRefs="true" sortRefs="true" version="3">
  <front>
    <title abbrev="JSCalendar">JSCalendar: Converting from and to iCalendar</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-calext-jscalendar-icalendar-08"/>
    <author initials="R." surname="Stepanek" fullname="Robert Stepanek">
      <organization>Fastmail</organization>
      <address>
        <postal>
          <street>PO Box 234</street>
          <street>Collins St West</street>
          <city>Melbourne</city>
          <code>VIC 8007</code>
          <country>Australia</country>
          <region/>
        </postal>
        <email>rsto@fastmailteam.com</email>
        <uri>https://www.fastmail.com</uri>
      </address>
    </author>
    <date year="2024" month="November" day="4"/>
    <area>Applications</area>
    <workgroup>Calendaring extensions</workgroup>
    <keyword>JSON</keyword>
    <keyword>iCalendar</keyword>
    <keyword>JSCalendar</keyword>
    <keyword>calendar</keyword>
    <keyword>events</keyword>
    <keyword>date</keyword>
    <keyword>time</keyword>
    <abstract>
      <t>This document defines how to convert calendaring information between the JSCalendar and iCalendar data formats. It considers every JSCalendar and iCalendar element registered at IANA at the time of publication. It defines conversion rules for all elements that are common to both formats, as well as how convert arbitrary or unknown JSCalendar and iCalendar elements.</t>
    </abstract>
    <note removeInRFC="true">
      <t>This document is unfinished. The term TBD stands for any unknown item.</t>
    </note>
  </front>
  <middle>
    <section>
      <name>Introduction</name>
      <section anchor="notational-conventions" numbered="true" toc="default">
        <name>Notational Conventions</name>
        <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>", "<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as described in BCP 14 <xref target="RFC2119" format="default" sectionFormat="of" derivedContent="RFC2119"/>
          <xref target="RFC8174" format="default" sectionFormat="of" derivedContent="RFC8174"/> when, and only when, they appear in all capitals, as shown here.</t>
        <t>The ABNF definitions in this document use the notations of <xref target="RFC5234"/>. ABNF rules not defined in this document either are defined in <xref target="RFC5234"/> or <xref target="RFC5545"/>.</t>
      </section>
      <section anchor="scope-and-goals">
        <name>Scope and Goals</name>
        <t>This document outlines how to convert calendaring information between the iCalendar and JSCalendar data formats.  It describes which elements are common to both, but also highlights where the two formats differ. For each common element, it defines a conversion rule and includes an example how to convert this element. All iCalendar and JSCalendar elements currently registered at IANA are in scope, but not all of these elements are common to both formats.</t>
        <t>For elements that have no counterpart in the other format, it is the goal of this document to define how to preserve them during conversion, but in general it is not the goal to achieve this by defining new standard elements. Instead, this document defines special-purpose properties to preserve arbitrary elements. These conversion-specific properties are defined in Section <xref target="ical-prop-jsprop" format="counter"/> for iCalendar, and Sections <xref target="jscal-prop-icalcomponent" format="counter"/> and <xref target="jscal-prop-icalproperty" format="counter"/> for JSCalendar. <xref target="appendix-discrepancies"/> further outlines the discrepancies between the two formats.</t>
      </section>
      <section>
        <name>How to Read the Examples</name>
        <t>Later sections contain examples that illustrate how to convert between the iCalendar and JSCalendar data formats.  The notation of these examples is such that their main points should be clear to the reader, but their contents can also be parsed for automated testing.  The authors of this document implemented a tool that extracts these examples for interoperation testing.  The following sections define the notation for such examples.</t>
        <section anchor="notation-icalendar">
          <name>iCalendar Examples</name>
          <t>An iCalendar example contains either an extract or a complete representation of iCalendar data.  It always represents an iCalendar object, even if the example only depicts non-VCALENDAR components or properties.</t>
          <t>An example that only contains iCalendar properties implicitly represents a VEVENT component that is part of a VCALENDAR component.  An example that only contains one or more non-VCALENDAR components implicitly represents a VCALENDAR component that contains them.  Implicit components are assumed to contain mandatory properties with some value, but the actual value is irrelevant for the main point of the example. Notably, if an implicit component includes an ATTENDEE but not an ORGANIZER property, then an ORGANIZER property implicitly is present, too. The same applies for an example with an ORGANIZER but no ATTENDEE property.</t>
          <t>
            <xref target="example-notation-icalendar-implicit-explicit"/> contains three examples, all of which represent the same iCalendar data.  In the first example, both the VEVENT component and VCALENDAR component are implicit.  In the second example, only the VCALENDAR component and its mandatory properties are implicit.  The third example depicts a complete VCALENDAR component, nothing is implicit.</t>
          <figure anchor="example-notation-icalendar-implicit-explicit">
            <name>Examples for implicit and explicit iCalendar component notation</name>
            <sourcecode type="text/calendar"><![CDATA[
SUMMARY:hello
]]></sourcecode>
            <sourcecode type="text/calendar"><![CDATA[
BEGIN:VEVENT
DTSTAMP:20060102T030405Z
DTSTART:20060102T030405Z
SUMMARY:hello
UID:CC0A494A-6E07-4827-8294-0752DD1ECFA4
END:VEVENT
]]></sourcecode>
            <sourcecode type="text/calendar"><![CDATA[
BEGIN:VCALENDAR
PRODID:-//FOO//bar//EN
VERSION:2.0
BEGIN:VEVENT
DTSTAMP:20060102T030405Z
DTSTART:20060102T030405Z
SUMMARY:hello
UID:CC0A494A-6E07-4827-8294-0752DD1ECFA4
END:VEVENT
END:VCALENDAR
]]></sourcecode>
          </figure>
          <t>A line containing just the value <tt>...</tt> stands for any other properties that might be present in a component but are irrelevant for this example.  This includes mandatory properties as described for implicit components.  The line <tt>...</tt> at the end of the example additionally stands for any END content lines to complete components that started with BEGIN content lines, and any of their missing mandatory properties. <xref target="example-notation-icalendar-dotdotdot"/> illustrates this as an alternative representation for the examples of <xref target="example-notation-icalendar-implicit-explicit"/>.</t>
          <figure anchor="example-notation-icalendar-dotdotdot">
            <name>Example for additional properties and component ENDs represented by <tt>...</tt>
            </name>
            <sourcecode type="text/calendar"><![CDATA[
BEGIN:VCALENDAR
BEGIN:VEVENT
SUMMARY:hello
...
]]></sourcecode>
          </figure>
          <t>A line starting with a single space represents the continuation of a folded content line (<xref target="RFC5545" section="3.1"/>).  <xref target="example-notation-icalendar-folded"/> illustrates this.</t>
          <figure anchor="example-notation-icalendar-folded">
            <name>Example for a folded content line</name>
            <sourcecode type="text/calendar"><![CDATA[
SUMMARY:he
 llo
]]></sourcecode>
          </figure>
        </section>
        <section anchor="notation-jscalendar">
          <name>JSCalendar Examples</name>
          <t>A JSCalendar example always represents a Group object, even if the example only depicts one of the Group entries or properties.</t>
          <t>JSCalendar objects are depicted either explicitly or implicitly. An explicit JSCalendar object starts and ends with braces.  An implicit JSCalendar object omits braces, it only consists of JSON name/value pairs, separated by comma.</t>
          <t>An implicit JSCalendar object is assumed to be of type Event, unless it contains the <tt>@type</tt> property with a different value.  It is assumed to contain all mandatory properties with some value; if they are not depicted, their actual value is irrelevant for the main point of the example.</t>
          <t>
            <xref target="example-notation-jscalendar-implicit-explicit"/> illustrates this with multiple examples, all of which represent the same JSCalendar data.  The first example contains an implicit JSCalendar object of type Event.  The second example contains an implicit JSCalendar object with a <tt>@type</tt> property.  The third example contains an explicit Event object but the Group object containing it is omitted.  The fourth example contains the full Group object, nothing is omitted.</t>
          <figure anchor="example-notation-jscalendar-implicit-explicit">
            <name>Examples for implicit and explicit JSCalendar object notation</name>
            <sourcecode type="json"><![CDATA[
"title": "hello"
]]></sourcecode>
            <sourcecode type="json"><![CDATA[
"@type": "Event",
"title": "hello"
]]></sourcecode>
            <sourcecode type="json"><![CDATA[
{
  "@type": "Event",
  "title": "hello",
  "start": "2006-01-02T03:04:05",
  "timeZone": "Etc/UTC",
  "uid": "CC0A494A-6E07-4827-8294-0752DD1ECFA4",
  "updated": "2006-01-02T03:04:05Z"
}
]]></sourcecode>
            <sourcecode type="json"><![CDATA[
{
  "@type": "Group",
  "entries": [
    {
      "@type": "Event",
      "title": "hello",
      "start": "2006-01-02T03:04:05",
      "timeZone": "Etc/UTC",
      "uid": "CC0A494A-6E07-4827-8294-0752DD1ECFA4",
      "updated": "2006-01-02T03:04:05Z"
    }
  ]
}
]]></sourcecode>
          </figure>
          <t>A property with name <tt>"..."</tt> and value <tt>""</tt> stands for additional properties that might be present in a JSCalendar object, but which are irrelevant for this example.  This includes mandatory properties. <xref target="example-notation-jscalendar-dotdotdot"/> illustrates this as an alternative representation for the examples of <xref target="example-notation-jscalendar-implicit-explicit"/>.</t>
          <figure anchor="example-notation-jscalendar-dotdotdot">
            <name>Example for additional properties represented by <tt>...</tt>
            </name>
            <sourcecode type="json"><![CDATA[
{
  "@type": "Event",
  "title": "hello",
  "...": ""
}
]]></sourcecode>
          </figure>
        </section>
      </section>
    </section>
    <section anchor="convert-icalendar-to-jscalendar">
      <name>Converting iCalendar to JSCalendar</name>
      <section anchor="ical-general">
        <name>General rules</name>
        <section anchor="ical-comp-vcalendar">
          <name>iCalendar Objects</name>
          <t>
            <xref target="RFC5545" section="3.4"/> allows for an iCalendar stream to contain one or more iCalendar objects.  In contrast, this specification only defines conversion for streams consisting of a single iCalendar object. Converting streams of multiple iCalendar objects is implementation-specific.  All following sections of this document use the terms "iCalendar object" and "VCALENDAR component" interchangeably.</t>
          <t>The <xref target="RFC5545" section="3.4" sectionFormat="parens">VCALENDAR component</xref> converts to a <xref target="RFC8984" section="2.3" sectionFormat="parens">Group object</xref>.</t>
          <t>Its properties convert as follows:</t>
          <table anchor="ical-comp-vcalendar-props">
            <name>Properties of the VCALENDAR component</name>
            <thead>
              <tr>
                <th>Name</th>
                <th>Reference</th>
                <th>Group property</th>
                <th>See</th>
                <th>Note</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td>CATEGORIES</td>
                <td>
                  <xref target="RFC5545" section="3.8.1.2" sectionFormat="comma"/>
                </td>
                <td>keywords</td>
                <td>
                  <xref target="ical-prop-categories"/>
                </td>
                <td/>
              </tr>
              <tr>
                <td>COLOR</td>
                <td>
                  <xref target="RFC7986" section="5.9" sectionFormat="comma"/>
                </td>
                <td>color</td>
                <td>
                  <xref target="ical-prop-color"/>
                </td>
                <td/>
              </tr>
              <tr>
                <td>CONCEPT</td>
                <td>
                  <xref target="RFC9253" section="8.1" sectionFormat="comma"/>
                </td>
                <td>categories</td>
                <td>
                  <xref target="ical-prop-concept"/>
                </td>
                <td/>
              </tr>
              <tr>
                <td>CREATED</td>
                <td>
                  <xref target="RFC5545" section="3.8.7.1" sectionFormat="comma"/>
                </td>
                <td>created</td>
                <td>
                  <xref target="ical-prop-created"/>
                </td>
                <td/>
              </tr>
              <tr>
                <td>DESCRIPTION</td>
                <td>
                  <xref target="RFC5545" section="3.8.1.5" sectionFormat="comma"/>
                </td>
                <td>description</td>
                <td>
                  <xref target="ical-prop-description"/>
                </td>
                <td/>
              </tr>
              <tr>
                <td>LAST-MODIFIED</td>
                <td>
                  <xref target="RFC5545" section="3.8.7.3" sectionFormat="comma"/>
                </td>
                <td>updated</td>
                <td>
                  <xref target="ical-prop-last-modified"/>
                </td>
                <td/>
              </tr>
              <tr>
                <td>LINK</td>
                <td>
                  <xref target="RFC9253" section="8.2" sectionFormat="comma"/>
                </td>
                <td>links</td>
                <td>
                  <xref target="ical-prop-link"/>
                </td>
                <td/>
              </tr>
              <tr>
                <td>METHOD</td>
                <td>
                  <xref target="RFC5545" section="3.7.2" sectionFormat="comma"/>
                </td>
                <td>entries/*/method</td>
                <td>
                  <xref target="ical-prop-method"/>
                </td>
                <td/>
              </tr>
              <tr>
                <td>NAME</td>
                <td>
                  <xref target="RFC7986" section="5.1" sectionFormat="comma"/>
                </td>
                <td>title</td>
                <td>
                  <xref target="ical-prop-name"/>
                </td>
                <td/>
              </tr>
              <tr>
                <td>PRODID</td>
                <td>
                  <xref target="RFC5545" section="3.7.3" sectionFormat="comma"/>
                </td>
                <td>prodId, entries/*/prodId</td>
                <td>
                  <xref target="ical-prop-prodid"/>
                </td>
                <td/>
              </tr>
              <tr>
                <td>SOURCE</td>
                <td>
                  <xref target="RFC7986" section="5.8" sectionFormat="comma"/>
                </td>
                <td>source</td>
                <td>
                  <xref target="ical-prop-source"/>
                </td>
                <td/>
              </tr>
              <tr>
                <td>UID</td>
                <td>
                  <xref target="RFC5545" section="3.8.4.7" sectionFormat="comma"/>
                </td>
                <td>uid</td>
                <td>
                  <xref target="ical-prop-uid"/>
                </td>
                <td/>
              </tr>
              <tr>
                <td>URL</td>
                <td>
                  <xref target="RFC5545" section="3.8.4.6" sectionFormat="comma"/>
                </td>
                <td>links</td>
                <td>
                  <xref target="ical-prop-url"/>
                </td>
                <td/>
              </tr>
            </tbody>
          </table>
          <t>Its components convert as follows:</t>
          <table anchor="ical-comp-vcalendar-comps">
            <name>Components of the  VCALENDAR component</name>
            <thead>
              <tr>
                <th>Name</th>
                <th>Reference</th>
                <th>Group property</th>
                <th>See</th>
                <th>Note</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td>VEVENT</td>
                <td>
                  <xref target="RFC5545" section="3.6.1" sectionFormat="comma"/>
                </td>
                <td>entries</td>
                <td>
                  <xref target="ical-comp-vevent"/>
                </td>
                <td/>
              </tr>
              <tr>
                <td>VTIMEZONE</td>
                <td>
                  <xref target="RFC5545" section="3.6.5" sectionFormat="comma"/>
                </td>
                <td>timeZones</td>
                <td>
                  <xref target="ical-comp-vtimezone"/>
                </td>
                <td/>
              </tr>
              <tr>
                <td>VTODO</td>
                <td>
                  <xref target="RFC5545" section="3.6.2" sectionFormat="comma"/>
                </td>
                <td>entries</td>
                <td>
                  <xref target="ical-comp-vtodo"/>
                </td>
                <td/>
              </tr>
            </tbody>
          </table>
          <t>Other properties or components <bcp14>MAY</bcp14> be converted to the <xref target="jscal-prop-icalcomponent">iCalComponent property</xref> of the Group object.</t>
          <t>The following example illustrates how to convert the VCALENDAR component:</t>
          <figure anchor="test-ical-comp-vcalendar">
            <name>Converting the VCALENDAR component</name>
            <sourcecode type="text/calendar"><![CDATA[
BEGIN:VCALENDAR
UID:41aa02b6-42d0-4f45-8cb4-8b5075be2e14
BEGIN:VEVENT
...
]]></sourcecode>
            <sourcecode type="json"><![CDATA[
{
  "...": "",
  "@type": "Group",
  "entries": [
    {
      "...": "",
      "@type": "Event"
    }
  ],
  "uid": "41aa02b6-42d0-4f45-8cb4-8b5075be2e14"
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="ical-recurring-components">
          <name>Recurring Components</name>
          <t>Components in an iCalendar object generally convert to distinct JSCalendar objects. For example, two VEVENT components with different UID property values in the same iCalendar object convert to two separate Event objects in the Group object's entries. This rule does not apply to recurrence overrides, defined as follows.</t>
          <t>A VEVENT (or VTODO) component is a recurrence override if it has the RECURRENCE-ID property set, and the iCalendar object contains a VEVENT (or VTODO) component that does not have the RECURRENCE-ID but the RRULE property set, and the UID property values of the two components are equal. The component without the RECURRENCE-ID property is in that case referred to as the "main component".</t>
          <t>The main component converts to an entry in the Group object's entries property.</t>
          <t>The recurrence override converts to the recurrenceOverrides property of the converted main component. Its RECURRENCE-ID property value converts to the key in the recurrenceOverrides property. The value of the recurrenceOverrides property at that key is the PatchObject that transform the converted main component into the converted recurrence override. The recurrenceId and recurrenceIdTimeZone properties <bcp14>MUST NOT</bcp14> be set in the PatchObject.</t>
          <t>The following example illustrates how to convert a main component and its recurrence override:</t>
          <figure anchor="test-ical-comp-vevent-recurrence-overrides">
            <name>Converting VEVENT recurrence overrides</name>
            <sourcecode type="text/calendar"><![CDATA[
BEGIN:VCALENDAR
BEGIN:VEVENT
UID:F4257E1D-5461-4EF6-840F-9DFC653EB559
RRULE:FREQ=DAILY
DTSTART;TZID=Europe/Berlin:20240101T140000
...
END:VEVENT
BEGIN:VEVENT
UID:F4257E1D-5461-4EF6-840F-9DFC653EB559
RECURRENCE-ID;TZID=Europe/Berlin:20240202T140000
DTSTART;TZID=Europe/Berlin:20240202T160000
...
END:VEVENT
END:VCALENDAR
]]></sourcecode>
            <sourcecode type="json"><![CDATA[
{
  "...": "",
  "@type": "Group",
  "entries": [
    {
      "...": "",
      "@type": "Event",
      "recurrenceOverrides": {
        "2024-02-02T14:00:00": {
          "start": "2024-02-02T16:00:00"
        }
      },
      "recurrenceRules": [
        {
          "@type": "RecurrenceRule",
          "frequency": "daily"
        }
      ],
      "start": "2024-01-01T14:00:00",
      "timeZone": "Europe/Berlin",
      "uid": "F4257E1D-5461-4EF6-840F-9DFC653EB559"
    }
  ]
}
]]></sourcecode>
          </figure>
          <t>A VEVENT (or VTODO) component is a stand-alone recurrence instance if it has the RECURRENCE-ID property set and the iCalendar object does not contain its related main component. Each stand-alone recurrence instance converts to a distinct Event (or Task) object in the Group object's entries property.  The recurrenceId property <bcp14>MUST</bcp14> be set, the recurrenceIdTimeZone property <bcp14>MUST</bcp14> be set if not "null". The converted objects sort in order of appearance of the iCalendar components.</t>
          <t>The following example illustrates how to convert stand-alone recurrence instances:</t>
          <figure anchor="test-ical-comp-vevent-recurrence-instances">
            <name>Converting VEVENT recurrence instances</name>
            <sourcecode type="text/calendar"><![CDATA[
BEGIN:VCALENDAR
BEGIN:VEVENT
UID:F4257E1D-5461-4EF6-840F-9DFC653EB559
RECURRENCE-ID;TZID=Europe/Berlin:20240202T140000
DTSTART;TZID=Europe/Berlin:20240202T160000
...
END:VEVENT
BEGIN:VEVENT
UID:F4257E1D-5461-4EF6-840F-9DFC653EB559
RECURRENCE-ID;TZID=Europe/Berlin:20240103T140000
DTSTART;TZID=Europe/Berlin:20240103T160000
...
END:VEVENT
END:VCALENDAR
]]></sourcecode>
            <sourcecode type="json"><![CDATA[
{
  "...": "",
  "@type": "Group",
  "entries": [
    {
      "...": "",
      "@type": "Event",
      "recurrenceId": "2024-02-02T14:00:00",
      "recurrenceIdTimeZone": "2024-02-02T14:00:00",
      "start": "2024-02-02T16:00:00",
      "timeZone": "Europe/Berlin",
      "uid": "F4257E1D-5461-4EF6-840F-9DFC653EB559"
    },
    {
      "...": "",
      "@type": "Event",
      "recurrenceId": "2024-01-03T14:00:00",
      "recurrenceIdTimeZone": "2024-02-02T14:00:00",
      "start": "2024-01-03T14:00:00",
      "timeZone": "Europe/Berlin",
      "uid": "F4257E1D-5461-4EF6-840F-9DFC653EB559"
    }
  ]
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="generating-jscalendar-ids">
          <name>JSCalendar Ids</name>
          <t>JSCalendar generally uses JSON objects to represent a collection of same-typed values. The keys are of type <xref target="RFC8984" section="1.4.1" sectionFormat="parens">Id</xref>, the values are JSCalendar object types.  If an iCalendar element converts to a value in such a collection, then an implementation needs to choose an identifier as key.</t>
          <t>This document defines the new <xref target="ical-param-jscalid">JSCALID</xref> parameter and <xref target="ical-prop-jscalid">JSCALID property</xref>, which allow to set a JSCalendar Id value when converting from JSCalendar to iCalendar.  If they are set on a property or the component, then its value <bcp14>MUST</bcp14> be used as key when converting that element from iCalendar to JSCalendar.  If no such parameter or property is set, then an implementation is free to choose any identifier, as long the following requirements are met:</t>
          <ul>
            <li>The identifier <bcp14>MUST</bcp14> be a valid Id value.</li>
            <li>The identifiers for the exact same iCalendar element <bcp14>MUST</bcp14> stay the same, irrespective of the order in which components, properties and parameters are processed.</li>
          </ul>
        </section>
        <section anchor="ical-timezone-identifiers">
          <name>Timezone identifiers</name>
          <t>Converting temporal properties such as DTSTART, DTEND, and RECURRENCE-ID requires to not only determine the date and time of the property value, but also the timezone it references.</t>
          <t>If the property value data type is <xref target="RFC5545" section="3.3.4" sectionFormat="parens">DATE</xref> or  <xref target="RFC5545" section="3.3.5" sectionFormat="parens">DATE-TIME in FORM #1: DATE WITH LOCAL TIME</xref> then the timezone identifier is the JSON null value in JSCalendar.</t>
          <t>If the property value data type is <xref target="RFC5545" section="3.3.5" sectionFormat="parens">DATE-TIME in FORM #2: DATE WITH UTC TIME</xref> then the timezone identifier is the string "Etc/UTC" in JSCalendar.</t>
          <t>If the property value data type is <xref target="RFC5545" section="3.3.5" sectionFormat="parens">DATE-TIME in FORM #3: DATE WITH LOCAL TIME AND TIME ZONE REFERENCE</xref> then the timezone identifier is determined by the TZID parameter value:</t>
          <t>If the TZID parameter value is equal to a name in the <xref target="TZDB">IANA Time Zone Database</xref> then the timezone identifier is that verbatim name.</t>
          <t>If the TZID parameter value is unequal to an IANA timezone name then implementations <bcp14>MAY</bcp14> determine the name of an IANA timezone which has the same timezone rules over the timespan of the calendar object. Otherwise, the non-IANA timezone identifier is represented in JSCalendar as a string starting with the / (SLASH) character, followed by the TZID parameter value. The corresponding VTIMEZONE <bcp14>MUST</bcp14> be converted to the timeZones property with the prefixed identifier as key. See <xref target="test-ical-comp-vtimezone"/> for an example.</t>
        </section>
        <section anchor="convert-date-and-date-time">
          <name>DATE and DATE-TIME</name>
          <t>iCalendar provides the DATE and DATE-TIME value types to distinguish date-only from date-time values. JSCalendar only supports date-time values.  A property value of type DATE-TIME converts to either a LocalDateTime or UTCDateTime, depending on the JSCalendar property definition. A DATE value type converts to a LocalDateTime with zero time.</t>
        </section>
      </section>
      <section anchor="ical-components">
        <name>Components</name>
        <section anchor="ical-comp-participant">
          <name>PARTICIPANT</name>
          <t>The <xref target="RFC9073" section="7.1" sectionFormat="parens">PARTICIPANT component</xref> converts to a <xref target="RFC8984" section="4.4.6" sectionFormat="parens">Participant object</xref>.</t>
          <t>Its properties convert as follows:</t>
          <table anchor="ical-comp-participant-props">
            <name>Properties of the PARTICIPANT component</name>
            <thead>
              <tr>
                <th>Name</th>
                <th>Reference</th>
                <th>Participant property</th>
                <th>See</th>
                <th>Note</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td>ATTACH</td>
                <td>
                  <xref target="RFC5545" section="3.8.1.1" sectionFormat="comma"/>
                </td>
                <td>links</td>
                <td>
                  <xref target="ical-prop-attach"/>
                </td>
                <td/>
              </tr>
              <tr>
                <td>CALENDAR-ADDRESS</td>
                <td>
                  <xref target="RFC9073" section="6.4" sectionFormat="comma"/>
                </td>
                <td>calendarAddress</td>
                <td>
                  <xref target="ical-prop-calendar-address"/>
                </td>
                <td/>
              </tr>
              <tr>
                <td>COMMENT</td>
                <td>
                  <xref target="RFC5545" section="3.8.1.4" sectionFormat="comma"/>
                </td>
                <td>participationComment</td>
                <td>
                  <xref target="ical-prop-comment"/>
                </td>
                <td>Only one comment supported</td>
              </tr>
              <tr>
                <td>DESCRIPTION</td>
                <td>
                  <xref target="RFC5545" section="3.8.1.5" sectionFormat="comma"/>
                </td>
                <td>description</td>
                <td>
                  <xref target="ical-prop-description"/>
                </td>
                <td/>
              </tr>
              <tr>
                <td>DTSTAMP</td>
                <td>
                  <xref target="RFC5545" section="3.8.7.2" sectionFormat="comma"/>
                </td>
                <td>scheduleUpdated</td>
                <td>
                  <xref target="ical-prop-dtstamp"/>
                </td>
                <td/>
              </tr>
              <tr>
                <td>GEO</td>
                <td>
                  <xref target="RFC5545" section="3.8.1.6" sectionFormat="comma"/>
                </td>
                <td>locations</td>
                <td>
                  <xref target="ical-prop-geo"/>
                </td>
                <td/>
              </tr>
              <tr>
                <td>LINK</td>
                <td>
                  <xref target="RFC9253" section="8.2" sectionFormat="comma"/>
                </td>
                <td>links</td>
                <td>
                  <xref target="ical-prop-link"/>
                </td>
                <td/>
              </tr>
              <tr>
                <td>LOCATION</td>
                <td>
                  <xref target="RFC5545" section="3.8.1.7" sectionFormat="comma"/>
                </td>
                <td>locations</td>
                <td>
                  <xref target="ical-prop-location"/>
                </td>
                <td/>
              </tr>
              <tr>
                <td>PARTICIPANT-TYPE</td>
                <td>
                  <xref target="RFC9073" section="6.2" sectionFormat="comma"/>
                </td>
                <td>roles</td>
                <td>
                  <xref target="ical-prop-participant-type"/>
                </td>
                <td/>
              </tr>
              <tr>
                <td>SEQUENCE</td>
                <td>
                  <xref target="RFC5545" section="3.8.7.4" sectionFormat="comma"/>
                </td>
                <td>scheduleSequence</td>
                <td>
                  <xref target="ical-prop-sequence"/>
                </td>
                <td/>
              </tr>
              <tr>
                <td>STRUCTURED-DATA</td>
                <td>
                  <xref target="RFC9073" section="6.6" sectionFormat="comma"/>
                </td>
                <td>links</td>
                <td>
                  <xref target="ical-prop-structured-data"/>
                </td>
                <td/>
              </tr>
              <tr>
                <td>SUMMARY</td>
                <td>
                  <xref target="RFC5545" section="3.8.1.12" sectionFormat="comma"/>
                </td>
                <td>name</td>
                <td>
                  <xref target="ical-prop-summary"/>
                </td>
                <td/>
              </tr>
              <tr>
                <td>URL</td>
                <td>
                  <xref target="RFC5545" section="3.8.4.6" sectionFormat="comma"/>
                </td>
                <td>links</td>
                <td>
                  <xref target="ical-prop-url"/>
                </td>
                <td/>
              </tr>
            </tbody>
          </table>
          <t>Its components convert as follows:</t>
          <table anchor="ical-comp-participant-comps">
            <name>Components of the  PARTICIPANT component</name>
            <thead>
              <tr>
                <th>Name</th>
                <th>Reference</th>
                <th>Participant property</th>
                <th>See</th>
                <th>Note</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td>VLOCATION</td>
                <td>
                  <xref target="RFC9073" section="7.2" sectionFormat="comma"/>
                </td>
                <td>locations</td>
                <td>
                  <xref target="ical-comp-vlocation"/>
                </td>
                <td/>
              </tr>
            </tbody>
          </table>
          <t>Other properties or components <bcp14>MAY</bcp14> be converted to the <xref target="jscal-prop-icalcomponent">iCalComponent property</xref> of the Participant object. This includes mandatory properties such as <xref target="RFC5545" section="3.8.4.7" sectionFormat="parens">UID</xref>.</t>
          <t>The following example illustrates how to convert the PARTICIPANT component:</t>
          <figure anchor="test-ical-comp-participant">
            <name>Converting the PARTICIPANT component</name>
            <sourcecode type="text/calendar"><![CDATA[
BEGIN:VEVENT
BEGIN:PARTICIPANT
UID:47AD2E1C-49D4-45DF-BD83-8398ACC7D8E2
STRUCTURED-DATA;VALUE=URI:
 http://dir.example.com/vcard/contacts/contact1.vcf
PARTICIPANT-TYPE:CONTACT
DESCRIPTION:A contact
END:PARTICIPANT
...
]]></sourcecode>
            <sourcecode type="json"><![CDATA[
{
  "...": "",
  "@type": "Event",
  "participants": {
    "p32": {
      "@type": "Participant",
      "description": "A contact",
      "iCalComponent": {
        "name": "participant",
        "properties": [
          [
            "uid",
            {},
            "text",
            "47AD2E1C-49D4-45DF-BD83-8398ACC7D8E2"
          ]
        ]
      },
      "links": {
        "l4": {
          "@type": "Link",
          "href": "http://dir.example.com/vcard/contacts/contact1.vcf"
        }
      },
      "roles": {
        "contact": true
      }
    }
  }
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="ical-comp-valarm">
          <name>VALARM</name>
          <t>The <xref target="RFC5545" section="3.6.6" sectionFormat="parens">VALARM component</xref> converts to a <xref target="RFC8984" section="4.5.2" sectionFormat="parens">Alert object</xref>.</t>
          <t>Its properties convert as follows:</t>
          <table anchor="ical-comp-valarm-props">
            <name>Properties of the VALARM component</name>
            <thead>
              <tr>
                <th>Name</th>
                <th>Reference</th>
                <th>Alert property</th>
                <th>See</th>
                <th>Note</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td>ACKNOWLEDGED</td>
                <td>
                  <xref target="RFC9074" section="6.1" sectionFormat="comma"/>
                </td>
                <td>acknowledged</td>
                <td>
                  <xref target="ical-prop-acknowledged"/>
                </td>
                <td/>
              </tr>
              <tr>
                <td>ACTION</td>
                <td>
                  <xref target="RFC5545" section="3.8.6.1" sectionFormat="comma"/>
                </td>
                <td>action</td>
                <td>
                  <xref target="ical-prop-action"/>
                </td>
                <td>Only if ACTION is EMAIL or DISPLAY.</td>
              </tr>
              <tr>
                <td>RELATED-TO</td>
                <td>
                  <xref target="RFC5545" section="3.8.4.5" sectionFormat="comma"/>
                </td>
                <td>relatedTo</td>
                <td>
                  <xref target="ical-prop-related-to"/>
                </td>
                <td/>
              </tr>
              <tr>
                <td>TRIGGER</td>
                <td>
                  <xref target="RFC5545" section="3.8.6.3" sectionFormat="comma"/>
                </td>
                <td>trigger</td>
                <td>
                  <xref target="ical-prop-trigger"/>
                </td>
                <td/>
              </tr>
            </tbody>
          </table>
          <t>Other properties or components <bcp14>MAY</bcp14> be converted to the <xref target="jscal-prop-icalcomponent">iCalComponent property</xref> of the Alert object. This includes mandatory properties such as <xref target="RFC5545" section="3.8.4.1" sectionFormat="parens">ATTENDEE</xref>, <xref target="RFC5545" section="3.8.1.5" sectionFormat="parens">DESCRIPTION</xref>, or <xref target="RFC5545" section="3.8.1.12" sectionFormat="parens">SUMMARY</xref>.</t>
          <t>The following example illustrates how to convert the VALARM component:</t>
          <figure anchor="test-ical-comp-valarm">
            <name>Converting the VALARM component</name>
            <sourcecode type="text/calendar"><![CDATA[
BEGIN:VEVENT
BEGIN:VALARM
TRIGGER:-PT30M
ACTION:DISPLAY
DESCRIPTION:Breakfast meeting
END:VALARM
...
]]></sourcecode>
            <sourcecode type="json"><![CDATA[
{
  "...": "",
  "@type": "Event",
  "alerts": {
    "a8": {
      "@type": "Alert",
      "iCalComponent": {
        "name": "valarm",
        "properties": [
          [
            "description",
            {},
            "text",
            "Breakfast meeting"
          ]
        ]
      },
      "trigger": {
        "@type": "OffsetTrigger",
        "offset": "-PT30M"
      },
      "action": "display"
    }
  }
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="ical-comp-vevent">
          <name>VEVENT</name>
          <t>The <xref target="RFC5545" section="3.6.1" sectionFormat="parens">VEVENT component</xref> converts to a <xref target="RFC8984" section="2.1" sectionFormat="parens">Event object</xref>.</t>
          <t>VEVENT components with different UID property values in the same iCalendar object convert to different entries in the Group.  They sort in the same order as in the VCALENDAR component.</t>
          <t>Its properties convert as follows:</t>
          <table anchor="ical-comp-vevent-props">
            <name>Properties of the VEVENT component</name>
            <thead>
              <tr>
                <th>Name</th>
                <th>Reference</th>
                <th>Event property</th>
                <th>See</th>
                <th>Note</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td>ATTACH</td>
                <td>
                  <xref target="RFC5545" section="3.8.1.1" sectionFormat="comma"/>
                </td>
                <td>links</td>
                <td>
                  <xref target="ical-prop-attach"/>
                </td>
                <td/>
              </tr>
              <tr>
                <td>ATTENDEE</td>
                <td>
                  <xref target="RFC5545" section="3.8.4.1" sectionFormat="comma"/>
                </td>
                <td>participants</td>
                <td>
                  <xref target="ical-prop-attendee"/>
                </td>
                <td/>
              </tr>
              <tr>
                <td>CATEGORIES</td>
                <td>
                  <xref target="RFC5545" section="3.8.1.2" sectionFormat="comma"/>
                </td>
                <td>keywords</td>
                <td>
                  <xref target="ical-prop-categories"/>
                </td>
                <td/>
              </tr>
              <tr>
                <td>CLASS</td>
                <td>
                  <xref target="RFC5545" section="3.8.1.3" sectionFormat="comma"/>
                </td>
                <td>privacy</td>
                <td>
                  <xref target="ical-prop-class"/>
                </td>
                <td/>
              </tr>
              <tr>
                <td>COLOR</td>
                <td>
                  <xref target="RFC7986" section="5.9" sectionFormat="comma"/>
                </td>
                <td>color</td>
                <td>
                  <xref target="ical-prop-color"/>
                </td>
                <td/>
              </tr>
              <tr>
                <td>COMMENT</td>
                <td>
                  <xref target="RFC5545" section="3.8.1.4" sectionFormat="comma"/>
                </td>
                <td>participants/*/participationComment</td>
                <td>
                  <xref target="ical-prop-comment"/>
                </td>
                <td/>
              </tr>
              <tr>
                <td>CONCEPT</td>
                <td>
                  <xref target="RFC9253" section="8.1" sectionFormat="comma"/>
                </td>
                <td>categories</td>
                <td>
                  <xref target="ical-prop-concept"/>
                </td>
                <td/>
              </tr>
              <tr>
                <td>CONFERENCE</td>
                <td>
                  <xref target="RFC7986" section="5.11" sectionFormat="comma"/>
                </td>
                <td>virtualLocations</td>
                <td>
                  <xref target="ical-prop-conference"/>
                </td>
                <td/>
              </tr>
              <tr>
                <td>CREATED</td>
                <td>
                  <xref target="RFC5545" section="3.8.7.1" sectionFormat="comma"/>
                </td>
                <td>created</td>
                <td>
                  <xref target="ical-prop-created"/>
                </td>
                <td/>
              </tr>
              <tr>
                <td>DESCRIPTION</td>
                <td>
                  <xref target="RFC5545" section="3.8.1.5" sectionFormat="comma"/>
                </td>
                <td>description</td>
                <td>
                  <xref target="ical-prop-description"/>
                </td>
                <td/>
              </tr>
              <tr>
                <td>DTEND</td>
                <td>
                  <xref target="RFC5545" section="3.8.2.2" sectionFormat="comma"/>
                </td>
                <td>duration</td>
                <td>
                  <xref target="ical-prop-dtend"/>
                </td>
                <td/>
              </tr>
              <tr>
                <td>DTSTAMP</td>
                <td>
                  <xref target="RFC5545" section="3.8.7.2" sectionFormat="comma"/>
                </td>
                <td>updated, scheduleUpdated</td>
                <td>
                  <xref target="ical-prop-dtstamp"/>
                </td>
                <td/>
              </tr>
              <tr>
                <td>DTSTART</td>
                <td>
                  <xref target="RFC5545" section="3.8.2.4" sectionFormat="comma"/>
                </td>
                <td>start</td>
                <td>
                  <xref target="ical-prop-dtstart"/>
                </td>
                <td/>
              </tr>
              <tr>
                <td>DURATION</td>
                <td>
                  <xref target="RFC5545" section="3.8.2.5" sectionFormat="comma"/>
                </td>
                <td>duration</td>
                <td>
                  <xref target="ical-prop-duration"/>
                </td>
                <td/>
              </tr>
              <tr>
                <td>EXDATE</td>
                <td>
                  <xref target="RFC5545" section="3.8.5.1" sectionFormat="comma"/>
                </td>
                <td>recurrenceOverrides</td>
                <td>
                  <xref target="ical-prop-exdate"/>
                </td>
                <td/>
              </tr>
              <tr>
                <td>EXRULE</td>
                <td>
                  <xref target="RFC2445" section="4.8.5.2" sectionFormat="comma"/>
                </td>
                <td>excludedRecurrenceRules</td>
                <td>
                  <xref target="ical-prop-exrule"/>
                </td>
                <td/>
              </tr>
              <tr>
                <td>GEO</td>
                <td>
                  <xref target="RFC5545" section="3.8.1.6" sectionFormat="comma"/>
                </td>
                <td>locations</td>
                <td>
                  <xref target="ical-prop-geo"/>
                </td>
                <td/>
              </tr>
              <tr>
                <td>IMAGE</td>
                <td>
                  <xref target="RFC7986" section="5.10" sectionFormat="comma"/>
                </td>
                <td>links</td>
                <td>
                  <xref target="ical-prop-image"/>
                </td>
                <td/>
              </tr>
              <tr>
                <td>LAST-MODIFIED</td>
                <td>
                  <xref target="RFC5545" section="3.8.7.3" sectionFormat="comma"/>
                </td>
                <td>updated</td>
                <td>
                  <xref target="ical-prop-last-modified"/>
                </td>
                <td/>
              </tr>
              <tr>
                <td>LINK</td>
                <td>
                  <xref target="RFC9253" section="8.2" sectionFormat="comma"/>
                </td>
                <td>links</td>
                <td>
                  <xref target="ical-prop-link"/>
                </td>
                <td/>
              </tr>
              <tr>
                <td>LOCATION</td>
                <td>
                  <xref target="RFC5545" section="3.8.1.7" sectionFormat="comma"/>
                </td>
                <td>locations</td>
                <td>
                  <xref target="ical-prop-location"/>
                </td>
                <td/>
              </tr>
              <tr>
                <td>ORGANIZER</td>
                <td>
                  <xref target="RFC5545" section="3.8.4.3" sectionFormat="comma"/>
                </td>
                <td>replyTo</td>
                <td>
                  <xref target="ical-prop-organizer"/>
                </td>
                <td/>
              </tr>
              <tr>
                <td>PRIORITY</td>
                <td>
                  <xref target="RFC5545" section="3.8.1.9" sectionFormat="comma"/>
                </td>
                <td>priority</td>
                <td>
                  <xref target="ical-prop-priority"/>
                </td>
                <td/>
              </tr>
              <tr>
                <td>RDATE</td>
                <td>
                  <xref target="RFC5545" section="3.8.5.2" sectionFormat="comma"/>
                </td>
                <td>recurrenceOverrides</td>
                <td>
                  <xref target="ical-prop-rdate"/>
                </td>
                <td/>
              </tr>
              <tr>
                <td>RECURRENCE-ID</td>
                <td>
                  <xref target="RFC5545" section="3.8.4.4" sectionFormat="comma"/>
                </td>
                <td>recurrenceId</td>
                <td>
                  <xref target="ical-prop-recurrence-id"/>
                </td>
                <td/>
              </tr>
              <tr>
                <td>RELATED-TO</td>
                <td>
                  <xref target="RFC5545" section="3.8.4.5" sectionFormat="comma"/>
                </td>
                <td>relatedTo</td>
                <td>
                  <xref target="ical-prop-related-to"/>
                </td>
                <td/>
              </tr>
              <tr>
                <td>REQUEST-STATUS</td>
                <td>
                  <xref target="RFC5545" section="3.8.8.3" sectionFormat="comma"/>
                </td>
                <td>requestStatus</td>
                <td>
                  <xref target="ical-prop-request-status"/>
                </td>
                <td/>
              </tr>
              <tr>
                <td>RRULE</td>
                <td>
                  <xref target="RFC5545" section="3.8.5.3" sectionFormat="comma"/>
                </td>
                <td>recurrenceRules</td>
                <td>
                  <xref target="ical-prop-rrule"/>
                </td>
                <td/>
              </tr>
              <tr>
                <td>SEQUENCE</td>
                <td>
                  <xref target="RFC5545" section="3.8.7.4" sectionFormat="comma"/>
                </td>
                <td>sequence</td>
                <td>
                  <xref target="ical-prop-sequence"/>
                </td>
                <td/>
              </tr>
              <tr>
                <td>STATUS</td>
                <td>
                  <xref target="RFC5545" section="3.8.1.11" sectionFormat="comma"/>
                </td>
                <td>status</td>
                <td>
                  <xref target="ical-prop-status"/>
                </td>
                <td/>
              </tr>
              <tr>
                <td>STRUCTURED-DATA</td>
                <td>
                  <xref target="RFC9073" section="6.6" sectionFormat="comma"/>
                </td>
                <td>links</td>
                <td>
                  <xref target="ical-prop-structured-data"/>
                </td>
                <td/>
              </tr>
              <tr>
                <td>STYLED-DESCRIPTION</td>
                <td>
                  <xref target="RFC9073" section="6.5" sectionFormat="comma"/>
                </td>
                <td>description</td>
                <td>
                  <xref target="ical-prop-styled-description"/>
                </td>
                <td/>
              </tr>
              <tr>
                <td>SUMMARY</td>
                <td>
                  <xref target="RFC5545" section="3.8.1.12" sectionFormat="comma"/>
                </td>
                <td>title</td>
                <td>
                  <xref target="ical-prop-summary"/>
                </td>
                <td/>
              </tr>
              <tr>
                <td>TRANSP</td>
                <td>
                  <xref target="RFC5545" section="3.8.2.7" sectionFormat="comma"/>
                </td>
                <td>freeBusyStatus</td>
                <td>
                  <xref target="ical-prop-transp"/>
                </td>
                <td/>
              </tr>
              <tr>
                <td>UID</td>
                <td>
                  <xref target="RFC5545" section="3.8.4.7" sectionFormat="comma"/>
                </td>
                <td>uid</td>
                <td>
                  <xref target="ical-prop-uid"/>
                </td>
                <td/>
              </tr>
              <tr>
                <td>URL</td>
                <td>
                  <xref target="RFC5545" section="3.8.4.6" sectionFormat="comma"/>
                </td>
                <td>links</td>
                <td>
                  <xref target="ical-prop-url"/>
                </td>
                <td/>
              </tr>
            </tbody>
          </table>
          <t>Its components convert as follows:</t>
          <table anchor="ical-comp-vevent-comps">
            <name>Components of the  VEVENT component</name>
            <thead>
              <tr>
                <th>Name</th>
                <th>Reference</th>
                <th>Event property</th>
                <th>See</th>
                <th>Note</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td>VALARM</td>
                <td>
                  <xref target="RFC5545" section="3.6.6" sectionFormat="comma"/>
                </td>
                <td>alerts</td>
                <td>
                  <xref target="ical-comp-valarm"/>
                </td>
                <td/>
              </tr>
            </tbody>
          </table>
          <t>Other properties or components <bcp14>MAY</bcp14> be converted to the <xref target="jscal-prop-icalcomponent">iCalComponent property</xref> of the Event object.</t>
          <t>The following example illustrates how to convert the VEVENT component:</t>
          <figure anchor="test-ical-comp-vevent">
            <name>Converting the VEVENT component</name>
            <sourcecode type="text/calendar"><![CDATA[
BEGIN:VCALENDAR
BEGIN:VEVENT
UID:DE935D01-3DF7-4201-B61A-D77D05C8B21A
DTSTART:20060102T030405Z
...
END:VEVENT
BEGIN:VEVENT
UID:60BE3D6E-6383-473A-BCF1-3C43EA1FA571
...
END:VEVENT
END:VCALENDAR
]]></sourcecode>
            <sourcecode type="json"><![CDATA[
{
  "...": "",
  "@type": "Group",
  "entries": [
    {
      "@type": "Event",
      "showWithoutTime": false,
      "start": "2006-01-02T03:04:05",
      "timeZone": "Etc/UTC",
      "uid": "DE935D01-3DF7-4201-B61A-D77D05C8B21A",
      "...": ""
    },
    {
      "@type": "Event",
      "uid": "60BE3D6E-6383-473A-BCF1-3C43EA1FA571",
      "...": ""
    }
  ]
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="ical-comp-vlocation">
          <name>VLOCATION</name>
          <t>The <xref target="RFC9073" section="7.2" sectionFormat="parens">VLOCATION component</xref> converts to a <xref target="RFC8984" section="4.2.5" sectionFormat="parens">Location object</xref>.</t>
          <t>Its properties convert as follows:</t>
          <table anchor="ical-comp-vlocation-props">
            <name>Properties of the VLOCATION component</name>
            <thead>
              <tr>
                <th>Name</th>
                <th>Reference</th>
                <th>Location property</th>
                <th>See</th>
                <th>Note</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td>ATTACH</td>
                <td>
                  <xref target="RFC5545" section="3.8.1.1" sectionFormat="comma"/>
                </td>
                <td>links</td>
                <td>
                  <xref target="ical-prop-attach"/>
                </td>
                <td/>
              </tr>
              <tr>
                <td>DESCRIPTION</td>
                <td>
                  <xref target="RFC5545" section="3.8.1.5" sectionFormat="comma"/>
                </td>
                <td>description</td>
                <td>
                  <xref target="ical-prop-description"/>
                </td>
                <td/>
              </tr>
              <tr>
                <td>GEO</td>
                <td>
                  <xref target="RFC5545" section="3.8.1.6" sectionFormat="comma"/>
                </td>
                <td>coordinates</td>
                <td>
                  <xref target="ical-prop-geo"/>
                </td>
                <td/>
              </tr>
              <tr>
                <td>IMAGE</td>
                <td>
                  <xref target="RFC7986" section="5.10" sectionFormat="comma"/>
                </td>
                <td>links</td>
                <td>
                  <xref target="ical-prop-image"/>
                </td>
                <td/>
              </tr>
              <tr>
                <td>LINK</td>
                <td>
                  <xref target="RFC9253" section="8.2" sectionFormat="comma"/>
                </td>
                <td>links</td>
                <td>
                  <xref target="ical-prop-link"/>
                </td>
                <td/>
              </tr>
              <tr>
                <td>LOCATION-TYPE</td>
                <td>
                  <xref target="RFC9073" section="6.1" sectionFormat="comma"/>
                </td>
                <td>locationTypes</td>
                <td>
                  <xref target="ical-prop-location-type"/>
                </td>
                <td/>
              </tr>
              <tr>
                <td>NAME</td>
                <td>
                  <xref target="RFC7986" section="5.1" sectionFormat="comma"/>
                </td>
                <td>name</td>
                <td>
                  <xref target="ical-prop-name"/>
                </td>
                <td/>
              </tr>
              <tr>
                <td>STRUCTURED-DATA</td>
                <td>
                  <xref target="RFC9073" section="6.6" sectionFormat="comma"/>
                </td>
                <td>links</td>
                <td>
                  <xref target="ical-prop-structured-data"/>
                </td>
                <td/>
              </tr>
            </tbody>
          </table>
          <t>Other properties or components <bcp14>MAY</bcp14> be converted to the <xref target="jscal-prop-icalcomponent">iCalComponent property</xref> of the Location object. This includes mandatory properties such as <xref target="RFC5545" section="3.8.4.7" sectionFormat="parens">UID</xref>.</t>
          <t>The following example illustrates how to convert the VLOCATION component:</t>
          <figure anchor="test-ical-comp-vlocation">
            <name>Converting the VLOCATION component</name>
            <sourcecode type="text/calendar"><![CDATA[
BEGIN:VLOCATION
UID:4954DC22-5BD6-4E98-844D-0302982F54AC
NAME:The venue
STRUCTURED-DATA;VALUE=URI:
 http://dir.example.com/venues/big-hall.vcf
END:VLOCATION
]]></sourcecode>
            <sourcecode type="json"><![CDATA[
"locations": {
  "e4": {
    "@type": "Location",
    "name": "The venue",
    "links": {
      "21": {
        "@type": "Link",
        "href": "http://dir.example.com/venues/big-hall.vcf",
        "iCalProperty": {
          "@type": "ICalProperty",
          "name": "structured-data"
        }
      }
    },
    "iCalComponent": {
      "@type": "ICalComponent",
      "properties": [
        [
          "uid",
          {},
          "text",
          "4954DC22-5BD6-4E98-844D-0302982F54AC"
        ]
      ]
    }
  }
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="ical-comp-vresource">
          <name>VRESOURCE</name>
          <t>The <xref target="RFC9073" section="7.3" sectionFormat="parens">VRESOURCE component</xref> converts to a <xref target="RFC8984" section="4.4.6" sectionFormat="parens">Participant object</xref>.</t>
          <t>Its properties convert as follows:</t>
          <table anchor="ical-comp-vresource-props">
            <name>Properties of the VRESOURCE component</name>
            <thead>
              <tr>
                <th>Name</th>
                <th>Reference</th>
                <th>Participant property</th>
                <th>See</th>
                <th>Note</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td>ATTACH</td>
                <td>
                  <xref target="RFC5545" section="3.8.1.1" sectionFormat="comma"/>
                </td>
                <td>links</td>
                <td>
                  <xref target="ical-prop-attach"/>
                </td>
                <td/>
              </tr>
              <tr>
                <td>DESCRIPTION</td>
                <td>
                  <xref target="RFC5545" section="3.8.1.5" sectionFormat="comma"/>
                </td>
                <td>description</td>
                <td>
                  <xref target="ical-prop-description"/>
                </td>
                <td/>
              </tr>
              <tr>
                <td>GEO</td>
                <td>
                  <xref target="RFC5545" section="3.8.1.6" sectionFormat="comma"/>
                </td>
                <td>locations</td>
                <td>
                  <xref target="ical-prop-geo"/>
                </td>
                <td/>
              </tr>
              <tr>
                <td>IMAGE</td>
                <td>
                  <xref target="RFC7986" section="5.10" sectionFormat="comma"/>
                </td>
                <td>links</td>
                <td>
                  <xref target="ical-prop-image"/>
                </td>
                <td/>
              </tr>
              <tr>
                <td>LINK</td>
                <td>
                  <xref target="RFC9253" section="8.2" sectionFormat="comma"/>
                </td>
                <td>links</td>
                <td>
                  <xref target="ical-prop-link"/>
                </td>
                <td/>
              </tr>
              <tr>
                <td>NAME</td>
                <td>
                  <xref target="RFC7986" section="5.1" sectionFormat="comma"/>
                </td>
                <td>name</td>
                <td>
                  <xref target="ical-prop-name"/>
                </td>
                <td/>
              </tr>
              <tr>
                <td>STRUCTURED-DATA</td>
                <td>
                  <xref target="RFC9073" section="6.6" sectionFormat="comma"/>
                </td>
                <td>links</td>
                <td>
                  <xref target="ical-prop-structured-data"/>
                </td>
                <td/>
              </tr>
            </tbody>
          </table>
          <t>Other properties or components <bcp14>MAY</bcp14> be converted to the <xref target="jscal-prop-icalcomponent">iCalComponent property</xref> of the Participant object. This includes mandatory properties such as <xref target="RFC5545" section="3.8.4.7" sectionFormat="parens">UID</xref>.</t>
          <t>The following example illustrates how to convert the VRESOURCE component:</t>
          <figure anchor="test-ical-comp-vresource">
            <name>Converting the VRESOURCE component</name>
            <sourcecode type="text/calendar"><![CDATA[
BEGIN:VEVENT
BEGIN:VRESOURCE
UID:456789-abcdef-98765432
NAME:The projector
RESOURCE-TYPE:projector
STRUCTURED-DATA;VALUE=URI:http://dir.example.com/projectors/3d.vcf
END:VRESOURCE
...
]]></sourcecode>
            <sourcecode type="json"><![CDATA[
{
  "...": "",
  "@type": "Event",
  "participants": {
    "p2": {
      "@type": "Participant",
      "description": "A contact",
      "iCalComponent": {
        "name": "participant",
        "properties": [
          [
            "uid",
            {},
            "text",
            "456789-abcdef-98765432"
          ],
          [
            "resource-type",
            {},
            "text",
            "projector"
          ]
        ]
      },
      "kind": "resource",
      "links": {
        "l4": {
          "@type": "Link",
          "href": "http://dir.example.com/projectors/3d.vcf"
        }
      },
      "name": "The projector"
    }
  }
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="ical-comp-vtimezone">
          <name>VTIMEZONE</name>
          <t>The <xref target="RFC5545" section="3.6.5" sectionFormat="parens">VTIMEZONE component</xref> converts to a <xref target="RFC8984" section="4.7.2" sectionFormat="parens">TimeZone object</xref>.</t>
          <t>Its properties convert as follows:</t>
          <table anchor="ical-comp-vtimezone-props">
            <name>Properties of the VTIMEZONE component</name>
            <thead>
              <tr>
                <th>Name</th>
                <th>Reference</th>
                <th>TimeZone property</th>
                <th>See</th>
                <th>Note</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td>LAST-MODIFIED</td>
                <td>
                  <xref target="RFC5545" section="3.8.7.3" sectionFormat="comma"/>
                </td>
                <td>updated</td>
                <td>
                  <xref target="ical-prop-last-modified"/>
                </td>
                <td/>
              </tr>
              <tr>
                <td>TZID</td>
                <td>
                  <xref target="RFC5545" section="3.8.3.1" sectionFormat="comma"/>
                </td>
                <td>tzId</td>
                <td>
                  <xref target="ical-prop-tzid"/>
                </td>
                <td/>
              </tr>
              <tr>
                <td>TZID-ALIAS-OF</td>
                <td>
                  <xref target="RFC7808" section="7.2" sectionFormat="comma"/>
                </td>
                <td>aliases</td>
                <td>
                  <xref target="ical-prop-tzid-alias-of"/>
                </td>
                <td/>
              </tr>
              <tr>
                <td>TZUNTIL</td>
                <td>
                  <xref target="RFC7808" section="7.1" sectionFormat="comma"/>
                </td>
                <td>validUntil</td>
                <td>
                  <xref target="ical-prop-tzuntil"/>
                </td>
                <td/>
              </tr>
              <tr>
                <td>TZURL</td>
                <td>
                  <xref target="RFC5545" section="3.8.3.5" sectionFormat="comma"/>
                </td>
                <td>url</td>
                <td>
                  <xref target="ical-prop-tzurl"/>
                </td>
                <td/>
              </tr>
            </tbody>
          </table>
          <t>Its components convert as follows:</t>
          <table anchor="ical-comp-vtimezone-comps">
            <name>Components of the  VTIMEZONE component</name>
            <thead>
              <tr>
                <th>Name</th>
                <th>Reference</th>
                <th>TimeZone property</th>
                <th>See</th>
                <th>Note</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td>DAYLIGHT</td>
                <td>
                  <xref target="RFC5545" section="3.6.5" sectionFormat="comma"/>
                </td>
                <td>daylight</td>
                <td>In this section</td>
                <td/>
              </tr>
              <tr>
                <td>STANDARD</td>
                <td>
                  <xref target="RFC5545" section="3.6.5" sectionFormat="comma"/>
                </td>
                <td>standard</td>
                <td>In this section</td>
                <td/>
              </tr>
            </tbody>
          </table>
          <t>Other properties or components <bcp14>MAY</bcp14> be converted to the <xref target="jscal-prop-icalcomponent">iCalComponent property</xref> of the TimeZone object.</t>
          <t>The <xref target="RFC5545" section="3.6.5" sectionFormat="parens">DAYLIGHT component</xref> and <xref target="RFC5545" section="3.6.5" sectionFormat="parens">STANDARD component</xref> convert to a <xref target="RFC8984" section="4.7.2" sectionFormat="parens">TimeZoneRule object</xref>.</t>
          <t>Their properties convert as follows:</t>
          <table anchor="ical-comp-daylight-props">
            <name>Properties of the DAYLIGHT or STANDARD component</name>
            <thead>
              <tr>
                <th>Name</th>
                <th>Reference</th>
                <th>TimeZoneRule property</th>
                <th>See</th>
                <th>Note</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td>COMMENT</td>
                <td>
                  <xref target="RFC5545" section="3.8.1.4" sectionFormat="comma"/>
                </td>
                <td>comments</td>
                <td>
                  <xref target="ical-prop-comment"/>
                </td>
                <td/>
              </tr>
              <tr>
                <td>DTSTART</td>
                <td>
                  <xref target="RFC5545" section="3.8.2.4" sectionFormat="comma"/>
                </td>
                <td>start</td>
                <td>
                  <xref target="ical-prop-dtstart"/>
                </td>
                <td/>
              </tr>
              <tr>
                <td>RDATE</td>
                <td>
                  <xref target="RFC5545" section="3.8.5.2" sectionFormat="comma"/>
                </td>
                <td>recurrenceOverrides</td>
                <td>
                  <xref target="ical-prop-rdate"/>
                </td>
                <td/>
              </tr>
              <tr>
                <td>RRULE</td>
                <td>
                  <xref target="RFC5545" section="3.8.5.3" sectionFormat="comma"/>
                </td>
                <td>recurrenceRules</td>
                <td>
                  <xref target="ical-prop-rrule"/>
                </td>
                <td/>
              </tr>
              <tr>
                <td>TZNAME</td>
                <td>
                  <xref target="RFC5545" section="3.8.3.2" sectionFormat="comma"/>
                </td>
                <td>names</td>
                <td>
                  <xref target="ical-prop-tzname"/>
                </td>
                <td/>
              </tr>
              <tr>
                <td>TZOFFSETFROM</td>
                <td>
                  <xref target="RFC5545" section="3.8.3.3" sectionFormat="comma"/>
                </td>
                <td>offsetFrom</td>
                <td>
                  <xref target="ical-prop-tzoffsetfrom"/>
                </td>
                <td/>
              </tr>
              <tr>
                <td>TZOFFSETTO</td>
                <td>
                  <xref target="RFC5545" section="3.8.3.4" sectionFormat="comma"/>
                </td>
                <td>offsetTo</td>
                <td>
                  <xref target="ical-prop-tzoffsetto"/>
                </td>
                <td/>
              </tr>
            </tbody>
          </table>
          <t>Other properties or components <bcp14>MAY</bcp14> be converted to the <xref target="jscal-prop-icalcomponent">iCalComponent property</xref> of the TimeZoneRule object.</t>
          <t>The following example illustrates how to convert the VTIMEZONE component:</t>
          <figure anchor="test-ical-comp-vtimezone">
            <name>Converting the VTIMEZONE component</name>
            <sourcecode type="text/calendar"><![CDATA[
BEGIN:VCALENDAR
BEGIN:VTIMEZONE
TZID:CustomTz
TZID-ALIAS-OF:Puerto_Rico
TZID-ALIAS-OF:America/Anguilla
LAST-MODIFIED:20240909T122233Z
TZUNTIL:20080709T000000Z
TZURL:https://example.com/tz/CustomTz.ics
BEGIN:DAYLIGHT
TZNAME:AWT
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
DTSTART:19420503T000000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZNAME:APT
TZOFFSETFROM:-0300
TZOFFSETTO:-0300
DTSTART:19450814T200000
END:DAYLIGHT
BEGIN:STANDARD
TZNAME:AST
TZOFFSETFROM:-0300
TZOFFSETTO:-0400
DTSTART:19450930T020000
END:STANDARD
END:VTIMEZONE
BEGIN:VEVENT
DTSTART;TZID=CustomTz:20080708T130000
...
]]></sourcecode>
            <sourcecode type="json"><![CDATA[
{
  "...": "",
  "@type": "Group",
  "entries": [
    {
      "...": "",
      "@type": "Event",
      "start": "2008-07-08T13:00:00",
      "timeZone": "/CustomTz"
    }
  ],
  "timeZones": {
    "/CustomTz": {
      "@type": "TimeZone",
      "aliases": {
        "Puerto_Rico": true,
        "America/Anguilla": true
      },
      "validUntil": "2008-07-09T00:00:00Z",
      "daylight": [
        {
          "@type": "TimeZoneRule",
          "offsetFrom": "-0400",
          "offsetTo": "-0300",
          "start": "1942-05-03T00:00:00",
          "names": {
            "AWT": true
          }
        },
        {
          "@type": "TimeZoneRule",
          "offsetFrom": "-0300",
          "offsetTo": "-0300",
          "start": "1945-08-14T20:00:00",
          "names": {
            "APT": true
          }
        }
      ],
      "standard": [
        {
          "@type": "TimeZoneRule",
          "offsetFrom": "-0300",
          "offsetTo": "-0400",
          "start": "1945-09-30T02:00:00",
          "names": {
            "AST": true
          }
        }
      ],
      "tzId": "CustomTz",
      "updated": "2024-09-09T12:22:33Z",
      "url": "https://example.com/tz/CustomTz.ics"
    }
  }
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="ical-comp-vtodo">
          <name>VTODO</name>
          <t>The <xref target="RFC5545" section="3.6.2" sectionFormat="parens">VTODO component</xref> converts to a <xref target="RFC8984" section="2.2" sectionFormat="parens">Task object</xref>.</t>
          <t>VTODO components with different UID property values in the same iCalendar object convert to different entries in the Group.  They sort in the same order as in the VCALENDAR component.</t>
          <t>Its properties convert as follows:</t>
          <table anchor="ical-comp-vtodo-props">
            <name>Properties of the VTODO component</name>
            <thead>
              <tr>
                <th>Name</th>
                <th>Reference</th>
                <th>Task property</th>
                <th>See</th>
                <th>Note</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td>ATTACH</td>
                <td>
                  <xref target="RFC5545" section="3.8.1.1" sectionFormat="comma"/>
                </td>
                <td>links</td>
                <td>
                  <xref target="ical-prop-attach"/>
                </td>
                <td/>
              </tr>
              <tr>
                <td>ATTENDEE</td>
                <td>
                  <xref target="RFC5545" section="3.8.4.1" sectionFormat="comma"/>
                </td>
                <td>participants</td>
                <td>
                  <xref target="ical-prop-attendee"/>
                </td>
                <td/>
              </tr>
              <tr>
                <td>CATEGORIES</td>
                <td>
                  <xref target="RFC5545" section="3.8.1.2" sectionFormat="comma"/>
                </td>
                <td>keywords</td>
                <td>
                  <xref target="ical-prop-categories"/>
                </td>
                <td/>
              </tr>
              <tr>
                <td>CLASS</td>
                <td>
                  <xref target="RFC5545" section="3.8.1.3" sectionFormat="comma"/>
                </td>
                <td>privacy</td>
                <td>
                  <xref target="ical-prop-class"/>
                </td>
                <td/>
              </tr>
              <tr>
                <td>COLOR</td>
                <td>
                  <xref target="RFC7986" section="5.9" sectionFormat="comma"/>
                </td>
                <td>color</td>
                <td>
                  <xref target="ical-prop-color"/>
                </td>
                <td/>
              </tr>
              <tr>
                <td>COMMENT</td>
                <td>
                  <xref target="RFC5545" section="3.8.1.4" sectionFormat="comma"/>
                </td>
                <td>participants/*/participationComment</td>
                <td>
                  <xref target="ical-prop-comment"/>
                </td>
                <td/>
              </tr>
              <tr>
                <td>CONCEPT</td>
                <td>
                  <xref target="RFC9253" section="8.1" sectionFormat="comma"/>
                </td>
                <td>categories</td>
                <td>
                  <xref target="ical-prop-concept"/>
                </td>
                <td/>
              </tr>
              <tr>
                <td>CONFERENCE</td>
                <td>
                  <xref target="RFC7986" section="5.11" sectionFormat="comma"/>
                </td>
                <td>virtualLocations</td>
                <td>
                  <xref target="ical-prop-conference"/>
                </td>
                <td/>
              </tr>
              <tr>
                <td>CREATED</td>
                <td>
                  <xref target="RFC5545" section="3.8.7.1" sectionFormat="comma"/>
                </td>
                <td>created</td>
                <td>
                  <xref target="ical-prop-created"/>
                </td>
                <td/>
              </tr>
              <tr>
                <td>DESCRIPTION</td>
                <td>
                  <xref target="RFC5545" section="3.8.1.5" sectionFormat="comma"/>
                </td>
                <td>description</td>
                <td>
                  <xref target="ical-prop-description"/>
                </td>
                <td/>
              </tr>
              <tr>
                <td>DTSTAMP</td>
                <td>
                  <xref target="RFC5545" section="3.8.7.2" sectionFormat="comma"/>
                </td>
                <td>updated, scheduleUpdated</td>
                <td>
                  <xref target="ical-prop-dtstamp"/>
                </td>
                <td/>
              </tr>
              <tr>
                <td>DTSTART</td>
                <td>
                  <xref target="RFC5545" section="3.8.2.4" sectionFormat="comma"/>
                </td>
                <td>start</td>
                <td>
                  <xref target="ical-prop-dtstart"/>
                </td>
                <td/>
              </tr>
              <tr>
                <td>DUE</td>
                <td>
                  <xref target="RFC5545" section="3.8.2.3" sectionFormat="comma"/>
                </td>
                <td>due</td>
                <td>
                  <xref target="ical-prop-due"/>
                </td>
                <td/>
              </tr>
              <tr>
                <td>DURATION</td>
                <td>
                  <xref target="RFC5545" section="3.8.2.5" sectionFormat="comma"/>
                </td>
                <td>duration</td>
                <td>
                  <xref target="ical-prop-duration"/>
                </td>
                <td/>
              </tr>
              <tr>
                <td>EXDATE</td>
                <td>
                  <xref target="RFC5545" section="3.8.5.1" sectionFormat="comma"/>
                </td>
                <td>recurrenceOverrides</td>
                <td>
                  <xref target="ical-prop-exdate"/>
                </td>
                <td/>
              </tr>
              <tr>
                <td>EXRULE</td>
                <td>
                  <xref target="RFC2445" section="4.8.5.2" sectionFormat="comma"/>
                </td>
                <td>excludedRecurrenceRules</td>
                <td>
                  <xref target="ical-prop-exrule"/>
                </td>
                <td/>
              </tr>
              <tr>
                <td>GEO</td>
                <td>
                  <xref target="RFC5545" section="3.8.1.6" sectionFormat="comma"/>
                </td>
                <td>locations</td>
                <td>
                  <xref target="ical-prop-geo"/>
                </td>
                <td/>
              </tr>
              <tr>
                <td>IMAGE</td>
                <td>
                  <xref target="RFC7986" section="5.10" sectionFormat="comma"/>
                </td>
                <td>links</td>
                <td>
                  <xref target="ical-prop-image"/>
                </td>
                <td/>
              </tr>
              <tr>
                <td>LAST-MODIFIED</td>
                <td>
                  <xref target="RFC5545" section="3.8.7.3" sectionFormat="comma"/>
                </td>
                <td>updated</td>
                <td>
                  <xref target="ical-prop-last-modified"/>
                </td>
                <td/>
              </tr>
              <tr>
                <td>LINK</td>
                <td>
                  <xref target="RFC9253" section="8.2" sectionFormat="comma"/>
                </td>
                <td>links</td>
                <td>
                  <xref target="ical-prop-link"/>
                </td>
                <td/>
              </tr>
              <tr>
                <td>LOCATION</td>
                <td>
                  <xref target="RFC5545" section="3.8.1.7" sectionFormat="comma"/>
                </td>
                <td>locations</td>
                <td>
                  <xref target="ical-prop-location"/>
                </td>
                <td/>
              </tr>
              <tr>
                <td>ORGANIZER</td>
                <td>
                  <xref target="RFC5545" section="3.8.4.3" sectionFormat="comma"/>
                </td>
                <td>replyTo</td>
                <td>
                  <xref target="ical-prop-organizer"/>
                </td>
                <td/>
              </tr>
              <tr>
                <td>PERCENT-COMPLETE</td>
                <td>
                  <xref target="RFC5545" section="3.8.1.8" sectionFormat="comma"/>
                </td>
                <td>percentComplete</td>
                <td>
                  <xref target="ical-prop-percent-complete"/>
                </td>
                <td/>
              </tr>
              <tr>
                <td>PRIORITY</td>
                <td>
                  <xref target="RFC5545" section="3.8.1.9" sectionFormat="comma"/>
                </td>
                <td>priority</td>
                <td>
                  <xref target="ical-prop-priority"/>
                </td>
                <td/>
              </tr>
              <tr>
                <td>RDATE</td>
                <td>
                  <xref target="RFC5545" section="3.8.5.2" sectionFormat="comma"/>
                </td>
                <td>recurrenceOverrides</td>
                <td>
                  <xref target="ical-prop-rdate"/>
                </td>
                <td/>
              </tr>
              <tr>
                <td>RECURRENCE-ID</td>
                <td>
                  <xref target="RFC5545" section="3.8.4.4" sectionFormat="comma"/>
                </td>
                <td>recurrenceId</td>
                <td>
                  <xref target="ical-prop-recurrence-id"/>
                </td>
                <td/>
              </tr>
              <tr>
                <td>RELATED-TO</td>
                <td>
                  <xref target="RFC5545" section="3.8.4.5" sectionFormat="comma"/>
                </td>
                <td>relatedTo</td>
                <td>
                  <xref target="ical-prop-related-to"/>
                </td>
                <td/>
              </tr>
              <tr>
                <td>REQUEST-STATUS</td>
                <td>
                  <xref target="RFC5545" section="3.8.8.3" sectionFormat="comma"/>
                </td>
                <td>requestStatus</td>
                <td>
                  <xref target="ical-prop-request-status"/>
                </td>
                <td/>
              </tr>
              <tr>
                <td>RRULE</td>
                <td>
                  <xref target="RFC5545" section="3.8.5.3" sectionFormat="comma"/>
                </td>
                <td>recurrenceRules</td>
                <td>
                  <xref target="ical-prop-rrule"/>
                </td>
                <td/>
              </tr>
              <tr>
                <td>SEQUENCE</td>
                <td>
                  <xref target="RFC5545" section="3.8.7.4" sectionFormat="comma"/>
                </td>
                <td>sequence</td>
                <td>
                  <xref target="ical-prop-sequence"/>
                </td>
                <td/>
              </tr>
              <tr>
                <td>STRUCTURED-DATA</td>
                <td>
                  <xref target="RFC9073" section="6.6" sectionFormat="comma"/>
                </td>
                <td>links</td>
                <td>
                  <xref target="ical-prop-structured-data"/>
                </td>
                <td/>
              </tr>
              <tr>
                <td>STYLED-DESCRIPTION</td>
                <td>
                  <xref target="RFC9073" section="6.5" sectionFormat="comma"/>
                </td>
                <td>description</td>
                <td>
                  <xref target="ical-prop-styled-description"/>
                </td>
                <td/>
              </tr>
              <tr>
                <td>SUMMARY</td>
                <td>
                  <xref target="RFC5545" section="3.8.1.12" sectionFormat="comma"/>
                </td>
                <td>title</td>
                <td>
                  <xref target="ical-prop-summary"/>
                </td>
                <td/>
              </tr>
              <tr>
                <td>TRANSP</td>
                <td>
                  <xref target="RFC5545" section="3.8.2.7" sectionFormat="comma"/>
                </td>
                <td>freeBusyStatus</td>
                <td>
                  <xref target="ical-prop-transp"/>
                </td>
                <td/>
              </tr>
              <tr>
                <td>UID</td>
                <td>
                  <xref target="RFC5545" section="3.8.4.7" sectionFormat="comma"/>
                </td>
                <td>uid</td>
                <td>
                  <xref target="ical-prop-uid"/>
                </td>
                <td/>
              </tr>
              <tr>
                <td>URL</td>
                <td>
                  <xref target="RFC5545" section="3.8.4.6" sectionFormat="comma"/>
                </td>
                <td>links</td>
                <td>
                  <xref target="ical-prop-url"/>
                </td>
                <td/>
              </tr>
            </tbody>
          </table>
          <t>Its components convert as follows:</t>
          <table anchor="ical-comp-vtodo-comps">
            <name>Components of the  VTODO component</name>
            <thead>
              <tr>
                <th>Name</th>
                <th>Reference</th>
                <th>Task property</th>
                <th>See</th>
                <th>Note</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td>VALARM</td>
                <td>
                  <xref target="RFC5545" section="3.6.6" sectionFormat="comma"/>
                </td>
                <td>alerts</td>
                <td>
                  <xref target="ical-comp-valarm"/>
                </td>
                <td/>
              </tr>
            </tbody>
          </table>
          <t>Other properties or components <bcp14>MAY</bcp14> be converted to the <xref target="jscal-prop-icalcomponent">iCalComponent property</xref> of the Task object.</t>
          <t>The following example illustrates how to convert the VTODO component:</t>
          <figure anchor="test-ical-comp-vtodo">
            <name>Converting the VTODO component</name>
            <sourcecode type="text/calendar"><![CDATA[
BEGIN:VCALENDAR
BEGIN:VTODO
UID:83C80482-806D-41C4-8029-E438F793005D
DUE:20060102T030405Z
...
]]></sourcecode>
            <sourcecode type="json"><![CDATA[
{
  "...": "",
  "@type": "Group",
  "entries": [
    {
      "...": "",
      "@type": "Task",
      "due": "2006-01-02T03:04:05",
      "timeZone": "Etc/UTC",
      "uid": "83C80482-806D-41C4-8029-E438F793005D"
    }
  ]
}
]]></sourcecode>
          </figure>
        </section>
      </section>
      <section anchor="ical-properties">
        <name>Properties</name>
        <section anchor="ical-prop-acknowledged">
          <name>ACKNOWLEDGED</name>
          <t>
            The <xref target="RFC9074" section="6.1" sectionFormat="parens">ACKNOWLEDGED property</xref> in a VALARM component converts to the <xref target="RFC8984" section="4.5.2" sectionFormat="parens">acknowledged property</xref> of the Alert object.
          </t>
          <t>The following example illustrates how to convert the ACKNOWLEDGED property:</t>
          <figure anchor="test-ical-prop-acknowledged">
            <name>Converting the ACKNOWLEDGED property</name>
            <sourcecode type="text/calendar"><![CDATA[
BEGIN:VEVENT
BEGIN:VALARM
TRIGGER:-PT5M
ACTION:DISPLAY
ACKNOWLEDGED:20241002T114703Z
...
]]></sourcecode>
            <sourcecode type="json"><![CDATA[
"alerts": {
  "a": {
    "@type": "Alert",
    "acknowledged": "2024-10-02T11:47:03Z",
    "...": ""
  }
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="ical-prop-action">
          <name>ACTION</name>
          <t>
            The <xref target="RFC5545" section="3.8.6.1" sectionFormat="parens">ACTION property</xref> in a VALARM component converts to the <xref target="RFC8984" section="4.5.2" sectionFormat="parens">action property</xref> of the Alert object.
          </t>
          <t>Its values convert as follows:</t>
          <table anchor="ical-prop-action-values">
            <name>Values of the ACTION property</name>
            <thead>
              <tr>
                <th>iCalendar value</th>
                <th>JSCalendar value</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td>DISPLAY</td>
                <td>display</td>
              </tr>
              <tr>
                <td>EMAIL</td>
                <td>email</td>
              </tr>
            </tbody>
          </table>
          <t>An ACTION property with value AUDIO or any other not listed in <xref target="ical-prop-action-values"/> does not convert to the action property. Instead, the property converts to the <xref target="jscal-prop-icalcomponent">iCalComponent/properties property</xref> of the Alert.</t>
          <t>The following examples illustrate how to convert the ACTION property:</t>
          <figure anchor="test-ical-prop-action-display">
            <name>Converting the ACTION property for value DISPLAY</name>
            <sourcecode type="text/calendar"><![CDATA[
BEGIN:VEVENT
BEGIN:VALARM
TRIGGER:-PT5M
ACTION:DISPLAY
...
]]></sourcecode>
            <sourcecode type="json"><![CDATA[
"alerts": {
  "a": {
    "@type": "Alert",
    "action": "display",
    "...": ""
  }
}
]]></sourcecode>
          </figure>
          <figure anchor="test-ical-prop-action-audio">
            <name>Converting the ACTION property for value AUDIO</name>
            <sourcecode type="text/calendar"><![CDATA[
BEGIN:VEVENT
BEGIN:VALARM
TRIGGER:-PT5M
ACTION:AUDIO
...
]]></sourcecode>
            <sourcecode type="json"><![CDATA[
"alerts": {
  "a": {
    "@type": "Alert",
    "iCalComponent": {
      "name": "valarm",
      "properties": [
        [
          "action",
          {},
          "text",
          "AUDIO"
        ]
      ]
    },
    "...": ""
  }
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="ical-prop-attach">
          <name>ATTACH</name>
          <t>
              The <xref target="RFC5545" section="3.8.1.1" sectionFormat="parens">ATTACH property</xref> in a VEVENT, VTODO, VRESOURCE, PARTICIPANT, or VLOCATION component converts to a <xref target="RFC8984" section="1.4.11" sectionFormat="parens">Link object</xref>.  The converted object is set in the links property of the Event, Task, Participant, or Location object.
          </t>
          <t>The property value converts to the href property of the Link object. A value of type URI converts as-is. A value of type BINARY converts to a URI in the "data" URL scheme (<xref target="RFC2397"/>. If the FMTTYPE parameter is set on the ATTACH property, then the parameter value <bcp14>SHOULD</bcp14> be set in the <tt>mediatype</tt> part of the data URL.</t>
          <t>The ATTACH property parameters convert as follows:</t>
          <table>
            <name>Parameters of the ATTACH property</name>
            <thead>
              <tr>
                <th>Name</th>
                <th>Reference</th>
                <th>Link Property</th>
                <th>Note</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td>FMTTYPE</td>
                <td>
                  <xref target="RFC5545" section="3.2.8" sectionFormat="comma"/>
                </td>
                <td>contentType</td>
                <td/>
              </tr>
              <tr>
                <td>SIZE</td>
                <td>
                  <xref target="RFC8607" section="4.1" sectionFormat="comma"/>
                </td>
                <td>size</td>
                <td/>
              </tr>
            </tbody>
          </table>
          <t>The following examples illustrate how to convert the ATTACH property:</t>
          <figure anchor="test-ical-prop-attach-uri">
            <name>Converting the ATTACH property with URI value</name>
            <sourcecode type="text/calendar"><![CDATA[
ATTACH:https://example.com/foo.pdf
  ]]></sourcecode>
            <sourcecode type="json"><![CDATA[
"links": {
  "a": {
    "@type": "Link",
    "href": "https://example.com/foo.pdf"
  }
}
]]></sourcecode>
          </figure>
          <figure anchor="test-ical-prop-attach-binary">
            <name>Converting the ATTACH property with BINARY value</name>
            <sourcecode type="text/calendar"><![CDATA[
ATTACH;ENCODING=BASE64;VALUE=BINARY;FMTTYPE=image/png:iVBORw
 0KGgoAAAANSUhEUgAAAAEAAAABAQAAAAA3bvkkAAAAAmJLR0QAAd2KE6QAA
 AAKSURBVAjXY2gAAACCAIHdQ2r0AAAAAElFTkSuQmCC
  ]]></sourcecode>
            <sourcecode type="json"><![CDATA[
"links": {
  "a": {
    "@type": "Link",
    "href": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQAAAAA3bvkkAAAAAmJLR0QAAd2KE6QAAAAKSURBVAjXY2gAAACCAIHdQ2r0AAAAAElFTkSuQmCC",
    "contentType": "image/png"
  }
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="ical-prop-attendee">
          <name>ATTENDEE</name>
          <t>
            The <xref target="RFC5545" section="3.8.4.1" sectionFormat="parens">ATTENDEE property</xref> in a VEVENT or VTODO component converts to a <xref target="RFC8984" section="4.4.6" sectionFormat="parens">Participant object</xref>.  The converted object is set in the participants property of the Event or Task object.
          </t>
          <t>The property value converts to both the calendarAddress and sendTo properties of the Participant object. If the CAL-ADDRESS value is in the "mailto" scheme, then it converts to the "imip" method in the sendTo property, otherwise it converts to the "other" method.</t>
          <t>The ATTENDEE property parameters convert as follows:</t>
          <table>
            <name>Parameters of the ATTENDEE property</name>
            <thead>
              <tr>
                <th>Name</th>
                <th>Reference</th>
                <th>Participant Property</th>
                <th>Note</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td>CN</td>
                <td>
                  <xref target="RFC5545" section="3.2.2" sectionFormat="comma"/>
                </td>
                <td>name</td>
                <td/>
              </tr>
              <tr>
                <td>CUTYPE</td>
                <td>
                  <xref target="RFC5545" section="3.2.3" sectionFormat="comma"/>
                </td>
                <td>kind</td>
                <td/>
              </tr>
              <tr>
                <td>DELEGATED-FROM</td>
                <td>
                  <xref target="RFC5545" section="3.2.4" sectionFormat="comma"/>
                </td>
                <td>delegatedFrom</td>
                <td/>
              </tr>
              <tr>
                <td>DELEGATED-TO</td>
                <td>
                  <xref target="RFC5545" section="3.2.5" sectionFormat="comma"/>
                </td>
                <td>delegatedTo</td>
                <td/>
              </tr>
              <tr>
                <td>DIR</td>
                <td>
                  <xref target="RFC5545" section="3.2.6" sectionFormat="comma"/>
                </td>
                <td>links</td>
                <td/>
              </tr>
              <tr>
                <td>EMAIL</td>
                <td>
                  <xref target="RFC7986" section="6.2" sectionFormat="comma"/>
                </td>
                <td>email</td>
                <td/>
              </tr>
              <tr>
                <td>MEMBER</td>
                <td>
                  <xref target="RFC5545" section="3.2.11" sectionFormat="comma"/>
                </td>
                <td>memberOf</td>
                <td/>
              </tr>
              <tr>
                <td>PARTSTAT</td>
                <td>
                  <xref target="RFC5545" section="3.2.12" sectionFormat="comma"/>
                </td>
                <td>participationStatus</td>
                <td/>
              </tr>
              <tr>
                <td>ROLE</td>
                <td>
                  <xref target="RFC5545" section="3.2.16" sectionFormat="comma"/>
                </td>
                <td>roles</td>
                <td/>
              </tr>
              <tr>
                <td>RSVP</td>
                <td>
                  <xref target="RFC5545" section="3.2.17" sectionFormat="comma"/>
                </td>
                <td>expectReply</td>
                <td/>
              </tr>
              <tr>
                <td>SCHEDULE-AGENT</td>
                <td>
                  <xref target="RFC6638" section="7.1" sectionFormat="comma"/>
                </td>
                <td>scheduleAgent</td>
                <td/>
              </tr>
              <tr>
                <td>SCHEDULE-FORCE-SEND</td>
                <td>
                  <xref target="RFC6638" section="7.2" sectionFormat="comma"/>
                </td>
                <td>scheduleForceSend</td>
                <td/>
              </tr>
              <tr>
                <td>SCHEDULE-STATUS</td>
                <td>
                  <xref target="RFC6638" section="7.3" sectionFormat="comma"/>
                </td>
                <td>scheduleStatus</td>
                <td/>
              </tr>
            </tbody>
          </table>
          <t>If no ROLE parameter is set, then the "attendee" role in the roles property <bcp14>MUST</bcp14> be set.</t>
          <t>Every calendar address value of the DELEGATED-FROM, DELEGATED-TO, or MEMBER parameters converts to the identifier of an Participant object. This identifier is determined by finding that Participant object in the participants property, which has a calendarAddress property value matching the parameter value. If no such Participant object exists after all properties and components have been converted, then a new Participant object having that calendarAddress property value is created. If multiple Participant objects match, then choosing the Participant identifier is implementation-specific.</t>
          <t>An ATTENDEE property and a PARTICIPANT component in the same iCalendar component convert to the same Participant object, if their converted calendarAddress property values are equal after <xref target="RFC3986" section="6" sectionFormat="parens">URI normalization</xref>. How to deal with conflicting values when converting other Participant properties is implementation-specific.</t>
          <t>The following examples illustrate how to convert the ATTENDEE property:</t>
          <figure anchor="test-ical-prop-attendee">
            <name>Converting the ATTENDEE property</name>
            <sourcecode type="text/calendar"><![CDATA[
ATTENDEE;PARTSTAT=TENTATIVE;CN=Henry Cabot:mailto:hcabot@example.com
  ]]></sourcecode>
            <sourcecode type="json"><![CDATA[
"participants": {
  "p3": {
    "@type": "Participant",
    "calendarAddress": "mailto:hcabot@example.com",
    "name": "Henry Cabot",
    "participationStatus": "tentative",
    "roles": {
      "attendee": true
    },
    "sendTo": {
      "imip": "mailto:hcabot@example.com"
    }
  },
  "o4": {
    "...": ""
  }
}
]]></sourcecode>
          </figure>
          <figure anchor="test-ical-prop-attendee-participant">
            <name>Converting the ATTENDEE property and PARTICIPANT component</name>
            <sourcecode type="text/calendar"><![CDATA[
BEGIN:PARTICIPANT
CALENDAR-ADDRESS:mailto:foo@example.com
DTSTAMP:20230723T125201Z
...
END:PARTICIPANT
ATTENDEE;PARTSTAT=TENTATIVE:mailto:foo@example.com
  ]]></sourcecode>
            <sourcecode type="json"><![CDATA[
"participants": {
  "23": {
    "@type": "Participant",
    "calendarAddress": "mailto:foo@example.com",
    "participationStatus": "tentative",
    "scheduleUpdated": "2023-07-23T12:52:01Z",
    "...": ""
  },
  "o4": {
    "...": ""
  }
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="ical-prop-calendar-address">
          <name>CALENDAR-ADDRESS</name>
          <t>
              The <xref target="RFC9073" section="6.4" sectionFormat="parens">CALENDAR-ADDRESS property</xref> in a PARTICIPANT component converts to the <xref target="I-D.ietf-jmap-calendars" section="5.1.1" sectionFormat="parens">calendarAddress property</xref> of the Participant object.
          </t>
          <t>The following example illustrates how to convert the CALENDAR-ADDRESS property:</t>
          <figure anchor="test-ical-prop-calendar-address">
            <name>Converting the CALENDAR-ADDRESS property</name>
            <sourcecode type="text/calendar"><![CDATA[
BEGIN:PARTICIPANT
CALENDAR-ADDRESS:mailto:foo@example.com
...
  ]]></sourcecode>
            <sourcecode type="json"><![CDATA[
"participants": {
  "a2": {
    "@type": "Participant",
    "calendarAddress": "mailto:foo@example.com",
    "...": ""
  }
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="ical-prop-categories">
          <name>CATEGORIES</name>
          <t>
            The <xref target="RFC5545" section="3.8.1.2" sectionFormat="parens">CATEGORIES property</xref> in a VEVENT, VTODO, or VCALENDAR component converts to the <xref target="RFC8984" section="4.2.9" sectionFormat="parens">keywords property</xref> of the Event, Task, or Group object.
          </t>
          <t>The list of category values converts to a set of keywords. The values convert case-sensitively. All CATEGORIES properties in the same iCalendar component convert to the keywords property in the JSCalendar object.</t>
          <t>The following example illustrates how to convert the CATEGORIES property:</t>
          <figure anchor="test-ical-prop-categories">
            <name>Converting the CATEGORIES property</name>
            <sourcecode type="text/calendar"><![CDATA[
CATEGORIES:APPOINTMENT,EDUCATION
CATEGORIES:meeting
  ]]></sourcecode>
            <sourcecode type="json"><![CDATA[
"keywords": {
  "APPOINTMENT": true,
  "EDUCATION": true,
  "meeting": true
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="ical-prop-class">
          <name>CLASS</name>
          <t>
            The <xref target="RFC5545" section="3.8.1.3" sectionFormat="parens">CLASS property</xref> in a VEVENT or VTODO component converts to the <xref target="RFC8984" section="4.4.3" sectionFormat="parens">privacy property</xref> of the Event or Task object.
          </t>
          <t>Its values convert as follows:</t>
          <table anchor="ical-prop-class-values">
            <name>Values of the CLASS property</name>
            <thead>
              <tr>
                <th>iCalendar value</th>
                <th>JSCalendar value</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td>PUBLIC</td>
                <td>public</td>
              </tr>
              <tr>
                <td>PRIVATE</td>
                <td>private</td>
              </tr>
              <tr>
                <td>CONFIDENTIAL</td>
                <td>secret</td>
              </tr>
            </tbody>
          </table>
          <t>Any other value does not convert to the class property. Instead, the property converts to the <xref target="jscal-prop-icalcomponent">iCalComponent/properties property</xref> of the JSCalendar object.</t>
          <t>The following example illustrates how to convert the CLASS property:</t>
          <figure anchor="test-ical-prop-class">
            <name>Converting the CLASS property</name>
            <sourcecode type="text/calendar"><![CDATA[
CLASS:PRIVATE
  ]]></sourcecode>
            <sourcecode type="json"><![CDATA[
"privacy": "private"
]]></sourcecode>
          </figure>
        </section>
        <section anchor="ical-prop-color">
          <name>COLOR</name>
          <t>
            The <xref target="RFC7986" section="5.9" sectionFormat="parens">COLOR property</xref> in a VEVENT, VTODO, or VCALENDAR component converts to the <xref target="RFC8984" section="4.2.11" sectionFormat="parens">color property</xref> of the Event, Task, or Group object.
          </t>
          <t>Its value converts verbatim.</t>
          <t>The following examples illustrate how to convert the COLOR property:</t>
          <figure anchor="test-ical-prop-color-name">
            <name>Converting the COLOR property with color name</name>
            <sourcecode type="text/calendar"><![CDATA[
COLOR:maroon
  ]]></sourcecode>
            <sourcecode type="json"><![CDATA[
"color": "maroon"
]]></sourcecode>
          </figure>
          <figure anchor="test-ical-prop-color-numeric">
            <name>Converting the COLOR property with numeric value</name>
            <sourcecode type="text/calendar"><![CDATA[
COLOR:#ffa07a
  ]]></sourcecode>
            <sourcecode type="json"><![CDATA[
"color": "#ffa07a"
]]></sourcecode>
          </figure>
        </section>
        <section anchor="ical-prop-comment">
          <name>COMMENT</name>
          <t>
            The <xref target="RFC5545" section="3.8.1.4" sectionFormat="parens">COMMENT property</xref> in a DAYLIGHT or STANDARD component converts to the <xref target="RFC8984" section="4.7.2" sectionFormat="parens">comments property</xref> of the TimeZoneRule object.
          </t>
          <t>
            The <xref target="RFC5545" section="3.8.1.4" sectionFormat="parens">COMMENT property</xref> in a PARTICIPANT component converts to the <xref target="RFC8984" section="4.4.6" sectionFormat="parens">participationComment property</xref>.
          </t>
          <t>
              The <xref target="RFC5545" section="3.8.1.4" sectionFormat="parens">COMMENT property</xref> in an <xref target="RFC5546">iTIP-scheduled</xref> VEVENT or VTODO component converts to the <xref target="RFC8984" section="4.4.6" sectionFormat="parens">participationComment property</xref> of that Participant object, which represents the source of this scheduling message, if any. It otherwise converts to the <xref target="jscal-prop-icalcomponent">iCalComponent/properties property</xref> of the Event or Task object.
            </t>
          <t>
                Multiple COMMENT properties in a DAYLIGHT or STANDARD component convert in order of appearance in the comments property. Converting multiple COMMENT properties to the single-valued participationComment property is implementation-specific.</t>
          <t>The following examples illustrate how to convert the COMMENT property:</t>
          <figure anchor="test-ical-prop-comment-daylight">
            <name>Converting the COMMENT property in a DAYLIGHT component</name>
            <sourcecode type="text/calendar"><![CDATA[
BEGIN:VCALENDAR
BEGIN:VTIMEZONE
TZID:NonIana
BEGIN:DAYLIGHT
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
DTSTART:20010503T000000
COMMENT:take note of this
COMMENT:and this
END:DAYLIGHT
END:VTIMEZONE
...
  ]]></sourcecode>
            <sourcecode type="json"><![CDATA[
{
  "@type": "Group",
  "timeZones": {
    "/NonIana": {
      "@type": "TimeZone",
      "daylight": [
        {
          "@type": "TimeZoneRule",
          "comments": [
            "take note of this",
            "and this"
          ],
          "...": ""
        }
      ],
      "...": ""
    }
  },
  "...": ""
}
]]></sourcecode>
          </figure>
          <figure anchor="test-ical-prop-comment-participant">
            <name>Converting the COMMENT property in a PARTICIPANT component</name>
            <sourcecode type="text/calendar"><![CDATA[
BEGIN:PARTICIPANT
UID:127ABD62-D07A-4F39-AA62-530E37A8DF78
COMMENT:I'll think about it
...
  ]]></sourcecode>
            <sourcecode type="json"><![CDATA[
"participants": {
  "g2": {
    "@type": "Participant",
    "participationComment": "I'll think about it",
    "...": ""
  }
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="ical-prop-concept">
          <name>CONCEPT</name>
          <t>
            The <xref target="RFC9253" section="8.1" sectionFormat="parens">CONCEPT property</xref> in a VEVENT, VTODO, or VCALENDAR component converts to the <xref target="RFC8984" section="4.2.10" sectionFormat="parens">categories property</xref> of the Event, Task, or Group object.
          </t>
          <t>The list of URI values converts to a set of URIs. Multiple occurrences of the CONCEPT property in the same iCalendar component convert to the same categories property in the JSCalendar object.</t>
          <t>The following example illustrates how to convert the CONCEPT property:</t>
          <figure anchor="test-ical-prop-concept">
            <name>Converting the CONCEPT property</name>
            <sourcecode type="text/calendar"><![CDATA[
CONCEPT:https://example.com/event-types/arts/music
CONCEPT:https://example.com/event-types/arts/literature
  ]]></sourcecode>
            <sourcecode type="json"><![CDATA[
"categories": {
  "https://example.com/event-types/arts/music": true,
  "https://example.com/event-types/arts/literature": true
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="ical-prop-conference">
          <name>CONFERENCE</name>
          <t>
            The <xref target="RFC7986" section="5.11" sectionFormat="parens">CONFERENCE property</xref> in a VEVENT or VTODO component converts to a <xref target="RFC8984" section="4.2.6" sectionFormat="parens">VirtualLocation object</xref>.  The converted object is set in the virtualLocations property of the Event or Task object.
          </t>
          <t>The property value converts to the uri property of the VirtualLocation object.</t>
          <t>Its parameters convert as follows:</t>
          <table>
            <name>Parameters of the CONFERENCE property</name>
            <thead>
              <tr>
                <th>Name</th>
                <th>Reference</th>
                <th>Property</th>
                <th>Note</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td>FEATURE</td>
                <td>
                  <xref target="RFC7986" section="6.3" sectionFormat="comma"/>
                </td>
                <td>features</td>
                <td/>
              </tr>
              <tr>
                <td>LABEL</td>
                <td>
                  <xref target="RFC7986" section="6.4" sectionFormat="comma"/>
                </td>
                <td>name</td>
                <td/>
              </tr>
            </tbody>
          </table>
          <t>The following example illustrates how to convert the CONFERENCE property:</t>
          <figure anchor="test-ical-prop-conference">
            <name>Converting the CONFERENCE property</name>
            <sourcecode type="text/calendar"><![CDATA[
CONFERENCE;VALUE=URI;FEATURE=AUDIO,VIDEO;
 LABEL=Attendee dial-in:https://chat.example.com/audio?id=123456
  ]]></sourcecode>
            <sourcecode type="json"><![CDATA[
"virtualLocations": {
  "b2": {
    "@type": "VirtualLocation",
    "name": "Attendee dial-in",
    "uri": "https://chat.example.com/audio?id=123456",
    "features": {
      "audio": true,
      "video": true
    }
  }
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="ical-prop-created">
          <name>CREATED</name>
          <t>
            The <xref target="RFC5545" section="3.8.7.1" sectionFormat="parens">CREATED property</xref> in a VEVENT, VTODO, or VCALENDAR component converts to the <xref target="RFC8984" section="4.1.5" sectionFormat="parens">created property</xref> of the Event, Task, or Group object.
          </t>
          <t>The following example illustrates how to convert the CREATED property:</t>
          <figure anchor="test-ical-prop-created">
            <name>Converting the CREATED property</name>
            <sourcecode type="text/calendar"><![CDATA[
CREATED:20240329T133000Z
  ]]></sourcecode>
            <sourcecode type="json"><![CDATA[
"created": "2024-03-29T13:30:00Z"
]]></sourcecode>
          </figure>
        </section>
        <section anchor="ical-prop-description">
          <name>DESCRIPTION</name>
          <t>The <xref target="RFC5545" section="3.8.1.5" sectionFormat="parens">DESCRIPTION property</xref> in a VEVENT, VTODO, VCALENDAR, VLOCATION, VRESOURCE, or PARTICIPANT component converts to the <xref target="RFC8984" section="4.2.2" sectionFormat="parens">description property</xref> of the Event, Task, Group, Location, Link, or Participant object, unless its DERIVED parameter value is TRUE.</t>
          <t>If the DERIVED parameter value is TRUE, then the property does not convert to the description property. Instead, a non-derived STYLED-DESCRIPTION property is expected to contain the description. Implementations MAY preserve the property in the <xref target="jscal-prop-icalcomponent">iCalComponent property</xref>.</t>
          <t>The following example illustrates how to convert the DESCRIPTION property:</t>
          <figure anchor="test-ical-prop-description">
            <name>Converting the DESCRIPTION property</name>
            <sourcecode type="text/calendar"><![CDATA[
DESCRIPTION:The pancakes there are delicious\; they are fluffy and sweet.
  ]]></sourcecode>
            <sourcecode type="json"><![CDATA[
"description": "The pancakes there are delicious; they are fluffy and sweet."
]]></sourcecode>
          </figure>
        </section>
        <section anchor="ical-prop-dtend">
          <name>DTEND</name>
          <t>
            The <xref target="RFC5545" section="3.8.2.2" sectionFormat="parens">DTEND property</xref> in a VEVENT component converts to the <xref target="RFC8984" section="5.1.2" sectionFormat="parens">duration property</xref> of the Event object.
          </t>
          <t>The duration is the timespan between the points in time of the DTSTART and DTEND property values when converted to UTC time.</t>
          <t>If the <xref target="ical-timezone-identifiers">timezone identifier</xref> of the DTEND property differs from that of the DTSTART property, then the DTEND property also converts to a Location object. The timezone identifier converts to the timeZone property of the Location object. The relativeTo property of the Location is set to "end". The Location object is set in the locations property of the Event object.</t>
          <t>Implementations <bcp14>MAY</bcp14> preserve the fact that the duration got determined by the DTEND property. How to this depends on if the timezone identifiers of DTSTART and DTEND are equal.  If the identifiers are equal, then implementations <bcp14>MUST</bcp14> set the <xref target="jscal-prop-icalcomponent">iCalComponent property</xref> in the Event object and there add an entry for the path "duration" in the convertedProperties property. The value <bcp14>MUST</bcp14> be an ICalProperty object with the name property set to "dtend". If instead the timezone identifiers are not equal, then implementations <bcp14>MUST</bcp14> set the <xref target="jscal-prop-icalproperty">iCalProperty property</xref> of the Location object.</t>
          <t>The following examples illustrate how to convert the DTEND property:</t>
          <figure anchor="test-ical-prop-dtend-same-tzid">
            <name>Converting the DTEND property with same timezone</name>
            <sourcecode type="text/calendar"><![CDATA[
DTSTART;TZID=Australia/Melbourne:20241002T130000
DTEND;TZID=Australia/Melbourne:20241002T140000
  ]]></sourcecode>
            <sourcecode type="json"><![CDATA[
"start": "2024-10-02T13:00:00",
"timeZone": "Australia/Melbourne",
"duration": "PT1H",
"iCalComponent": {
  "convertedProperties": {
    "duration": {
      "@type": "ICalProperty",
      "name": "dtend"
    }
  }
}
]]></sourcecode>
          </figure>
          <figure anchor="test-ical-prop-dtend-different-tzid">
            <name>Converting the DTEND property with different timezone</name>
            <sourcecode type="text/calendar"><![CDATA[
DTSTART;TZID=Europe/Berlin:20241017T130005
DTEND;TZID=Asia/Bangkok:20241018T020325
  ]]></sourcecode>
            <sourcecode type="json"><![CDATA[
"start": "2024-10-17T13:00:05",
"timeZone": "Europe/Berlin",
"duration": "PT9H20M",
"locations": {
  "l5": {
    "timeZone": "Asia/Bangkok",
    "relativeTo": "end",
    "iCalProperty": {
      "@type": "ICalProperty",
      "name": "dtend"
    }
  }
}
]]></sourcecode>
          </figure>
          <figure anchor="test-ical-prop-dtend-date-type">
            <name>Converting the DTEND property with DATE value type</name>
            <sourcecode type="text/calendar"><![CDATA[
DTSTART;VALUE=DATE:20240102
DTEND;VALUE=DATE:20240112
  ]]></sourcecode>
            <sourcecode type="json"><![CDATA[
"start": "2024-01-02T00:00:00",
"timeZone": null,
"duration": "P1W2D",
"showWithoutTime": true
]]></sourcecode>
          </figure>
        </section>
        <section anchor="ical-prop-dtstamp">
          <name>DTSTAMP</name>
          <t>
              The <xref target="RFC5545" section="3.8.7.2" sectionFormat="parens">DTSTAMP property</xref> in a VEVENT or VTODO component converts to the <xref target="RFC8984" section="4.1.6" sectionFormat="parens">updated property</xref> of the Event or Task object.</t>
          <t>Both the LAST-MODIFIED and DTSTAMP properties convert to the updated property. If both are present in the same component, then the DTSTAMP property value has higher precedence. Implementations <bcp14>MAY</bcp14> in that case preserve the value of the LAST-MODIFIED property in the iCalComponent property.</t>
          <t>An Event or Task object which has the method property set might represent an iTIP reply of one of the participants in the object. In this case the value of the updated property in the Event or Task also converts to the <xref target="RFC8984" section="4.4.6" sectionFormat="parens">scheduleUpdated property</xref> of that Participant object, which represents the participant from which the iTIP reply originated.
            </t>
          <t>
              The DTSTAMP property in a PARTICIPANT component converts to the <xref target="RFC8984" section="4.4.6" sectionFormat="parens">scheduleUpdated property</xref> of the Participant object.
            </t>
          <t>The following examples illustrate how to convert the DTSTAMP property:</t>
          <figure anchor="test-ical-prop-dtstamp-vevent-method">
            <name>Converting the DTSTAMP property in a VEVENT component</name>
            <sourcecode type="text/calendar"><![CDATA[
BEGIN:VCALENDAR
METHOD:REPLY
BEGIN:VEVENT
DTSTAMP:20240304T132000Z
...
  ]]></sourcecode>
            <sourcecode type="json"><![CDATA[
{
  "@type": "Group",
  "entries": [
    {
      "@type": "Event",
      "method": "reply",
      "updated": "2024-03-04T13:20:00Z",
      "...": ""
    }
  ],
  "...": ""
}
]]></sourcecode>
          </figure>
          <figure anchor="test-ical-prop-dtstamp-participant">
            <name>Converting the DTSTAMP property in a PARTICIPANT component</name>
            <sourcecode type="text/calendar"><![CDATA[
BEGIN:VEVENT
BEGIN:PARTICIPANT
DTSTAMP:20240304T132000Z
...
  ]]></sourcecode>
            <sourcecode type="json"><![CDATA[
"participants": {
  "f4": {
    "@type": "Participant",
    "scheduleUpdated": "2024-03-04T13:20:00Z",
    "...": ""
  }
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="ical-prop-dtstart">
          <name>DTSTART</name>
          <t>
              The <xref target="RFC5545" section="3.8.2.4" sectionFormat="parens">DTSTART property</xref> in a VEVENT, VTODO, DAYLIGHT or STANDARD component converts to the <xref target="RFC8984" section="4.7.2" sectionFormat="parens">start property</xref> of the Event, Task, or TimeZoneRule object.</t>
          <t>See <xref target="convert-date-and-date-time"/> how to convert DATE and DATE-TIME values.</t>
          <t>For VEVENT and VTODO components, the <xref target="ical-timezone-identifiers">timezone identifier</xref> of the DTSTART property converts to the timeZone property of the Event or Task object.  In addition, if the value type of the DTSTART property is DATE, then the value of the <xref target="RFC8984" section="4.2.4" sectionFormat="parens">showWithoutTime property</xref> is "true".</t>
          <t>The following examples illustrate how to convert the DTSTART property for the VEVENT and VTODO components. See <xref target="ical-comp-vtimezone"/> for examples how to convert the DTSTART property for the DAYLIGHT and STANDARD components.</t>
          <figure anchor="test-ical-prop-dtstart-tzid">
            <name>Converting the DTSTART property with TZID parameter</name>
            <sourcecode type="text/calendar"><![CDATA[
DTSTART;TZID=Europe/Berlin:20240921T105302
]]></sourcecode>
            <sourcecode type="json"><![CDATA[
"start": "2024-09-21T10:53:02",
"timeZone": "Europe/Berlin",
"showWithoutTime": "false"
]]></sourcecode>
          </figure>
          <figure anchor="test-ical-prop-dtstart-utc">
            <name>Converting the DTSTART property with UTC time</name>
            <sourcecode type="text/calendar"><![CDATA[
DTSTART:20240921T105302Z
]]></sourcecode>
            <sourcecode type="json"><![CDATA[
"start": "2024-09-21T10:53:02",
"timeZone": "Etc/UTC",
"showWithoutTime": "false"
]]></sourcecode>
          </figure>
          <figure anchor="test-ical-prop-dtstart-float">
            <name>Converting the DTSTART property with floating time</name>
            <sourcecode type="text/calendar"><![CDATA[
DTSTART:20240921T105302
]]></sourcecode>
            <sourcecode type="json"><![CDATA[
"start": "2024-09-21T10:53:02",
"timeZone": null,
"showWithoutTime": "false"
]]></sourcecode>
          </figure>
          <figure anchor="test-ical-prop-dtstart-date">
            <name>Converting the DTSTART property with value type DATE</name>
            <sourcecode type="text/calendar"><![CDATA[
DTSTART;VALUE=DATE:20240921
]]></sourcecode>
            <sourcecode type="json"><![CDATA[
"start": "2024-09-21T00:00:00",
"timeZone": null,
"showWithoutTime": "true"
]]></sourcecode>
          </figure>
        </section>
        <section anchor="ical-prop-due">
          <name>DUE</name>
          <t>
              The <xref target="RFC5545" section="3.8.2.3" sectionFormat="parens">DUE property</xref> in a VTODO component converts to the <xref target="RFC8984" section="5.2.1" sectionFormat="parens">due property</xref> of the Task object.</t>
          <t>
                See <xref target="convert-date-and-date-time"/> how to convert DATE and DATE-TIME values.</t>
          <t>If the VTODO component does not contain a DTSTART property, then the <xref target="ical-timezone-identifiers">timezone identifier</xref> of the DUE property converts to the timeZone property of the Task object. If instead the VTODO component contains both the DUE and DTSTART properties, then the timezone identifier of the DUE property does not convert to a standard JSCalendar element. The value of the due property <bcp14>MUST</bcp14> denote the date and time relative to the timezone of the DTSTART property.</t>
          <t>If the value type of the DUE property is DATE, then the value of the <xref target="RFC8984" section="4.2.4" sectionFormat="parens">showWithoutTime property</xref> is "true".</t>
          <t>The following examples illustrate how to convert the DUE property:</t>
          <figure anchor="test-ical-prop-due-tzid">
            <name>Converting the DUE property with TZID parameter</name>
            <sourcecode type="text/calendar"><![CDATA[
DUE;TZID=Europe/Berlin:20240921T105302
]]></sourcecode>
            <sourcecode type="json"><![CDATA[
"due": "2024-09-21T10:53:02",
"timeZone": "Europe/Berlin",
"showWithoutTime": "false"
]]></sourcecode>
          </figure>
          <figure anchor="test-ical-prop-due-utc">
            <name>Converting the DUE property with UTC time</name>
            <sourcecode type="text/calendar"><![CDATA[
DUE:20240921T105302Z
]]></sourcecode>
            <sourcecode type="json"><![CDATA[
"start": "2024-09-21T10:53:02",
"timeZone": "Etc/UTC",
"showWithoutTime": "false"
]]></sourcecode>
          </figure>
          <figure anchor="test-ical-prop-due-float">
            <name>Converting the DUE property with floating time</name>
            <sourcecode type="text/calendar"><![CDATA[
DUE:20240921T105302
]]></sourcecode>
            <sourcecode type="json"><![CDATA[
"start": "2024-09-21T10:53:02",
"timeZone": null,
"showWithoutTime": "false"
]]></sourcecode>
          </figure>
          <figure anchor="test-ical-prop-due-date">
            <name>Converting the DUE property with value type DATE</name>
            <sourcecode type="text/calendar"><![CDATA[
DUE;VALUE=DATE:20240921
]]></sourcecode>
            <sourcecode type="json"><![CDATA[
"start": "2024-09-21T00:00:00",
"timeZone": null,
"showWithoutTime": "true"
]]></sourcecode>
          </figure>
        </section>
        <section anchor="ical-prop-duration">
          <name>DURATION</name>
          <t>
            The <xref target="RFC5545" section="3.8.2.5" sectionFormat="parens">DURATION property</xref> in a VEVENT or VTODO component converts to the <xref target="RFC8984" section="5.1.2" sectionFormat="parens">duration property</xref> of the Event or Task object.
          </t>
          <t>The following example illustrates how to convert the DURATION property:</t>
          <figure anchor="test-ical-prop-duration">
            <name>Converting the DURATION</name>
            <sourcecode type="text/calendar"><![CDATA[
DURATION:PT1H
]]></sourcecode>
            <sourcecode type="json"><![CDATA[
"duration": "PT1H"
]]></sourcecode>
          </figure>
        </section>
        <section anchor="ical-prop-exdate">
          <name>EXDATE</name>
          <t>
            The <xref target="RFC5545" section="3.8.5.1" sectionFormat="parens">EXDATE property</xref> of value type DATE or DATE-TIME in a VEVENT or VTODO component converts to a <xref target="RFC8984" section="1.4.9" sectionFormat="parens">PatchObject object</xref>.  The converted object is set in the recurrenceOverrides property of the Event or Task object.
          </t>
          <t>The property value converts to the key in the recurrenceOverrides property value. See <xref target="convert-date-and-date-time"/> how to convert DATE and DATE-TIME values. The date-time <bcp14>MUST</bcp14> be relative to the timezone identified by the timeZone property of the Event or Task.  The PatchObject value <bcp14>MUST</bcp14> set the excluded property to "true" and <bcp14>MUST NOT</bcp14> set any other property.</t>
          <t>An EXDATE property of value type PERIOD does not convert to a standard JSCalendar element.  Implementations <bcp14>MAY</bcp14> convert it to the <xref target="jscal-prop-icalcomponent">iCalComponent property</xref> of the Event or Task object.</t>
          <t>The following example illustrates how to convert the EXDATE property:</t>
          <figure anchor="test-ical-prop-exdate">
            <name>Converting the EXDATE property</name>
            <sourcecode type="text/calendar"><![CDATA[
DTSTART:20230101T130000Z
RRULE:FREQ=MONTHLY
EXDATE:20230801T130000Z
  ]]></sourcecode>
            <sourcecode type="json"><![CDATA[
"start": "2023-01-01T13:00:00",
"timeZone": "Etc/UTC",
"recurrenceRules": [
  {
    "@type": "RecurrenceRule",
    "frequency": "monthly"
  }
],
"recurrenceOverrides": {
  "2023-08-01T13:00:00": {
    "excluded": true
  }
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="ical-prop-exrule">
          <name>EXRULE</name>
          <t>
            The <xref target="RFC2445" section="4.8.5.2" sectionFormat="parens">EXRULE property</xref> in a VEVENT or VTODO component converts to a <xref target="RFC8984" section="4.3.3" sectionFormat="parens">RecurrenceRule object</xref>.  The converted object is set in the excludedRecurrenceRules property of the Event or Task.
          </t>
          <t>See <xref target="ical-prop-rrule"/> for an example how to convert a recurrence rule.</t>
        </section>
        <section anchor="ical-prop-geo">
          <name>GEO</name>
          <t>
            The <xref target="RFC5545" section="3.8.1.6" sectionFormat="parens">GEO property</xref> in a VLOCATION component converts to the <xref target="RFC8984" section="4.2.5" sectionFormat="parens">coordinates property</xref>.
          </t>
          <t>
            The <xref target="RFC5545" section="3.8.1.6" sectionFormat="parens">GEO property</xref> in a VEVENT, VTODO, PARTICIPANT or VRESOURCE component converts to a <xref target="RFC8984" section="4.2.5" sectionFormat="parens">Location object</xref>.  The converted object is set in the locations property of the Event, Task, or Participant object.
          </t>
          <t>The pair of FLOAT values converts to an URI with the <xref target="RFC5870">"geo" scheme</xref>.  The first FLOAT value converts to the "coord-a" part of the URI, the second FLOAT value to the "coord-b" part. A preceding plus sign (+) of the FLOAT value <bcp14>MUST</bcp14> be omitted, a preceding minus sign (-) <bcp14>MUST</bcp14> be preserved.  The third, altitude coordinate <bcp14>MUST NOT</bcp14> be set, unless its value is known.</t>
          <t>The following examples illustrate how to convert the GEO property:</t>
          <figure anchor="test-ical-prop-geo">
            <name>Converting the GEO property in a VEVENT</name>
            <sourcecode type="text/calendar"><![CDATA[
GEO:+45.5;-93.3
  ]]></sourcecode>
            <sourcecode type="json"><![CDATA[
"locations": {
  "d4": {
    "@type": "Location",
    "coordinates": "geo:45.5,-93.3"
  }
}
]]></sourcecode>
          </figure>
          <figure anchor="test-ical-prop-geo-vlocation">
            <name>Converting the GEO property in a VLOCATION</name>
            <sourcecode type="text/calendar"><![CDATA[
BEGIN:VEVENT
BEGIN:VLOCATION
NAME:Eiffel Tower
GEO:48.858222;2.2945
...
  ]]></sourcecode>
            <sourcecode type="json"><![CDATA[
"locations": {
  "2": {
    "@type": "Location",
    "name": "Eiffel Tower",
    "coordinates": "geo:48.858222,2.2945"
  }
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="ical-prop-image">
          <name>IMAGE</name>
          <t>
            The <xref target="RFC7986" section="5.10" sectionFormat="parens">IMAGE property</xref> in a VEVENT, VTODO, VLOCATION, or VRESOURCE component converts to a <xref target="RFC8984" section="1.4.11" sectionFormat="parens">Link object</xref>.  The converted object is set in the links property of the Event, Task, Location, or Participant object.
          </t>
          <t>The property value converts to the href property of the Link object. A value of type URI converts as-is. See <xref target="ical-prop-attach"/> how to convert a BINARY value. If the DISPLAY parameter is set, then the "rel" property of the Link object <bcp14>MUST</bcp14> be set to "icon".</t>
          <t>Its parameters convert as follows:</t>
          <table>
            <name>Parameters of the IMAGE property</name>
            <thead>
              <tr>
                <th>Name</th>
                <th>Reference</th>
                <th>Property</th>
                <th>Note</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td>DISPLAY</td>
                <td>
                  <xref target="RFC7986" section="6.1" sectionFormat="comma"/>
                </td>
                <td>display</td>
                <td/>
              </tr>
              <tr>
                <td>FMTTYPE</td>
                <td>
                  <xref target="RFC5545" section="3.2.8" sectionFormat="comma"/>
                </td>
                <td>contentType</td>
                <td/>
              </tr>
              <tr>
                <td>SIZE</td>
                <td>
                  <xref target="RFC8607" section="4.1" sectionFormat="comma"/>
                </td>
                <td>size</td>
                <td/>
              </tr>
            </tbody>
          </table>
          <t>Implementations <bcp14>MAY</bcp14> preserve the fact that the Link object got converted from an IMAGE property. To so, they <bcp14>MUST</bcp14> set the <xref target="jscal-prop-icalproperty">iCalProperty</xref> on the Link object.</t>
          <t>The following example illustrates how to convert the IMAGE property:</t>
          <figure anchor="test-ical-prop-image">
            <name>Converting the IMAGE property</name>
            <sourcecode type="text/calendar"><![CDATA[
IMAGE;VALUE=URI;DISPLAY=BADGE;FMTTYPE=image/png:
 https://example.com/images/party.png
  ]]></sourcecode>
            <sourcecode type="json"><![CDATA[
"links": {
  "4": {
    "@type": "Link",
    "href": "https://example.com/images/party.png",
    "display": "badge",
    "rel": "icon",
    "contentType": "image/png",
    "iCalProperty": {
      "@type": "ICalProperty",
      "name": "image"
    }
  }
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="ical-prop-last-modified">
          <name>LAST-MODIFIED</name>
          <t>
            The <xref target="RFC5545" section="3.8.7.3" sectionFormat="parens">LAST-MODIFIED property</xref> in a VEVENT, VTODO, VCALENDAR, or VTIMEZONE component converts to the <xref target="RFC8984" section="4.1.6" sectionFormat="parens">updated property</xref> of the Event, Task, Group, or TimeZone object.
          </t>
          <t>Both the LAST-MODIFIED and DTSTAMP properties convert to the updated property. If both are present in the same component, then the DTSTAMP property value has higher precedence. Implementations <bcp14>MAY</bcp14> in that case preserve the value of the LAST-MODIFIED property in the iCalComponent property.</t>
          <t>The following example illustrates how to convert the LAST-MODIFIED property:</t>
          <figure anchor="test-ical-prop-last-modified">
            <name>Converting the IMAGE property</name>
            <sourcecode type="text/calendar"><![CDATA[
LAST-MODIFIED:20240914T231257Z
  ]]></sourcecode>
            <sourcecode type="json"><![CDATA[
"updated": "2024-09-14T23:12:57Z"
]]></sourcecode>
          </figure>
        </section>
        <section anchor="ical-prop-link">
          <name>LINK</name>
          <t>
            The <xref target="RFC9253" section="8.2" sectionFormat="parens">LINK property</xref> in a VEVENT, VTODO, VCALENDAR, VRESOURCE, PARTICIPANT, or VLOCATION component converts to a <xref target="RFC8984" section="1.4.11" sectionFormat="parens">Link object</xref> under the following conditions:</t>
          <ul>
            <li>The property value type is URI.</li>
            <li>The LINKREL parameter either is not set, or the parameter value is a registered relation type as defined in <xref target="RFC8288" section="2.1.1" sectionFormat="parens"/>.</li>
          </ul>
          <t>The converted object is set in the links property of the Event, Task, Group, Participant, or Location object. The LINK property value converts to the href property of the Link object.</t>
          <t>Its parameters convert as follows:</t>
          <table>
            <name>Parameters of the LINK property</name>
            <thead>
              <tr>
                <th>Name</th>
                <th>Reference</th>
                <th>Property</th>
                <th>Note</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td>FMTTYPE</td>
                <td>
                  <xref target="RFC5545" section="3.2.8" sectionFormat="comma"/>
                </td>
                <td>contentType</td>
                <td/>
              </tr>
              <tr>
                <td>LABEL</td>
                <td>
                  <xref target="RFC7986" section="6.4" sectionFormat="comma"/>
                </td>
                <td>title</td>
                <td/>
              </tr>
              <tr>
                <td>LINKREL</td>
                <td>
                  <xref target="RFC9253" section="6.1" sectionFormat="comma"/>
                </td>
                <td>rel</td>
                <td/>
              </tr>
            </tbody>
          </table>
          <t>A LINK property with a value type other than URI or an unregistered LINK parameter value does not convert to a standard JSCalendar element. Implementations <bcp14>MAY</bcp14> convert it to the <xref target="jscal-prop-icalcomponent">iCalComponent property</xref>.</t>
          <t>The following examples illustrate how to convert the LINK property:</t>
          <figure anchor="test-ical-prop-link">
            <name>Converting the LINK property to a Link object</name>
            <sourcecode type="text/calendar"><![CDATA[
LINK;LABEL=Venue;VALUE=URI:https://example.com/events
  ]]></sourcecode>
            <sourcecode type="json"><![CDATA[
"links": {
  "l1": {
    "@type": "Link",
    "href": "https://example.com/events",
    "title": "Venue"
  }
}
]]></sourcecode>
          </figure>
          <figure anchor="test-ical-prop-link-xml-reference">
            <name>Converting the LINK property to iCalComponent</name>
            <sourcecode type="text/calendar"><![CDATA[
BEGIN:VEVENT
LINK;LINKREL="https://example.com/linkrel/costStructure";
 VALUE=XML-REFERENCE:
 https://example.com/xmlDocs/bidFramework.xml#xpointer(id("cost"))
...
  ]]></sourcecode>
            <sourcecode type="json"><![CDATA[
"iCalComponent": {
  "@type": "ICalComponent",
  "name": "vevent",
  "properties": [
    [
      "link",
      {
        "linkrel": "https://example.com/linkrel/costStructure"
      },
      "xml-reference",
      "https://example.com/xmlDocs/bidFramework.xml#xpointer(id(\"cost\"))"
    ]
  ]
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="ical-prop-location">
          <name>LOCATION</name>
          <t>
            The <xref target="RFC5545" section="3.8.1.7" sectionFormat="parens">LOCATION property</xref> in a VEVENT, VTODO, or PARTICIPANT component converts to a <xref target="RFC8984" section="4.2.5" sectionFormat="parens">Location object</xref>, unless its DERIVED parameter value is TRUE. The converted object is set in the locations property of the Event, Task, or Participant object.
          </t>
          <t>The property value converts to the title property of the Location object.</t>
          <t>If the DERIVED parameter value is TRUE, then the property does not convert to a Location object. Instead, a VLOCATION component is expected to represent the location. Implementations <bcp14>MAY</bcp14> preserve the property in the <xref target="jscal-prop-icalcomponent">iCalComponent property</xref>.</t>
          <t>The following example illustrates how to convert the LOCATION property:</t>
          <figure anchor="test-ical-prop-location">
            <name>Converting the LOCATION property</name>
            <sourcecode type="text/calendar"><![CDATA[
LOCATION:Conference Room - F123\, Bldg. 002
  ]]></sourcecode>
            <sourcecode type="json"><![CDATA[
"locations": {
  "f45": {
    "@type": "Location",
    "title": "Conference Room - F123, Bldg. 002"
  }
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="ical-prop-location-type">
          <name>LOCATION-TYPE</name>
          <t>
            The <xref target="RFC9073" section="6.1" sectionFormat="parens">LOCATION-TYPE property</xref> in a VLOCATION component converts to the <xref target="RFC8984" section="4.2.5" sectionFormat="parens">locationTypes property</xref>.</t>
          <t>The list of location type values converts to a set of location types. The values convert case-sensitively. All LOCATION-TYPE properties in the same VLOCATION convert to the locationTypes property in the Location object.</t>
          <t>The following example illustrates how to convert the LOCATION-TYPE property:</t>
          <figure anchor="test-ical-prop-location-type">
            <name>Converting the LOCATION property</name>
            <sourcecode type="text/calendar"><![CDATA[
BEGIN:VEVENT
BEGIN:VLOCATION
LOCATION-TYPE:hotel,restaurant
LOCATION-TYPE:bar
...
  ]]></sourcecode>
            <sourcecode type="json"><![CDATA[
"locations": {
  "1": {
    "@type": "Location",
    "locationTypes": {
      "bar": true,
      "hotel": true,
      "restaurant": true
    },
    "...": ""
  }
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="ical-prop-method">
          <name>METHOD</name>
          <t>
              The <xref target="RFC5545" section="3.7.2" sectionFormat="parens">METHOD property</xref> in a VCALENDAR component converts to the <xref target="RFC8984" section="4.1.8" sectionFormat="parens">method property</xref> of all Event or Task objects that are listed in the Group object's entries property.
          </t>
          <t>The property value converts in lowercase.</t>
          <t>The following example illustrates how to convert the METHOD property:</t>
          <figure anchor="test-ical-prop-method">
            <name>Converting the METHOD property</name>
            <sourcecode type="text/calendar"><![CDATA[
BEGIN:VCALENDAR
METHOD:REQUEST
BEGIN:VEVENT
...
  ]]></sourcecode>
            <sourcecode type="json"><![CDATA[
{
  "@type": "Group",
  "entries": [
    {
      "@type": "Event",
      "method": "request",
      "...": ""
    }
  ],
  "...": ""
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="ical-prop-name">
          <name>NAME</name>
          <t>
            The <xref target="RFC7986" section="5.1" sectionFormat="parens">NAME property</xref> in a VLOCATION or VRESOURCE component converts to the name property of the <xref target="RFC8984" section="4.2.5" sectionFormat="parens">Location</xref> or <xref target="RFC8984" section="4.4.6" sectionFormat="parens">Participant</xref> object.
          </t>
          <t>
            The <xref target="RFC7986" section="5.1" sectionFormat="parens">NAME property</xref> in a VCALENDAR component converts to the <xref target="RFC8984" section="4.2.1" sectionFormat="parens">title property</xref> of the Group object.
          </t>
          <t>The following examples illustrate how to convert the NAME property:</t>
          <figure anchor="test-ical-prop-name-vcalendar">
            <name>Converting the NAME property in a VCALENDAR component</name>
            <sourcecode type="text/calendar"><![CDATA[
BEGIN:VCALENDAR
NAME:Company Vacation Days
...
  ]]></sourcecode>
            <sourcecode type="json"><![CDATA[
{
  "@type": "Group",
  "title": "Company Vacation Days",
  "...": ""
}
]]></sourcecode>
          </figure>
          <figure anchor="test-ical-prop-name-vlocation-participant">
            <name>Converting the NAME property in the VLOCATION and PARTICIPANT components</name>
            <sourcecode type="text/calendar"><![CDATA[
BEGIN:VEVENT
BEGIN:PARTICIPANT
NAME:John Doe
...
END:PARTICIPANT
BEGIN:VLOCATION
NAME:Fred's Bar
...
END:VLOCATION
...
  ]]></sourcecode>
            <sourcecode type="json"><![CDATA[
"locations": {
  "1": {
    "@type": "Location",
    "name": "Fred's Bar",
    "...": ""
  }
},
"participants": {
  "1": {
    "@type": "Participant",
    "name": "John Doe",
    "...": ""
  }
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="ical-prop-organizer">
          <name>ORGANIZER</name>
          <t>
            The <xref target="RFC5545" section="3.8.4.3" sectionFormat="parens">ORGANIZER property</xref> in a VEVENT or VTODO component converts to the <xref target="RFC8984" section="4.4.4" sectionFormat="parens">replyTo property</xref>. In addition, it converts to a Participant object in the  <xref target="RFC8984" section="4.4.6" sectionFormat="parens">participants property</xref>.
          </t>
          <t>If the CAL-ADDRESS property value is in the "mailto" scheme, then it converts to the "imip" method in the replyTo property, otherwise it converts to the "other" method. The property value also converts to the calendarAddress property of the Participant object. The "owner" role is set in the roles property of the Participant. In contrast to the ATTENDEE property, the property value does not convert to the sendTo property of the Participant object.</t>
          <t>An ORGANIZER property, an ATTENDEE property, and a PARTICIPANT component in the same iCalendar component all convert to the same Participant object, if their converted calendarAddress property values are equal after <xref target="RFC3986" section="6" sectionFormat="parens">URI normalization</xref>. How to deal with conflicting values when converting other Participant properties is implementation-specific.</t>
          <t>Implementations <bcp14>MAY</bcp14> preserve arbitrary parameters of the ORGANIZER property, in which case they <bcp14>MUST</bcp14> convert these to a "replyTo" entry in the convertedProperties property of the Event or Task object's <xref target="jscal-prop-icalcomponent">iCalComponent property</xref>.</t>
          <t>The ORGANIZER property parameters convert as follows:</t>
          <table>
            <name>Parameters of the ORGANIZER property</name>
            <thead>
              <tr>
                <th>Name</th>
                <th>Reference</th>
                <th>Property</th>
                <th>Note</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td>CN</td>
                <td>
                  <xref target="RFC5545" section="3.2.2" sectionFormat="comma"/>
                </td>
                <td>name</td>
                <td/>
              </tr>
              <tr>
                <td>DIR</td>
                <td>
                  <xref target="RFC5545" section="3.2.6" sectionFormat="comma"/>
                </td>
                <td>links</td>
                <td/>
              </tr>
            </tbody>
          </table>
          <t>The following examples illustrate how to convert the ORGANIZER property:</t>
          <figure anchor="test-ical-prop-organizer">
            <name>Converting an ORGANIZER property</name>
            <sourcecode type="text/calendar"><![CDATA[
ORGANIZER:mailto:foo@example.com
...
ATTENDEE;RSVP=TRUE;PARTSTAT=NEEDS-ACTION:mailto:bar@example.com
  ]]></sourcecode>
            <sourcecode type="json"><![CDATA[
"replyTo": {
  "imip": "mailto:foo@example.com"
},
"participants": {
  "a": {
    "@type": "Participant",
    "calendarAddress": "mailto:foo@example.com",
    "roles": {
      "owner": true
    }
  },
  "b": {
    "@type": "Participant",
    "...": ""
  }
}
]]></sourcecode>
          </figure>
          <figure anchor="test-ical-prop-organizer-and-attendee">
            <name>Converting an ORGANIZER and ATTENDEE property</name>
            <sourcecode type="text/calendar"><![CDATA[
ORGANIZER:mailto:foo@example.com
ATTENDEE;RSVP=FALSE;PARTSTAT=ACCEPTED;CN="Jane Doe":mailto:foo@example.com
...
ATTENDEE;RSVP=TRUE;PARTSTAT=NEEDS-ACTION:mailto:bar@example.com
  ]]></sourcecode>
            <sourcecode type="json"><![CDATA[
"replyTo": {
  "imip": "mailto:foo@example.com"
},
"participants": {
  "a": {
    "@type": "Participant",
    "calendarAddress": "mailto:foo@example.com",
    "name": "Jane Doe",
    "participationStatus": "accepted",
    "roles": {
      "attendee": true,
      "owner": true
    },
    "sendTo": {
      "imip": "mailto:foo@example.com"
    }
  },
  "b": {
    "@type": "Participant",
    "...": ""
  }
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="ical-prop-participant-type">
          <name>PARTICIPANT-TYPE</name>
          <t>
            The <xref target="RFC9073" section="6.2" sectionFormat="parens">PARTICIPANT-TYPE property</xref> in a PARTICIPANT component converts to the <xref target="RFC8984" section="4.4.6" sectionFormat="parens">roles property</xref> of the Participant object.
          </t>
          <t>The property value converts in lowercase.</t>
          <t>The following example illustrates how to convert the PARTICIPANT-TYPE property:</t>
          <figure anchor="test-ical-prop-participant-type">
            <name>Converting the PARTICIPANT-TYPE property</name>
            <sourcecode type="text/calendar"><![CDATA[
BEGIN:PARTICIPANT
PARTICIPANT-TYPE:CONTACT
CALENDAR-ADDRESS:mailto:foo@example.com
...
END:PARTICIPANT
ATTENDEE;RSVP=YES;PARTSTAT=NEEDS-ACTION:mailto:foo@example.com
  ]]></sourcecode>
            <sourcecode type="json"><![CDATA[
"participants": {
  "a": {
    "@type": "Participant",
    "roles": {
      "attendee": true,
      "contact": true
    },
    "...": ""
  },
  "b": {
    "...": ""
  }
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="ical-prop-percent-complete">
          <name>PERCENT-COMPLETE</name>
          <t>
            The <xref target="RFC5545" section="3.8.1.8" sectionFormat="parens">PERCENT-COMPLETE property</xref> in a VTODO component converts to the <xref target="RFC8984" section="5.2.4" sectionFormat="parens">percentComplete property</xref> of the Task object.
          </t>
          <t>A Task object which has the method property set might represent an iTIP reply of one of the participants in the object. In this case the value of the percentComplete property in the Task also converts to the <xref target="RFC8984" section="4.4.6" sectionFormat="parens">percentComplete</xref> of that Participant object, which represents the participant from which the iTIP reply originated.</t>
          <t>The PERCENT-COMPLETE property in a PARTICIPANT component converts to the <xref target="RFC8984" section="4.4.6" sectionFormat="parens">percentComplete property</xref> of the Participant object.</t>
          <t>The following examples illustrate how to convert the PERCENT-COMPLETE property:</t>
          <figure anchor="test-ical-prop-percent-complete-method">
            <name>Converting the PERCENT-COMPLETE property in a VEVENT component</name>
            <sourcecode type="text/calendar"><![CDATA[
BEGIN:VCALENDAR
METHOD:REPLY
BEGIN:VTODO
PERCENT-COMPLETE:53
...
  ]]></sourcecode>
            <sourcecode type="json"><![CDATA[
{
  "@type": "Group",
  "entries": [
    {
      "@type": "Task",
      "method": "reply",
      "percentComplete": 53,
      "...": ""
    }
  ],
  "...": ""
}
]]></sourcecode>
          </figure>
          <figure anchor="test-ical-prop-percent-complete-participant">
            <name>Converting the PERCENT-COMPLETE property in a PARTICIPANT component</name>
            <sourcecode type="text/calendar"><![CDATA[
BEGIN:VTODO
BEGIN:PARTICIPANT
PERCENT-COMPLETE:78
...
  ]]></sourcecode>
            <sourcecode type="json"><![CDATA[
"@type": "Task",
"participants": {
  "f4": {
    "@type": "Participant",
    "percentComplete": 78,
    "...": ""
  }
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="ical-prop-priority">
          <name>PRIORITY</name>
          <t>
            The <xref target="RFC5545" section="3.8.1.9" sectionFormat="parens">PRIORITY property</xref> in a VEVENT or VTODO component converts to the <xref target="RFC8984" section="4.4.1" sectionFormat="parens">priority property</xref> of the Event or Task object.
          </t>
          <t>The following example illustrates how to convert the PRIORITY property:</t>
          <figure anchor="test-ical-prop-priority">
            <name>Converting the PRIORITY property</name>
            <sourcecode type="text/calendar"><![CDATA[
PRIORITY:3
  ]]></sourcecode>
            <sourcecode type="json"><![CDATA[
"priority": 3
]]></sourcecode>
          </figure>
        </section>
        <section anchor="ical-prop-prodid">
          <name>PRODID</name>
          <t>
            The <xref target="RFC5545" section="3.7.3" sectionFormat="parens">PRODID property</xref> in a VCALENDAR component converts to the <xref target="RFC8984" section="4.1.4" sectionFormat="parens">prodId property</xref> of the Group object, and to the prodId property of all Event or Task objects that are listed in the Group object's entries property.</t>
          <t>The property value converts verbatim.</t>
          <t>The following example illustrates how to convert the PRODID property:</t>
          <figure anchor="test-ical-prop-prodid">
            <name>Converting the PRODID property</name>
            <sourcecode type="text/calendar"><![CDATA[
BEGIN:VCALENDAR
PRODID:-//BAZ//bam//EN
BEGIN:VEVENT
...
  ]]></sourcecode>
            <sourcecode type="json"><![CDATA[
{
  "@type": "Group",
  "prodId": "-//BAZ//bam//EN",
  "entries": [
    {
      "@type": "Event",
      "prodId": "-//BAZ//bam//EN",
      "...": ""
    }
  ],
  "...": ""
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="ical-prop-rdate">
          <name>RDATE</name>
          <t>
              The <xref target="RFC5545" section="3.8.5.2" sectionFormat="parens">RDATE property</xref> of type DATE or DATE-TIME in a VEVENT, VTODO, DAYLIGHT or STANDARD component converts to a <xref target="RFC8984" section="1.4.9" sectionFormat="parens">PatchObject object</xref>.  The converted object is set in the recurrenceOverrides property of the Event, Task, or TimeZoneRule object.
          </t>
          <t>The property value converts to the key in the recurrenceOverrides property value. See <xref target="convert-date-and-date-time"/> how to convert DATE and DATE-TIME values. For Event Task objects, the date-time <bcp14>MUST</bcp14> be relative to the timezone identified by the timeZone property, for TimeZoneRule objects the date-time is relative to the UTC offset specified in the offsetFrom property.  The PatchObject value <bcp14>MUST</bcp14> be an empty JSON object.</t>
          <t>An RDATE property of value type PERIOD does not convert to a standard JSCalendar element.  Implementations <bcp14>MAY</bcp14> convert it to the <xref target="jscal-prop-icalcomponent">iCalComponent property</xref> of the Event, Task, or TimeZoneRule object.</t>
          <t>The following example illustrates how to convert the RDATE property:</t>
          <figure anchor="test-ical-prop-rdate">
            <name>Converting the RDATE property</name>
            <sourcecode type="text/calendar"><![CDATA[
DTSTART:20230101T130000Z
RRULE:FREQ=MONTHLY
RDATE:20230805T170000Z
  ]]></sourcecode>
            <sourcecode type="json"><![CDATA[
"start": "2023-01-01T13:00:00",
"timeZone": "Etc/UTC",
"recurrenceRules": [
  {
    "@type": "RecurrenceRule",
    "frequency": "monthly"
  }
],
"recurrenceOverrides": {
  "2023-08-05T17:00:00": {}
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="ical-prop-recurrence-id">
          <name>RECURRENCE-ID</name>
          <t>The <xref target="RFC5545" section="3.8.4.4" sectionFormat="parens">RECURRENCE-ID property</xref> in a VEVENT or VTODO component converts to the <xref target="RFC8984" section="4.3.1" sectionFormat="parens">recurrenceId property</xref> of the Event or Task object. The <xref target="ical-timezone-identifiers">timezone identifier</xref> of the RECURRENCE-ID property converts to the recurrenceIdTimeZone property.</t>
          <t>See <xref target="convert-date-and-date-time"/> how to convert DATE and DATE-TIME values.</t>
          <t>The <xref target="RFC5545" section="3.2.13" sectionFormat="parens">RANGE parameter</xref> does not convert to a standard JSCalendar element. Implementations <bcp14>MAY</bcp14> preserve it in the <xref target="jscal-prop-icalcomponent">iCalComponent</xref> property.</t>
          <t>See <xref target="ical-recurring-components"/> for further requirements and examples.</t>
        </section>
        <section anchor="ical-prop-related-to">
          <name>RELATED-TO</name>
          <t>
            The <xref target="RFC5545" section="3.8.4.5" sectionFormat="parens">RELATED-TO property</xref> in a VEVENT, VTODO, or VALARM component converts to a <xref target="RFC8984" section="1.4.10" sectionFormat="parens">Relation object</xref>.  The converted object is set in the relatedTo property of the <xref target="RFC8984" section="4.1.3" sectionFormat="parens">Event or Task object</xref>, or the <xref target="RFC8984" section="4.5.2" sectionFormat="parens">Alert object</xref>.
          </t>
          <t>The property value in a VEVENT or VTODO converts as-is to the key of the Relation object in the relatedTo property. The property value in a VALARM converts to the same value as the key of that Alert object, which represents the VALARM component having that property value set in the UID property. Any RELTYPE parameters convert to the relations property in that Relation object. The parameter values convert in lowercase.</t>
          <t>The <xref target="RFC9253" section="6.2" sectionFormat="parens">GAP parameter</xref> does not convert a standard JSCalendar element. Implementations <bcp14>MAY</bcp14> convert it to the <xref target="jscal-prop-icalproperty">iCalProperty property</xref> of the Relation object.</t>
          <t>The following examples illustrate how to convert the RELATED-TO property:</t>
          <figure anchor="test-ical-prop-related-to">
            <name>Converting the RELATED-TO property in a VEVENT</name>
            <sourcecode type="text/calendar"><![CDATA[
BEGIN:VEVENT
RELATED-TO;RELTYPE=PARENT:4E05861C-A0C9-46AC-9A66-760FC1E0E167
RELATED-TO:4120A9B1-1133-4AC0-9185-C4C8396048ED
...
  ]]></sourcecode>
            <sourcecode type="json"><![CDATA[
"relatedTo": {
  "4E05861C-A0C9-46AC-9A66-760FC1E0E167": {
    "@type": "Relation",
    "relation": {
      "parent": true
    }
  },
  "4120A9B1-1133-4AC0-9185-C4C8396048ED": {
    "@type": "Relation"
  }
}
]]></sourcecode>
          </figure>
          <figure anchor="test-ical-prop-related-to-valarm">
            <name>Converting the RELATED-TO property in a VALARM</name>
            <sourcecode type="text/calendar"><![CDATA[
BEGIN:VEVENT
...
BEGIN:VALARM
UID:8297C37D-BA2D-4476-91AE-C1EAA364F8E1
TRIGGER:-PT15M
DESCRIPTION:Event reminder
ACTION:DISPLAY
ACKNOWLEDGED:20210302T151514Z
END:VALARM
...
BEGIN:VALARM
UID:DE7B5C34-83FF-47FE-BE9E-FF41AE6DD097
TRIGGER;VALUE=DATE-TIME:20210302T152000Z
RELATED-TO;RELTYPE=SNOOZE:8297C37D-BA2D-4476-91AE-C1EAA364F8E1
DESCRIPTION:Event reminder
ACTION:DISPLAY
END:VALARM
...
  ]]></sourcecode>
            <sourcecode type="json"><![CDATA[
"alerts": {
  "1": {
    "@type": "Alert",
    "trigger": {
      "@type": "OffsetTrigger",
      "offset": "-PT15M"
    },
    "...": ""
  },
  "2": {
    "@type": "Alert",
    "trigger": {
      "@type": "AbsoluteTrigger",
      "when": "2021-03-02T15:20:00Z"
    },
    "relatedTo": {
      "1": {
        "relation": {
          "snooze": true
        }
      }
    },
    "...": ""
  }
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="ical-prop-request-status">
          <name>REQUEST-STATUS</name>
          <t>
            The <xref target="RFC5545" section="3.8.8.3" sectionFormat="parens">REQUEST-STATUS property</xref> in a VEVENT or VTODO component converts to the <xref target="RFC8984" section="4.4.7" sectionFormat="parens">requestStatus property</xref> of the Event or Task object.
          </t>
          <t>The following example illustrates how to convert the REQUEST-STATUS property:</t>
          <section anchor="example-ical-prop-request-status">
            <name>Example: Converting the REQUEST-STATUS property</name>
            <figure anchor="test-ical-prop-request-status">
              <name>Converting the REQUEST-STATUS property</name>
              <sourcecode type="text/calendar"><![CDATA[
REQUEST-STATUS:2.0;Success
  ]]></sourcecode>
              <sourcecode type="json"><![CDATA[
"requestStatus": "2.0;Success"
]]></sourcecode>
            </figure>
          </section>
        </section>
        <section anchor="ical-prop-rrule">
          <name>RRULE</name>
          <t>
            The <xref target="RFC5545" section="3.8.5.3" sectionFormat="parens">RRULE property</xref> in a VEVENT, VTODO, DAYLIGHT or STANDARD component converts to a <xref target="RFC8984" section="4.3.3" sectionFormat="parens">RecurrenceRule object</xref>.  The converted object is set in the recurrenceRules property of the Event, Task, or TimeZoneRule object.
          </t>
          <t>The RECUR value data type converts to a RecurrenceRule object as follows:</t>
          <table>
            <name>Converting the RECUR value type to a RecurrenceRule object</name>
            <thead>
              <tr>
                <th>RRULE field</th>
                <th>RecurrenceRule property</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td>FREQ</td>
                <td>frequency</td>
              </tr>
              <tr>
                <td>UNTIL</td>
                <td>until</td>
              </tr>
              <tr>
                <td>COUNT</td>
                <td>count</td>
              </tr>
              <tr>
                <td>INTERVAL</td>
                <td>interval</td>
              </tr>
              <tr>
                <td>BYSECOND</td>
                <td>bySecond</td>
              </tr>
              <tr>
                <td>BYMINUTE</td>
                <td>byMinute</td>
              </tr>
              <tr>
                <td>BYHOUR</td>
                <td>byHour</td>
              </tr>
              <tr>
                <td>BYDAY</td>
                <td>byDay</td>
              </tr>
              <tr>
                <td>BYMONTHDAY</td>
                <td>byMonthDay</td>
              </tr>
              <tr>
                <td>BYYEARDAY</td>
                <td>byYearDay</td>
              </tr>
              <tr>
                <td>BYWEEKNO</td>
                <td>byWeekNo</td>
              </tr>
              <tr>
                <td>BYMONTH</td>
                <td>byMonth</td>
              </tr>
              <tr>
                <td>BYSETPOS</td>
                <td>bySetPosition</td>
              </tr>
              <tr>
                <td>WKST</td>
                <td>firstDayOfWeek</td>
              </tr>
              <tr>
                <td>RSCALE <xref target="RFC7529"/>
                </td>
                <td>rscale</td>
              </tr>
              <tr>
                <td>SKIP <xref target="RFC7529"/>
                </td>
                <td>skip</td>
              </tr>
            </tbody>
          </table>
          <t>The string values of the FREQ, WKST, RSCALE convert to lowercase.  The UNTIL part in a VEVENT or VTODO converts to a LocalDateTime value relative to the timezone of the Event or Task, or to floating time for the TimeZoneRule object.</t>
          <t>The following example illustrates how to convert the RRULE property:</t>
          <figure anchor="test-ical-prop-rrule">
            <name>Example for converting the RRULE property</name>
            <sourcecode type="icalendar"><![CDATA[
DTSTART;TZID=Europe/Berlin:20240101T010000
RRULE:FREQ=YEARLY
 ;INTERVAL=2
 ;BYMONTH=1
 ;BYDAY=SU
 ;BYHOUR=8,9
 ;BYMINUTE=30
 ;UNTIL=20240930T120000Z
]]></sourcecode>
            <sourcecode type="json"><![CDATA[
"recurrenceRules": [
  {
    "@type": "RecurrenceRule",
    "frequency": "yearly",
    "interval": 2,
    "byMonth": [
      "1"
    ],
    "byDay": [
      {
        "@type": "NDay",
        "day": "su"
      }
    ],
    "byHour": [
      8,
      9
    ],
    "byMinute": [
      30
    ],
    "until": "2024-09-30T14:00:00"
  }
],
"start": "2024-01-01T01:00:00",
"timeZone": "Europe/Berlin"
]]></sourcecode>
          </figure>
        </section>
        <section anchor="ical-prop-sequence">
          <name>SEQUENCE</name>
          <t>
              The <xref target="RFC5545" section="3.8.7.4" sectionFormat="parens">SEQUENCE property</xref> in a VEVENT or VTODO component converts to the <xref target="RFC8984" section="4.1.7" sectionFormat="parens">sequence property</xref> of the Event or Task object. The SEQUENCE property in a PARTICIPANT component converts to the <xref target="RFC8984" section="4.4.6" sectionFormat="parens">scheduleSequence property</xref> of the Participant object.
          </t>
          <t>The following example illustrates how to convert the SEQUENCE property:</t>
          <figure anchor="test-ical-prop-sequence">
            <name>Example for converting the SEQUENCE property</name>
            <sourcecode type="icalendar"><![CDATA[
SEQUENCE:3
]]></sourcecode>
            <sourcecode type="json"><![CDATA[
"sequence": 3
]]></sourcecode>
          </figure>
        </section>
        <section anchor="ical-prop-status">
          <name>STATUS</name>
          <t>
            The <xref target="RFC5545" section="3.8.1.11" sectionFormat="parens">STATUS property</xref> in a VEVENT component converts to the <xref target="RFC8984" section="5.1.3" sectionFormat="parens">status property</xref> of the Event object.

            The STATUS property in a VTODO component converts to the <xref target="RFC8984" section="5.2.5" sectionFormat="parens">progress property</xref> of the Task object.
          </t>
          <t>The property value converts in lowercase.</t>
          <t>The following examples illustrate how to convert the STATUS property:</t>
          <figure anchor="test-ical-prop-status-vevent">
            <name>Example for converting the STATUS property in a VEVENT component</name>
            <sourcecode type="icalendar"><![CDATA[
STATUS:TENTATIVE
]]></sourcecode>
            <sourcecode type="json"><![CDATA[
"status": "tentative"
]]></sourcecode>
          </figure>
          <figure anchor="test-ical-prop-status-vtodo">
            <name>Example for converting the STATUS property in a VTODO component</name>
            <sourcecode type="icalendar"><![CDATA[
BEGIN:VTODO
STATUS:IN-PROCESS
...
]]></sourcecode>
            <sourcecode type="json"><![CDATA[
{
  "@type": "Task",
  "progress": "in-process",
  "...": ""
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="ical-prop-source">
          <name>SOURCE</name>
          <t>
            The <xref target="RFC7986" section="5.8" sectionFormat="parens">SOURCE property</xref> in a VCALENDAR component converts to the <xref target="RFC8984" section="5.3.2" sectionFormat="parens">source property</xref>.
          </t>
          <t>The following example illustrates how to convert the SOURCE property:</t>
          <figure anchor="test-ical-prop-source">
            <name>Example for converting the SOURCE property</name>
            <sourcecode type="icalendar"><![CDATA[
BEGIN:VCALENDAR
SOURCE;VALUE=URI:https://example.com/holidays.ics
...
]]></sourcecode>
            <sourcecode type="json"><![CDATA[
{
  "@type": "Group",
  "source": "https://example.com/holidays.ics",
  "...": ""
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="ical-prop-structured-data">
          <name>STRUCTURED-DATA</name>
          <t>
            The <xref target="RFC9073" section="6.6" sectionFormat="parens">STRUCTURED-DATA property</xref> of type URI or BINARY in a VEVENT, VTODO, VCALENDAR, VRESOURCE, PARTICIPANT, or VLOCATION component converts to a <xref target="RFC8984" section="1.4.11" sectionFormat="parens">Link object</xref>.  The converted object is set in the links property of the Event, Task, Group, Participant, or Location object.
          </t>
          <t>The property value converts to the href property of the Link object. A value of type URI converts as-is. See <xref target="ical-prop-attach"/> how to convert a BINARY value.</t>
          <t>Its parameters convert as follows:</t>
          <table>
            <name>Parameters of the STRUCTURED-DATA property</name>
            <thead>
              <tr>
                <th>Name</th>
                <th>Reference</th>
                <th>Property</th>
                <th>Note</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td>FMTTYPE</td>
                <td>
                  <xref target="RFC5545" section="3.2.8" sectionFormat="comma"/>
                </td>
                <td>contentType</td>
                <td/>
              </tr>
            </tbody>
          </table>
          <t>Implementations <bcp14>MAY</bcp14> preserve the fact that the Link object got converted from a STRUCTURED-DATA property. To so, they <bcp14>MUST</bcp14> set the <xref target="jscal-prop-icalproperty">iCalProperty</xref> on the Link object.</t>
          <t>The following example illustrates how to convert the STRUCTURED-DATA property:</t>
          <figure anchor="test-ical-prop-structured-data">
            <name>Converting the STRUCTURED-DATA property</name>
            <sourcecode type="text/calendar"><![CDATA[
STRUCTURED-DATA;FMTTYPE=application/ld+json;
 SCHEMA="https://schema.org/FlightReservation";
 ENCODING=BASE64;VALUE=BINARY:InRydW5jYXRlZC4uLiIK
  ]]></sourcecode>
            <sourcecode type="json"><![CDATA[
"links": {
  "@type": "Link",
  "contentType": "application/ld+json",
  "href": "data:application/ld+json;base64,InRydW5jYXRlZC4uLiIK",
  "iCalProperty": {
    "@type": "ICalProperty",
    "name": "structured-data",
    "parameters": {
      "schema": "https://schema.org/FlightReservation"
    },
    "valueType": "binary"
  }
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="ical-prop-styled-description">
          <name>STYLED-DESCRIPTION</name>
          <t>The <xref target="RFC9073" section="6.5" sectionFormat="parens">STYLED-DESCRIPTION property</xref> in a VEVENT or VTODO component converts to the <xref target="RFC8984" section="4.2.2" sectionFormat="parens">description property</xref> under the following conditions:</t>
          <ul>
            <li>The property value type <bcp14>MUST</bcp14> be TEXT.</li>
            <li>The FMTTYPE parameter either <bcp14>MUST NOT</bcp14> not be set, or its value <bcp14>MUST</bcp14> be a <xref target="RFC6838">media type</xref> with top-level type "text".</li>
            <li>Its DERIVED parameter value <bcp14>MUST NOT</bcp14> be TRUE.</li>
          </ul>
          <t>If the DERIVED parameter value is TRUE, then the property does not convert to the description property. Instead, an non-derived STYLED-DESCRIPTION property or the DESCRIPTION property is expected to contain the description. Implementations MAY preserve the property in the <xref target="jscal-prop-icalcomponent">iCalComponent property</xref>.</t>
          <t>Its parameters convert as follows:</t>
          <table>
            <name>Parameters of the STYLED-DESCRIPTION property</name>
            <thead>
              <tr>
                <th>Name</th>
                <th>Reference</th>
                <th>Property</th>
                <th>Note</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td>FMTTYPE</td>
                <td>
                  <xref target="RFC5545" section="3.2.8" sectionFormat="comma"/>
                </td>
                <td>descriptionContentType</td>
                <td/>
              </tr>
            </tbody>
          </table>
          <t>The following example illustrates how to convert the STYLED-DESCRIPTION property:</t>
          <figure anchor="test-ical-prop-styled-description">
            <name>Converting the STYLED-DESCRIPTION property</name>
            <sourcecode type="text/calendar"><![CDATA[
STYLED-DESCRIPTION;VALUE=TEXT;FMTTYPE=text/html:
 <!DOCTYPE html><html><body>hello,<b>world</b></body></html>
  ]]></sourcecode>
            <sourcecode type="json"><![CDATA[
"description": "<!DOCTYPE html><html><body>hello,<b>world</b></body></html>",
"descriptionContentType": "text/html"
]]></sourcecode>
          </figure>
        </section>
        <section anchor="ical-prop-summary">
          <name>SUMMARY</name>
          <t>
            The <xref target="RFC5545" section="3.8.1.12" sectionFormat="parens">SUMMARY property</xref> in a VEVENT or VTODO component converts to the <xref target="RFC8984" section="4.2.1" sectionFormat="parens">title property</xref>.
          </t>
          <t>
            The <xref target="RFC5545" section="3.8.1.12" sectionFormat="parens">SUMMARY property</xref> in a PARTICIPANT component converts to the <xref target="RFC8984" section="4.2.5" sectionFormat="parens">name property</xref>.
          </t>
          <t>The following examples illustrate how to convert the SUMMARY property:</t>
          <figure anchor="test-ical-prop-summary">
            <name>Converting the SUMMARY property in a VEVENT</name>
            <sourcecode type="text/calendar"><![CDATA[
SUMMARY:Birthday Party
  ]]></sourcecode>
            <sourcecode type="json"><![CDATA[
"title": "Birthday Party"
]]></sourcecode>
          </figure>
          <figure anchor="test-ical-prop-summary-participant">
            <name>Converting the SUMMARY property in a PARTICIPANT</name>
            <sourcecode type="text/calendar"><![CDATA[
BEGIN:VEVENT
BEGIN:PARTICIPANT
SUMMARY:John
...
  ]]></sourcecode>
            <sourcecode type="json"><![CDATA[
"participants": {
  "1": {
    "@type": "Participant",
    "name": "John",
    "...": ""
  }
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="ical-prop-transp">
          <name>TRANSP</name>
          <t>
            The <xref target="RFC5545" section="3.8.2.7" sectionFormat="parens">TRANSP property</xref> in a VEVENT or VTODO component converts to the <xref target="RFC8984" section="4.4.2" sectionFormat="parens">freeBusyStatus property</xref>.
          </t>
          <t>Its values convert as follows:</t>
          <table anchor="ical-prop-transp-values">
            <name>Values of the TRANSP property</name>
            <thead>
              <tr>
                <th>iCalendar value</th>
                <th>JSCalendar value</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td>OPAQUE</td>
                <td>busy</td>
              </tr>
              <tr>
                <td>TRANSPARENT</td>
                <td>free</td>
              </tr>
            </tbody>
          </table>
          <t>The following example illustrates how to convert the TRANSP property:</t>
          <figure anchor="test-ical-prop-transp">
            <name>Converting the TRANSP property</name>
            <sourcecode type="text/calendar"><![CDATA[
TRANSP:TRANSPARENT
  ]]></sourcecode>
            <sourcecode type="json"><![CDATA[
"freeBusyStatus": "free"
]]></sourcecode>
          </figure>
        </section>
        <section anchor="ical-prop-trigger">
          <name>TRIGGER</name>
          <t>
            The <xref target="RFC5545" section="3.8.6.3" sectionFormat="parens">TRIGGER property</xref> in a VALARM component converts to either an AbsoluteTrigger or OffsetTrigger object.  The converted object is set in the <xref target="RFC8984" section="4.5.2" sectionFormat="parens">trigger property</xref> of the Alert object.
          </t>
          <t>A property of value type DURATION converts an OffsetTrigger object. The property value converts to its offset property. A value of type DATE-TIME converts to an AbsoluteTrigger object. The property value converts to its when property.</t>
          <t>Its parameters convert as follows:</t>
          <table>
            <name>Parameters of the TRIGGER property</name>
            <thead>
              <tr>
                <th>Name</th>
                <th>Reference</th>
                <th>Property</th>
                <th>Note</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td>RELATED</td>
                <td>
                  <xref target="RFC5545" section="3.2.14" sectionFormat="comma"/>
                </td>
                <td>relativeTo</td>
                <td>If VALUE=DURATION</td>
              </tr>
            </tbody>
          </table>
          <t>The following examples illustrate how to convert the TRIGGER property:</t>
          <figure anchor="test-ical-prop-trigger-offset">
            <name>Converting the TRIGGER property to an OffsetTrigger</name>
            <sourcecode type="text/calendar"><![CDATA[
BEGIN:VEVENT
...
BEGIN:VALARM
TRIGGER;RELATED=END:PT5M
...
  ]]></sourcecode>
            <sourcecode type="json"><![CDATA[
"alerts": {
  "2d": {
    "@type": "Alert",
    "trigger": {
      "@type": "OffsetTrigger",
      "offset": "PT5M",
      "relativeTo": "end"
    },
    "...": ""
  }
}
]]></sourcecode>
          </figure>
          <figure anchor="test-ical-prop-trigger-absolute">
            <name>Converting the TRIGGER property to an AbsoluteTrigger</name>
            <sourcecode type="text/calendar"><![CDATA[
BEGIN:VEVENT
...
BEGIN:VALARM
TRIGGER;VALUE=DATE-TIME:20250302T010203Z
...
  ]]></sourcecode>
            <sourcecode type="json"><![CDATA[
"alerts": {
  "14": {
    "@type": "Alert",
    "trigger": {
      "@type": "AbsoluteTrigger",
      "when": "2025-03-02T01:02:03Z"
    },
    "...": ""
  }
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="ical-prop-tzid">
          <name>TZID</name>
          <t>
            The <xref target="RFC5545" section="3.8.3.1" sectionFormat="parens">TZID property</xref> in a VTIMEZONE component converts to the <xref target="RFC8984" section="4.7.2" sectionFormat="parens">tzId property</xref>.
          </t>
          <t>See <xref target="test-ical-comp-vtimezone"/> for an example.</t>
        </section>
        <section anchor="ical-prop-tzid-alias-of">
          <name>TZID-ALIAS-OF</name>
          <t>
            The <xref target="RFC7808" section="7.2" sectionFormat="parens">TZID-ALIAS-OF property</xref> in a VTIMEZONE component converts to an entry in the <xref target="RFC8984" section="4.7.2" sectionFormat="parens">aliases property</xref> of the TimeZone object.
          </t>
          <t>See <xref target="test-ical-comp-vtimezone"/> for an example.</t>
        </section>
        <section anchor="ical-prop-tzname">
          <name>TZNAME</name>
          <t>
            The <xref target="RFC5545" section="3.8.3.2" sectionFormat="parens">TZNAME property</xref> in a DAYLIGHT or STANDARD component converts to an entry in the <xref target="RFC8984" section="4.7.2" sectionFormat="parens">names property</xref> of the TimeZoneRule object.
          </t>
          <t>See <xref target="test-ical-comp-vtimezone"/> for an example.</t>
        </section>
        <section anchor="ical-prop-tzoffsetfrom">
          <name>TZOFFSETFROM</name>
          <t>
            The <xref target="RFC5545" section="3.8.3.3" sectionFormat="parens">TZOFFSETFROM property</xref> in a DAYLIGHT or STANDARD component converts to the <xref target="RFC8984" section="4.7.2" sectionFormat="parens">offsetFrom property</xref> of the TimeZoneRule object.
          </t>
          <t>See <xref target="test-ical-comp-vtimezone"/> for an example.</t>
        </section>
        <section anchor="ical-prop-tzoffsetto">
          <name>TZOFFSETTO</name>
          <t>
            The <xref target="RFC5545" section="3.8.3.4" sectionFormat="parens">TZOFFSETTO property</xref> in a DAYLIGHT or STANDARD component converts to the <xref target="RFC8984" section="4.7.2" sectionFormat="parens">offsetTo property</xref> of the TimeZoneRule object.
          </t>
          <t>See <xref target="test-ical-comp-vtimezone"/> for an example.</t>
        </section>
        <section anchor="ical-prop-tzuntil">
          <name>TZUNTIL</name>
          <t>The <xref target="RFC7808" section="7.1" sectionFormat="parens">TZUNTIL property</xref> in a VTIMEZONE component converts to the <xref target="RFC8984" section="4.7.2" sectionFormat="parens">validUntil property</xref>.</t>
          <t>See <xref target="convert-date-and-date-time"/> how to convert DATE and DATE-TIME values.</t>
          <t>See <xref target="test-ical-comp-vtimezone"/> for an example.</t>
        </section>
        <section anchor="ical-prop-tzurl">
          <name>TZURL</name>
          <t>
            The <xref target="RFC5545" section="3.8.3.5" sectionFormat="parens">TZURL property</xref> in a VTIMEZONE component converts to the <xref target="RFC8984" section="4.7.2" sectionFormat="parens">url property</xref> of the TimeZone object.
          </t>
          <t>See <xref target="test-ical-comp-vtimezone"/> for an example.</t>
        </section>
        <section anchor="ical-prop-uid">
          <name>UID</name>
          <t>
            The <xref target="RFC5545" section="3.8.4.7" sectionFormat="parens">UID property</xref> in a VEVENT, VTODO, or VCALENDAR component converts to the <xref target="RFC8984" section="4.1.2" sectionFormat="parens">uid property</xref>.
          </t>
          <t>The following example illustrates how to convert the UID property:</t>
          <figure anchor="test-ical-prop-uid">
            <name>Converting the UID property</name>
            <sourcecode type="text/calendar"><![CDATA[
UID:5ACEA86F-40CF-47EE-9CCA-7C85588A589F
  ]]></sourcecode>
            <sourcecode type="json"><![CDATA[
"uid": "5ACEA86F-40CF-47EE-9CCA-7C85588A589F"
]]></sourcecode>
          </figure>
        </section>
        <section anchor="ical-prop-url">
          <name>URL</name>
          <t>
            The <xref target="RFC5545" section="3.8.4.6" sectionFormat="parens">URL property</xref> in a VEVENT, VTODO, VCALENDAR, or PARTICIPANT component converts to a <xref target="RFC8984" section="1.4.11" sectionFormat="parens">Link object</xref>.  The converted object is set in the links property of the Event, Task, Group, or Participant object.
          </t>
          <t>The property value converts to the href property of the Link object.</t>
          <t>Implementations <bcp14>MAY</bcp14> preserve the fact that the Link object got converted from an URL property. To so, they <bcp14>MUST</bcp14> set the <xref target="jscal-prop-icalproperty">iCalProperty</xref> on the Link object.</t>
          <t>The following example illustrates how to convert the URL property:</t>
          <figure anchor="test-ical-prop-url">
            <name>Converting the IMAGE property</name>
            <sourcecode type="text/calendar"><![CDATA[
URL:https://example.com/calendar/birtdays.ics
  ]]></sourcecode>
            <sourcecode type="json"><![CDATA[
"links": {
  "3": {
    "@type": "Link",
    "href": "https://example.com/calendar/birtdays.ics",
    "iCalProperty": {
      "@type": "ICalProperty",
      "name": "url"
    }
  }
}
]]></sourcecode>
          </figure>
        </section>
      </section>
    </section>
    <section anchor="jscal-to-icalendar">
      <name>Converting JSCalendar to iCalendar</name>
      <section anchor="jscal-alert">
        <name>Alert</name>
        <t>The <xref target="RFC8984" section="4.5.2" sectionFormat="parens">Alert object</xref> converts to a <xref target="ical-comp-valarm">VALARM component</xref>.</t>
        <t>Its properties convert as follows:</t>
        <table>
          <name>Properties of the Alert object</name>
          <thead>
            <tr>
              <th>Name</th>
              <th>Reference</th>
              <th>Property (or other)</th>
              <th>See</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td>acknowledged</td>
              <td>
                <xref target="RFC8984" section="4.5.2" sectionFormat="comma"/>
              </td>
              <td>ACKNOWLEDGED</td>
              <td>
                <xref target="ical-prop-acknowledged"/>
              </td>
            </tr>
            <tr>
              <td>action</td>
              <td>
                <xref target="RFC8984" section="4.5.2" sectionFormat="comma"/>
              </td>
              <td>ACTION</td>
              <td>
                <xref target="ical-prop-action"/>
              </td>
            </tr>
            <tr>
              <td>relatedTo</td>
              <td>
                <xref target="RFC8984" section="4.1.3" sectionFormat="comma"/>
              </td>
              <td>RELATED-TO</td>
              <td>
                <t>
                  <xref target="ical-prop-related-to"/>, and remarks below</t>
              </td>
            </tr>
            <tr>
              <td>trigger</td>
              <td>
                <xref target="RFC8984" section="4.5.2" sectionFormat="comma"/>
              </td>
              <td>TRIGGER</td>
              <td>
                <xref target="ical-prop-trigger"/>
              </td>
            </tr>
          </tbody>
        </table>
        <t>Remarks:</t>
        <ul>
          <li>
            <t>The value of the RELATED-TO property is the UID property value of that VALARM component, to which the related  Alert object converts to. Consequently, the UID property for such a VALARM <bcp14>MUST</bcp14> be set, otherwise the UID property <bcp14>SHOULD</bcp14> be set.</t>
          </li>
        </ul>
      </section>
      <section anchor="jscal-event-and-task">
        <name>Event and Task</name>
        <t>The <xref target="RFC8984" section="2.1" sectionFormat="parens">Event object</xref> converts to a <xref target="ical-comp-vevent">VEVENT component</xref>, the <xref target="RFC8984" section="2.2" sectionFormat="parens">Task object</xref> converts to a <xref target="ical-comp-vtodo">VTODO component</xref>.</t>
        <t>
            The following table defines how to convert properties that are common to both the Event and Task object types. <xref target="jscal-event-props"/> and <xref target="jscal-task-props"/> later in this section define how to convert properties specific to either Event or Task objects.</t>
        <table anchor="jscal-event-and-task-props">
          <name>Properties of the Event and Task object</name>
          <thead>
            <tr>
              <th>Name</th>
              <th>Reference</th>
              <th>Property (or other)</th>
              <th>See</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td>alerts</td>
              <td>
                <xref target="RFC8984" section="4.5.2" sectionFormat="comma"/>
              </td>
              <td>VALARM (component)</td>
              <td>
                <xref target="jscal-alert">Alert object</xref>
              </td>
            </tr>
            <tr>
              <td>categories</td>
              <td>
                <xref target="RFC8984" section="4.2.10" sectionFormat="comma"/>
              </td>
              <td>CONCEPT</td>
              <td>
                <xref target="ical-prop-concept"/>
              </td>
            </tr>
            <tr>
              <td>color</td>
              <td>
                <xref target="RFC8984" section="4.2.11" sectionFormat="comma"/>
              </td>
              <td>COLOR</td>
              <td>
                <xref target="ical-prop-color"/>
              </td>
            </tr>
            <tr>
              <td>created</td>
              <td>
                <xref target="RFC8984" section="4.1.5" sectionFormat="comma"/>
              </td>
              <td>CREATED</td>
              <td>
                <xref target="ical-prop-created"/>
              </td>
            </tr>
            <tr>
              <td>description</td>
              <td>
                <xref target="RFC8984" section="4.2.2" sectionFormat="comma"/>
              </td>
              <td>DESCRIPTION, or STYLED-DESCRIPTION</td>
              <td>
                <t>
                  <xref target="ical-prop-description"/>, <xref target="ical-prop-styled-description"/>, and remarks below</t>
              </td>
            </tr>
            <tr>
              <td>descriptionContentType</td>
              <td>
                <xref target="RFC8984" section="4.2.3" sectionFormat="comma"/>
              </td>
              <td>FMTTYPE (parameter) of STYLED-DESCRIPTION</td>
              <td>
                <t>
                  <xref target="ical-prop-styled-description"/>, and remarks below</t>
              </td>
            </tr>
            <tr>
              <td>excluded</td>
              <td>
                <xref target="RFC8984" section="4.3.6" sectionFormat="comma"/>
              </td>
              <td/>
              <td>
                <t>
                  <xref target="ical-prop-exdate"/>, and remarks about recurrenceOverrides below</t>
              </td>
            </tr>
            <tr>
              <td>excludedRecurrenceRules</td>
              <td>
                <xref target="RFC8984" section="4.3.4" sectionFormat="comma"/>
              </td>
              <td>EXRULE</td>
              <td>
                <t>
                  <xref target="ical-prop-exrule"/>
                </t>
              </td>
            </tr>
            <tr>
              <td>freeBusyStatus</td>
              <td>
                <xref target="RFC8984" section="4.4.2" sectionFormat="comma"/>
              </td>
              <td>TRANSP</td>
              <td>
                <t>
                  <xref target="ical-prop-transp"/>
                </t>
              </td>
            </tr>
            <tr>
              <td>keywords</td>
              <td>
                <xref target="RFC8984" section="4.2.9" sectionFormat="comma"/>
              </td>
              <td>CATEGORIES</td>
              <td>
                <t>
                  <xref target="ical-prop-categories"/>
                </t>
              </td>
            </tr>
            <tr>
              <td>links</td>
              <td>
                <xref target="RFC8984" section="4.2.7" sectionFormat="comma"/>
              </td>
              <td>ATTACH, or other</td>
              <td>
                <t>
                  <xref target="jscal-link">Link object</xref>
                </t>
              </td>
            </tr>
            <tr>
              <td>locale</td>
              <td>
                <xref target="RFC8984" section="4.2.8" sectionFormat="comma"/>
              </td>
              <td>TBD</td>
              <td/>
            </tr>
            <tr>
              <td>localizations</td>
              <td>
                <xref target="RFC8984" section="4.6.1" sectionFormat="comma"/>
              </td>
              <td>TBD</td>
              <td/>
            </tr>
            <tr>
              <td>locations</td>
              <td>
                <xref target="RFC8984" section="4.2.5" sectionFormat="comma"/>
              </td>
              <td>LOCATION, GEO, or VLOCATION (component)</td>
              <td>
                <t>
                  <xref target="jscal-location">Location object</xref>
                </t>
              </td>
            </tr>
            <tr>
              <td>method</td>
              <td>
                <xref target="RFC8984" section="4.1.8" sectionFormat="comma"/>
              </td>
              <td>METHOD of iCalendar object</td>
              <td>
                <t>
                  <xref target="ical-prop-method"/>, and <xref target="jscal-group">Group object</xref>
                </t>
              </td>
            </tr>
            <tr>
              <td>participants</td>
              <td>
                <xref target="RFC8984" section="4.4.6" sectionFormat="comma"/>
              </td>
              <td>ATTENDEE, or PARTICIPANT (component)</td>
              <td>
                <t>
                  <xref target="jscal-participant">Participant object</xref>
                </t>
              </td>
            </tr>
            <tr>
              <td>priority</td>
              <td>
                <xref target="RFC8984" section="4.4.1" sectionFormat="comma"/>
              </td>
              <td>PRIORITY</td>
              <td>
                <t>
                  <xref target="ical-prop-priority"/>
                </t>
              </td>
            </tr>
            <tr>
              <td>privacy</td>
              <td>
                <xref target="RFC8984" section="4.4.3" sectionFormat="comma"/>
              </td>
              <td>CLASS</td>
              <td>
                <t>
                  <xref target="ical-prop-class"/>
                </t>
              </td>
            </tr>
            <tr>
              <td>prodId</td>
              <td>
                <xref target="RFC8984" section="4.1.4" sectionFormat="comma"/>
              </td>
              <td>PRODID of iCalendar object</td>
              <td>
                <t>
                  <xref target="ical-prop-prodid"/>, and <xref target="jscal-group">Group object</xref>
                </t>
              </td>
            </tr>
            <tr>
              <td>recurrenceId</td>
              <td>
                <xref target="RFC8984" section="4.3.1" sectionFormat="comma"/>
              </td>
              <td>RECURRENCE-ID</td>
              <td>
                <t>
                  <xref target="ical-prop-recurrence-id"/>
                </t>
              </td>
            </tr>
            <tr>
              <td>recurrenceIdTimeZone</td>
              <td>
                <xref target="RFC8984" section="4.3.2" sectionFormat="comma"/>
              </td>
              <td>TZID (parameter) of RECURRENCE-ID</td>
              <td>
                <t>
                  <xref target="ical-prop-recurrence-id"/>
                </t>
              </td>
            </tr>
            <tr>
              <td>recurrenceOverrides</td>
              <td>
                <xref target="RFC8984" section="4.3.5" sectionFormat="comma"/>
              </td>
              <td>RDATE, EXDATE or recurrence override component</td>
              <td>
                <xref target="ical-recurring-components"/>, and remarks below</td>
            </tr>
            <tr>
              <td>recurrenceRules</td>
              <td>
                <xref target="RFC8984" section="4.3.3" sectionFormat="comma"/>
              </td>
              <td>RRULE</td>
              <td>
                <t>
                  <xref target="ical-prop-rrule"/>
                </t>
              </td>
            </tr>
            <tr>
              <td>relatedTo</td>
              <td>
                <xref target="RFC8984" section="4.1.3" sectionFormat="comma"/>
              </td>
              <td>RELATED-TO</td>
              <td>
                <t>
                  <xref target="ical-prop-related-to"/>
                </t>
              </td>
            </tr>
            <tr>
              <td>replyTo</td>
              <td>
                <xref target="RFC8984" section="4.4.4" sectionFormat="comma"/>
              </td>
              <td>ORGANIZER</td>
              <td>
                <t>
                  <xref target="ical-prop-organizer"/>, and remarks below</t>
              </td>
            </tr>
            <tr>
              <td>requestStatus</td>
              <td>
                <xref target="RFC8984" section="4.4.7" sectionFormat="comma"/>
              </td>
              <td>REQUEST-STATUS</td>
              <td>
                <t>
                  <xref target="ical-prop-request-status"/>
                </t>
              </td>
            </tr>
            <tr>
              <td>sentBy</td>
              <td>
                <xref target="RFC8984" section="4.4.5" sectionFormat="comma"/>
              </td>
              <td>TBD</td>
              <td/>
            </tr>
            <tr>
              <td>sequence</td>
              <td>
                <xref target="RFC8984" section="4.1.7" sectionFormat="comma"/>
              </td>
              <td>SEQUENCE</td>
              <td>
                <t>
                  <xref target="ical-prop-sequence"/>
                </t>
              </td>
            </tr>
            <tr>
              <td>showWithoutTime</td>
              <td>
                <xref target="RFC8984" section="4.2.4" sectionFormat="comma"/>
              </td>
              <td>TBD</td>
              <td/>
            </tr>
            <tr>
              <td>start</td>
              <td>
                <xref target="RFC8984" section="4.7.2" sectionFormat="comma"/>
              </td>
              <td>DTSTART</td>
              <td>
                <t>
                  <xref target="ical-prop-dtstart"/>
                </t>
              </td>
            </tr>
            <tr>
              <td>timeZone</td>
              <td>
                <xref target="RFC8984" section="4.7.1" sectionFormat="comma"/>
              </td>
              <td>TZID (parameter) of DTSTART and DUE</td>
              <td>
                <t>
                  <xref target="ical-prop-dtstart"/>, <xref target="ical-prop-due"/>
                </t>
              </td>
            </tr>
            <tr>
              <td>timeZones</td>
              <td>
                <xref target="RFC8984" section="4.7.2" sectionFormat="comma"/>
              </td>
              <td>VTIMEZONE (component) of iCalendar object</td>
              <td>
                <t>
                  <xref target="jscal-timezone">TimeZone object</xref>
                </t>
              </td>
            </tr>
            <tr>
              <td>title</td>
              <td>
                <xref target="RFC8984" section="4.2.1" sectionFormat="comma"/>
              </td>
              <td>SUMMARY</td>
              <td>
                <t>
                  <xref target="ical-prop-summary"/>
                </t>
              </td>
            </tr>
            <tr>
              <td>uid</td>
              <td>
                <xref target="RFC8984" section="4.1.2" sectionFormat="comma"/>
              </td>
              <td>UID</td>
              <td>
                <t>
                  <xref target="ical-prop-uid"/>
                </t>
              </td>
            </tr>
            <tr>
              <td>updated</td>
              <td>
                <xref target="RFC8984" section="4.1.6" sectionFormat="comma"/>
              </td>
              <td>DTSTAMP, and LAST-MODIFIED</td>
              <td>
                <t>
                  <xref target="ical-prop-dtstamp"/>, <xref target="ical-prop-last-modified"/>
                </t>
              </td>
            </tr>
            <tr>
              <td>useDefaultAlerts</td>
              <td>
                <xref target="RFC8984" section="4.5.1" sectionFormat="comma"/>
              </td>
              <td>TBD</td>
              <td/>
            </tr>
            <tr>
              <td>virtualLocations</td>
              <td>
                <xref target="RFC8984" section="4.2.6" sectionFormat="comma"/>
              </td>
              <td>CONFERENCE</td>
              <td>
                <t>
                  <xref target="ical-prop-conference"/>
                </t>
              </td>
            </tr>
          </tbody>
        </table>
        <t>Remarks:</t>
        <ul>
          <li>
            <t>The descriptionContentType property value determines if to convert the description property to the DESCRIPTION or STYLED-DESCRIPTION property. A description of content type "text/plain" converts to the DESCRIPTION property. Any other description converts to a STYLED-DESCRIPTION; in this case, a plain text version of the rich-text description <bcp14>SHOULD</bcp14> be set in the DESCRIPTION property and its DERIVED parameter <bcp14>MUST</bcp14> be set to "TRUE".</t>
          </li>
          <li>
            <t>The entries in the recurrenceOverrides property convert depending on the contents of the patch object value. A patch object that sets the excluded property to "true" converts to an EXDATE property for the date-time of that recurrence instance. An empty patch object converts to an RDATE property. Any other patch object converts to a recurrence override component in the embedding VCALENDAR component.</t>
          </li>
          <li>
            <t>The replyTo property converts to the ORGANIZER property. If the replyTo property value only defines a single scheduling method then the URI value of that method converts to the ORGANIZER property value. If the replyTo property defines multiple scheduling methods, and a Participant object with a calendarAddress property value matching one of the replyTo URIs exists in the same Event or Task, then the URI matching the calendarAddress property converts to the ORGANIZER property value. Otherwise choosing the ORGANIZER property value is implementation-specific. TBD how to convert other replyTo methods.</t>
          </li>
        </ul>
        <t>Properties specific to the Event object type convert to iCalendar properties as follows:</t>
        <table anchor="jscal-event-props">
          <name>Properties of the Event object</name>
          <thead>
            <tr>
              <th>Name</th>
              <th>Reference</th>
              <th>Property (or other)</th>
              <th>See</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td>duration</td>
              <td>
                <xref target="RFC8984" section="5.1.2" sectionFormat="comma"/>
              </td>
              <td>DURATION, or DTEND</td>
              <td>
                <t>
                  <xref target="ical-prop-duration"/>, <xref target="ical-prop-dtend"/>
                </t>
              </td>
            </tr>
            <tr>
              <td>status</td>
              <td>
                <xref target="RFC8984" section="5.1.3" sectionFormat="comma"/>
              </td>
              <td>STATUS</td>
              <td>
                <t>
                  <xref target="ical-prop-status"/>
                </t>
              </td>
            </tr>
          </tbody>
        </table>
        <t>Properties specific to the Task object type convert to iCalendar properties as follows:</t>
        <table anchor="jscal-task-props">
          <name>Properties of the Task object</name>
          <thead>
            <tr>
              <th>Name</th>
              <th>Reference</th>
              <th>Property (or other)</th>
              <th>See</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td>due</td>
              <td>
                <xref target="RFC8984" section="5.2.1" sectionFormat="comma"/>
              </td>
              <td>DUE</td>
              <td>
                <t>
                  <xref target="ical-prop-due"/>
                </t>
              </td>
            </tr>
            <tr>
              <td>estimatedDuration</td>
              <td>
                <xref target="RFC8984" section="5.2.3" sectionFormat="comma"/>
              </td>
              <td>TBD</td>
              <td/>
            </tr>
            <tr>
              <td>percentComplete</td>
              <td>
                <xref target="RFC8984" section="5.2.4" sectionFormat="comma"/>
              </td>
              <td>PERCENT-COMPLETE</td>
              <td>
                <t>
                  <xref target="ical-prop-percent-complete"/>
                </t>
              </td>
            </tr>
            <tr>
              <td>progress</td>
              <td>
                <xref target="RFC8984" section="5.2.5" sectionFormat="comma"/>
              </td>
              <td>STATUS</td>
              <td>
                <t>
                  <xref target="ical-prop-status"/>
                </t>
              </td>
            </tr>
            <tr>
              <td>progressUpdated</td>
              <td>
                <xref target="RFC8984" section="5.2.6" sectionFormat="comma"/>
              </td>
              <td>TBD</td>
              <td/>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="jscal-group">
        <name>Group</name>
        <t>The <xref target="RFC8984" section="2.3" sectionFormat="parens">Group object</xref> converts to a <xref target="ical-comp-vcalendar">VCALENDAR component</xref>.</t>
        <t>Its properties convert as follows:</t>
        <table>
          <name>Properties of the Group object</name>
          <thead>
            <tr>
              <th>Name</th>
              <th>Reference</th>
              <th>Property (or other)</th>
              <th>See</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td>categories</td>
              <td>
                <xref target="RFC8984" section="4.2.10" sectionFormat="comma"/>
              </td>
              <td>CONCEPT</td>
              <td>
                <t>
                  <xref target="ical-prop-concept"/>
                </t>
              </td>
            </tr>
            <tr>
              <td>color</td>
              <td>
                <xref target="RFC8984" section="4.2.11" sectionFormat="comma"/>
              </td>
              <td>COLOR</td>
              <td>
                <t>
                  <xref target="ical-prop-color"/>
                </t>
              </td>
            </tr>
            <tr>
              <td>created</td>
              <td>
                <xref target="RFC8984" section="4.1.5" sectionFormat="comma"/>
              </td>
              <td>CREATED</td>
              <td>
                <t>
                  <xref target="ical-prop-created"/>
                </t>
              </td>
            </tr>
            <tr>
              <td>entries</td>
              <td>
                <xref target="RFC8984" section="5.3.1" sectionFormat="comma"/>
              </td>
              <td>VEVENT or VTODO (component)</td>
              <td>
                <t>
                  <xref target="jscal-event-and-task">Event and Task object</xref>, and remarks below</t>
              </td>
            </tr>
            <tr>
              <td>keywords</td>
              <td>
                <xref target="RFC8984" section="4.2.9" sectionFormat="comma"/>
              </td>
              <td>CATEGORIES</td>
              <td>
                <t>
                  <xref target="ical-prop-categories"/>
                </t>
              </td>
            </tr>
            <tr>
              <td>links</td>
              <td>
                <xref target="RFC8984" section="4.2.7" sectionFormat="comma"/>
              </td>
              <td>ATTACH, or other</td>
              <td>
                <t>
                  <xref target="jscal-link">Link object</xref>
                </t>
              </td>
            </tr>
            <tr>
              <td>locale</td>
              <td>
                <xref target="RFC8984" section="4.2.8" sectionFormat="comma"/>
              </td>
              <td>TBD</td>
              <td/>
            </tr>
            <tr>
              <td>prodId</td>
              <td>
                <xref target="RFC8984" section="4.1.4" sectionFormat="comma"/>
              </td>
              <td>PRODID</td>
              <td>
                <t>
                  <xref target="ical-prop-prodid"/>, and remarks below</t>
              </td>
            </tr>
            <tr>
              <td>source</td>
              <td>
                <xref target="RFC8984" section="5.3.2" sectionFormat="comma"/>
              </td>
              <td>SOURCE</td>
              <td>
                <t>
                  <xref target="ical-prop-source"/>
                </t>
              </td>
            </tr>
            <tr>
              <td>title</td>
              <td>
                <xref target="RFC8984" section="4.2.1" sectionFormat="comma"/>
              </td>
              <td>NAME</td>
              <td>
                <t>
                  <xref target="ical-prop-name"/>
                </t>
              </td>
            </tr>
            <tr>
              <td>uid</td>
              <td>
                <xref target="RFC8984" section="4.1.2" sectionFormat="comma"/>
              </td>
              <td>UID</td>
              <td>
                <t>
                  <xref target="ical-prop-uid"/>
                </t>
              </td>
            </tr>
            <tr>
              <td>updated</td>
              <td>
                <xref target="RFC8984" section="4.1.6" sectionFormat="comma"/>
              </td>
              <td>LAST-MODIFIED</td>
              <td>
                <t>
                  <xref target="ical-prop-last-modified"/>
                </t>
              </td>
            </tr>
          </tbody>
        </table>
        <t>Remarks:</t>
        <ul>
          <li>
            <t>The prodId property value of the Group object is expected to be equal to the prodId property value of all the Group entries. They all convert to the same, single PRODID property in the VCALENDAR component. How to convert unequal prodId property values is implementation-specific. </t>
          </li>
          <li>
            <t>The method property value in all the Group entries is expected to be equal. How to convert entries with unequal method property values is implementation-specific.</t>
          </li>
        </ul>
      </section>
      <section anchor="jscal-link">
        <name>Link</name>
        <t>The <xref target="RFC8984" section="1.4.11" sectionFormat="parens">Link object</xref> converts either an <xref target="ical-prop-attach">ATTACH property</xref>, an <xref target="ical-prop-image">IMAGE property</xref>, a <xref target="ical-prop-link">LINK property</xref>, a <xref target="ical-prop-structured-data">STRUCTURED-DATA property</xref>, or an <xref target="ical-prop-url">URL property</xref>. Which iCalendar property to choose is implementation-specific. As a guideline:</t>
        <ul>
          <li>Choose IMAGE, if the display property is set or the rel property value is "icon".</li>
          <li>Choose LINK, if the rel property is set to any other value.</li>
          <li>Choose URL, if only the href property is set and its value links to a dynamic rendition of the calendar object.</li>
          <li>TBD - Choose STRUCTURED-DATA, if the schema property is set.</li>
          <li>Choose ATTACH otherwise.</li>
        </ul>
        <t>The href property converts to the iCalendar property value. The other Link properties convert as follows:</t>
        <table>
          <name>Properties of the Link object</name>
          <thead>
            <tr>
              <th>Name</th>
              <th>Reference</th>
              <th>Parameter (or other)</th>
              <th>See</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td>cid</td>
              <td>
                <xref target="RFC8984" section="1.4.11" sectionFormat="comma"/>
              </td>
              <td>TBD</td>
              <td/>
            </tr>
            <tr>
              <td>contentType</td>
              <td>
                <xref target="RFC8984" section="1.4.11" sectionFormat="comma"/>
              </td>
              <td>FMTTYPE</td>
              <td>
                <xref target="ical-prop-attach"/>
              </td>
            </tr>
            <tr>
              <td>display</td>
              <td>
                <xref target="RFC8984" section="1.4.11" sectionFormat="comma"/>
              </td>
              <td>DISPLAY</td>
              <td>
                <xref target="ical-prop-image"/>
              </td>
            </tr>
            <tr>
              <td>rel</td>
              <td>
                <xref target="RFC8984" section="1.4.11" sectionFormat="comma"/>
              </td>
              <td>LINKREL</td>
              <td>
                <xref target="ical-prop-link"/>, and remarks below</td>
            </tr>
            <tr>
              <td>size</td>
              <td>
                <xref target="RFC8984" section="1.4.11" sectionFormat="comma"/>
              </td>
              <td>SIZE</td>
              <td>
                <xref target="ical-prop-attach"/>
              </td>
            </tr>
            <tr>
              <td>title</td>
              <td>
                <xref target="RFC8984" section="4.2.1" sectionFormat="comma"/>
              </td>
              <td>TBD</td>
              <td/>
            </tr>
          </tbody>
        </table>
        <t>Remarks:</t>
        <ul>
          <li>The LINKREL parameter <bcp14>SHOULD</bcp14> be omitted if the Link object converts to an IMAGE property and the rel property value is "icon".</li>
        </ul>
      </section>
      <section anchor="jscal-location">
        <name>Location</name>
        <t>The <xref target="RFC8984" section="4.2.5" sectionFormat="parens">Location object</xref> converts to either a <xref target="ical-prop-location">LOCATION</xref>, <xref target="ical-prop-geo">GEO</xref>, or <xref target="ical-prop-geo">DTEND</xref> property, or it converts to a <xref target="ical-comp-vlocation">VLOCATION component</xref>. Which iCalendar element to choose is implementation-specific. As a guideline:</t>
        <ul>
          <li>Choose LOCATION, if only the title property is set and the iCalendar component not already contains a LOCATION property. The title property converts to the LOCATION property value.</li>
          <li>Choose GEO, if only the coordinates property is set the iCalendar component not already contains a GEO property. The coordinates property converts to the GEO property value. TBD - How to convert arbitrary geo: URIs?</li>
          <li>Choose DTEND, if the embedding object is an Event, only the timeZone and the relativeTo properties are set, the relativeTo property value is "end" and the iCalendar component not already contains a DTEND property. The timeZone property converts to the TZID parameter of the DTEND property. The duration of the embedding Event object determines the DTEND property value.</li>
          <li>Choose the VLOCATION component otherwise.</li>
        </ul>
        <t>Implementations <bcp14>MAY</bcp14> convert one of the Location objects that convert to a VLOCATION also to the LOCATION property; converting the title or description property to the LOCATION property value is a reasonable choice. The DERIVED parameter <bcp14>MUST</bcp14> be set on the LOCATION property.</t>
        <t>The properties convert to a VLOCATION component as follows:</t>
        <table>
          <name>Properties of the Location object</name>
          <thead>
            <tr>
              <th>Name</th>
              <th>Reference</th>
              <th>Property (or other)</th>
              <th>See</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td>coordinates</td>
              <td>
                <xref target="RFC8984" section="4.2.5" sectionFormat="comma"/>
              </td>
              <td>GEO</td>
              <td>
                <xref target="ical-prop-geo"/>
              </td>
            </tr>
            <tr>
              <td>description</td>
              <td>
                <xref target="RFC8984" section="4.2.2" sectionFormat="comma"/>
              </td>
              <td>DESCRIPTION</td>
              <td>
                <xref target="ical-prop-description"/>
              </td>
            </tr>
            <tr>
              <td>links</td>
              <td>
                <xref target="RFC8984" section="4.2.7" sectionFormat="comma"/>
              </td>
              <td>ATTACH, or other</td>
              <td>
                <t>
                  <xref target="jscal-link">Link object</xref>
                </t>
              </td>
            </tr>
            <tr>
              <td>locationTypes</td>
              <td>
                <xref target="RFC8984" section="4.2.5" sectionFormat="comma"/>
              </td>
              <td>LOCATION-TYPE</td>
              <td>
                <xref target="ical-prop-location-type"/>
              </td>
            </tr>
            <tr>
              <td>name</td>
              <td>
                <xref target="RFC8984" section="4.2.5" sectionFormat="comma"/>
              </td>
              <td>NAME</td>
              <td>
                <xref target="ical-prop-name"/>
              </td>
            </tr>
            <tr>
              <td>relativeTo</td>
              <td>
                <xref target="RFC8984" section="4.5.2" sectionFormat="comma"/>
              </td>
              <td>TBD</td>
              <td/>
            </tr>
            <tr>
              <td>timeZone</td>
              <td>
                <xref target="RFC8984" section="4.7.1" sectionFormat="comma"/>
              </td>
              <td>TBD</td>
              <td/>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="jscal-participant">
        <name>Participant</name>
        <t>The <xref target="RFC8984" section="4.4.6" sectionFormat="parens">Participant object</xref> either converts to one of an <xref target="ical-prop-attendee">ATTENDEE property</xref>, a <xref target="ical-comp-participant">PARTICIPANT component</xref>, or a <xref target="ical-comp-vresource">VRESOURCE component</xref>; or it converts to both an ATTENDEE property and a PARTICIPANT component:</t>
        <ul>
          <li>
            <t>It converts to an ATTENDEE property if at least one of the <xref target="I-D.ietf-jmap-calendars" section="5.1.1" sectionFormat="parens">calendarAddress</xref> or <xref target="RFC8984" section="4.4.6" sectionFormat="parens">sendTo</xref> properties is set. The calendarAddress property converts to the ATTENDEE property value, if set; otherwise one of the scheduling methods in the sendTo property converts to the ATTENDEE property value.</t>
          </li>
          <li>
            <t>It converts to a PARTICIPANT component if it converts to an ATTENDEE property but not all of its properties convert to ATTENDEE property parameters as depicted in <xref target="jscal-participant-props-attendee"/>. In this case the CALENDAR-ADDRESS property value of the PARTICIPANT <bcp14>MUST</bcp14> be set to the ATTENDEE property value. Alternatively, the Participant object also converts to a PARTICIPANT component if it does not convert to an ATTENDEE property but its kind property value is unequal to "resource".</t>
          </li>
          <li>
            <t>It converts to a VRESOURCE component if it does not convert to an ATTENDEE property and its kind property value is "resource".</t>
          </li>
        </ul>
        <t>The following Participant properties convert to the ATTENDEE property. How to convert these properties if the Participant does not convert to an ATTENDEE is implementation-specific.</t>
        <table anchor="jscal-participant-props-attendee">
          <name>Properties of the Participant object that convert to the ATTENDEE property</name>
          <thead>
            <tr>
              <th>Name</th>
              <th>Reference</th>
              <th>Parameter (or other)</th>
              <th>See</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td>delegatedFrom</td>
              <td>
                <xref target="RFC8984" section="4.4.6" sectionFormat="comma"/>
              </td>
              <td>DELEGATED-FROM</td>
              <td>
                <xref target="ical-prop-attendee"/>
              </td>
            </tr>
            <tr>
              <td>delegatedTo</td>
              <td>
                <xref target="RFC8984" section="4.4.6" sectionFormat="comma"/>
              </td>
              <td>DELEGATED-TO</td>
              <td>
                <xref target="ical-prop-attendee"/>
              </td>
            </tr>
            <tr>
              <td>email</td>
              <td>
                <xref target="RFC8984" section="4.4.6" sectionFormat="comma"/>
              </td>
              <td>EMAIL</td>
              <td>
                <xref target="ical-prop-attendee"/>
              </td>
            </tr>
            <tr>
              <td>expectReply</td>
              <td>
                <xref target="RFC8984" section="4.4.6" sectionFormat="comma"/>
              </td>
              <td>RSVP</td>
              <td>
                <xref target="ical-prop-attendee"/>
              </td>
            </tr>
            <tr>
              <td>kind</td>
              <td>
                <xref target="RFC8984" section="4.4.6" sectionFormat="comma"/>
              </td>
              <td>CUTYPE</td>
              <td>
                <xref target="ical-prop-attendee"/>
              </td>
            </tr>
            <tr>
              <td>invitedBy</td>
              <td>
                <xref target="RFC8984" section="4.4.6" sectionFormat="comma"/>
              </td>
              <td>TBD</td>
              <td/>
            </tr>
            <tr>
              <td>memberOf</td>
              <td>
                <xref target="RFC8984" section="4.4.6" sectionFormat="comma"/>
              </td>
              <td>MEMBER</td>
              <td>
                <xref target="ical-prop-attendee"/>
              </td>
            </tr>
            <tr>
              <td>name</td>
              <td>
                <xref target="RFC8984" section="4.2.5" sectionFormat="comma"/>
              </td>
              <td>CN</td>
              <td>
                <xref target="ical-prop-attendee"/>
              </td>
            </tr>
            <tr>
              <td>participationStatus</td>
              <td>
                <xref target="RFC8984" section="4.4.6" sectionFormat="comma"/>
              </td>
              <td>PARTSTAT</td>
              <td>
                <xref target="ical-prop-attendee"/>
              </td>
            </tr>
            <tr>
              <td>roles</td>
              <td>
                <xref target="RFC8984" section="4.4.6" sectionFormat="comma"/>
              </td>
              <td>ROLE, or PARTICIPANT-TYPE property of the PARTICIPANT component</td>
              <td>
                <xref target="ical-prop-attendee"/>, <xref target="ical-prop-participant-type"/>, and remarks below</td>
            </tr>
            <tr>
              <td>scheduleAgent</td>
              <td>
                <xref target="RFC8984" section="4.4.6" sectionFormat="comma"/>
              </td>
              <td>SCHEDULE-AGENT</td>
              <td>
                <xref target="ical-prop-attendee"/>
              </td>
            </tr>
            <tr>
              <td>scheduleForceSend</td>
              <td>
                <xref target="RFC8984" section="4.4.6" sectionFormat="comma"/>
              </td>
              <td>SCHEDULE-FORCE-SEND</td>
              <td>
                <xref target="ical-prop-attendee"/>
              </td>
            </tr>
            <tr>
              <td>scheduleSequence</td>
              <td>
                <xref target="RFC8984" section="4.4.6" sectionFormat="comma"/>
              </td>
              <td>TBD</td>
              <td/>
            </tr>
            <tr>
              <td>scheduleStatus</td>
              <td>
                <xref target="RFC8984" section="4.4.6" sectionFormat="comma"/>
              </td>
              <td>SCHEDULE-STATUS</td>
              <td>
                <xref target="ical-prop-attendee"/>
              </td>
            </tr>
            <tr>
              <td>scheduleUpdated</td>
              <td>
                <xref target="RFC8984" section="4.4.6" sectionFormat="comma"/>
              </td>
              <td>TBD</td>
              <td/>
            </tr>
            <tr>
              <td>sendTo</td>
              <td>
                <xref target="RFC8984" section="4.4.6" sectionFormat="comma"/>
              </td>
              <td>TBD</td>
              <td/>
            </tr>
            <tr>
              <td>sentBy</td>
              <td>
                <xref target="RFC8984" section="4.4.5" sectionFormat="comma"/>
              </td>
              <td>TBD</td>
              <td/>
            </tr>
          </tbody>
        </table>
        <t>Remarks:</t>
        <ul>
          <li>
            <t>The "optional" role converts to the "OPT-PARTICIPANT" ROLE parameter value, the "chair" role to "CHAIR", "informational" to "NON-PARTICIPANT". The "attendee" role does convert to the ROLE parameter, it is implied by the ATTENDEE property. The "owner" role does not convert to the ROLE parameter, if the property value of the ATTENDEE is equal to the value of the ORGANIZER property in the same component. All other roles require a PARTICIPANT component and convert to the PARTICIPANT-TYPE property in that component.</t>
          </li>
        </ul>
        <t>The following Participant properties convert to the PARTICIPANT or VRESOURCE component:</t>
        <table>
          <name>Properties of the Participant object that convert to the PARTICIPANT or VRESOURCE component</name>
          <thead>
            <tr>
              <th>Name</th>
              <th>Reference</th>
              <th>Property (or other)</th>
              <th>See</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td>description</td>
              <td>
                <xref target="RFC8984" section="4.2.2" sectionFormat="comma"/>
              </td>
              <td>DESCRIPTION</td>
              <td>
                <xref target="ical-prop-description"/>
              </td>
            </tr>
            <tr>
              <td>language</td>
              <td>
                <xref target="RFC8984" section="4.4.6" sectionFormat="comma"/>
              </td>
              <td>TBD</td>
              <td/>
            </tr>
            <tr>
              <td>links</td>
              <td>
                <xref target="RFC8984" section="4.2.7" sectionFormat="comma"/>
              </td>
              <td>ATTACH, or other</td>
              <td>
                <t>
                  <xref target="jscal-link">Link object</xref>
                </t>
              </td>
            </tr>
            <tr>
              <td>locationId</td>
              <td>
                <xref target="RFC8984" section="4.4.6" sectionFormat="comma"/>
              </td>
              <td>TBD</td>
              <td/>
            </tr>
            <tr>
              <td>name</td>
              <td>
                <xref target="RFC8984" section="4.2.5" sectionFormat="comma"/>
              </td>
              <td>NAME</td>
              <td>
                <t>
                  <xref target="ical-prop-name"/>
                </t>
              </td>
            </tr>
            <tr>
              <td>participationComment</td>
              <td>
                <xref target="RFC8984" section="4.4.6" sectionFormat="comma"/>
              </td>
              <td>COMMENT</td>
              <td>
                <t>
                  <xref target="ical-prop-comment"/>
                </t>
              </td>
            </tr>
            <tr>
              <td>percentComplete</td>
              <td>
                <xref target="RFC8984" section="5.2.4" sectionFormat="comma"/>
              </td>
              <td>PERCENT-COMPLETE</td>
              <td>
                <t>
                  <xref target="ical-prop-percent-complete"/>
                </t>
              </td>
            </tr>
            <tr>
              <td>progress</td>
              <td>
                <xref target="RFC8984" section="5.2.5" sectionFormat="comma"/>
              </td>
              <td>TBD</td>
              <td/>
            </tr>
            <tr>
              <td>progressUpdated</td>
              <td>
                <xref target="RFC8984" section="5.2.6" sectionFormat="comma"/>
              </td>
              <td>TBD</td>
              <td/>
            </tr>
            <tr>
              <td>roles</td>
              <td>
                <xref target="RFC8984" section="4.4.6" sectionFormat="comma"/>
              </td>
              <td>PARTICIPANT-TYPE</td>
              <td>
                <xref target="ical-prop-participant-type"/>
              </td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="jscal-timezone">
        <name>TimeZone</name>
        <t>The <xref target="RFC8984" section="4.7.2" sectionFormat="parens">TimeZone object</xref> converts to a <xref target="ical-comp-vtimezone">VTIMEZONE component</xref>.</t>
        <t>Its properties convert as follows:</t>
        <table>
          <name>Properties of the TimeZone object</name>
          <thead>
            <tr>
              <th>Name</th>
              <th>Reference</th>
              <th>Property (or other)</th>
              <th>See</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td>aliases</td>
              <td>
                <xref target="RFC8984" section="4.7.2" sectionFormat="comma"/>
              </td>
              <td>TZID-ALIAS-OF</td>
              <td>
                <t>
                  <xref target="ical-prop-tzid-alias-of"/>
                </t>
              </td>
            </tr>
            <tr>
              <td>daylight</td>
              <td>
                <xref target="RFC8984" section="4.7.2" sectionFormat="comma"/>
              </td>
              <td>DAYLIGHT (component)</td>
              <td>
                <t>TimeZoneRule below</t>
              </td>
            </tr>
            <tr>
              <td>standard</td>
              <td>
                <xref target="RFC8984" section="4.7.2" sectionFormat="comma"/>
              </td>
              <td>STANDARD (component)</td>
              <td>
                <t>TimeZoneRule below</t>
              </td>
            </tr>
            <tr>
              <td>tzId</td>
              <td>
                <xref target="RFC8984" section="4.7.2" sectionFormat="comma"/>
              </td>
              <td>TZID</td>
              <td>
                <t>
                  <xref target="ical-prop-tzid"/>
                </t>
              </td>
            </tr>
            <tr>
              <td>url</td>
              <td>
                <xref target="RFC8984" section="4.7.2" sectionFormat="comma"/>
              </td>
              <td>TZURL</td>
              <td>
                <t>
                  <xref target="ical-prop-tzurl"/>
                </t>
              </td>
            </tr>
            <tr>
              <td>validUntil</td>
              <td>
                <xref target="RFC8984" section="4.7.2" sectionFormat="comma"/>
              </td>
              <td>TZUNTIL</td>
              <td>
                <t>
                  <xref target="ical-prop-tzuntil"/>
                </t>
              </td>
            </tr>
          </tbody>
        </table>
        <t>The <xref target="RFC8984" section="4.7.2" sectionFormat="parens">TimeZoneRule object</xref> converts to a <xref target="ical-comp-vtimezone">DAYLIGHT or STANDARD component</xref>.</t>
        <t>Its properties convert as follows:</t>
        <table>
          <name>Properties of the TimeZoneRule object</name>
          <thead>
            <tr>
              <th>Name</th>
              <th>Reference</th>
              <th>Property (or other)</th>
              <th>See</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td>comments</td>
              <td>
                <xref target="RFC8984" section="4.7.2" sectionFormat="comma"/>
              </td>
              <td>COMMENT</td>
              <td>
                <t>
                  <xref target="ical-prop-comment"/>
                </t>
              </td>
            </tr>
            <tr>
              <td>names</td>
              <td>
                <xref target="RFC8984" section="4.7.2" sectionFormat="comma"/>
              </td>
              <td>TZNAME</td>
              <td>
                <t>
                  <xref target="ical-prop-tzname"/>
                </t>
              </td>
            </tr>
            <tr>
              <td>offsetFrom</td>
              <td>
                <xref target="RFC8984" section="4.7.2" sectionFormat="comma"/>
              </td>
              <td>TZOFFSETFROM</td>
              <td>
                <t>
                  <xref target="ical-prop-tzoffsetfrom"/>
                </t>
              </td>
            </tr>
            <tr>
              <td>offsetTo</td>
              <td>
                <xref target="RFC8984" section="4.7.2" sectionFormat="comma"/>
              </td>
              <td>TZOFFSETTO</td>
              <td>
                <t>
                  <xref target="ical-prop-tzoffsetto"/>
                </t>
              </td>
            </tr>
            <tr>
              <td>recurrenceOverrides</td>
              <td>
                <xref target="RFC8984" section="4.3.5" sectionFormat="comma"/>
              </td>
              <td>RDATE</td>
              <td>
                <t>
                  <xref target="ical-prop-rdate"/>
                </t>
              </td>
            </tr>
            <tr>
              <td>recurrenceRules</td>
              <td>
                <xref target="RFC8984" section="4.3.3" sectionFormat="comma"/>
              </td>
              <td>RRULE</td>
              <td>
                <t>
                  <xref target="ical-prop-rrule"/>
                </t>
              </td>
            </tr>
            <tr>
              <td>start</td>
              <td>
                <xref target="RFC8984" section="4.7.2" sectionFormat="comma"/>
              </td>
              <td>DTSTART</td>
              <td>
                <t>
                  <xref target="ical-prop-dtstart"/>
                </t>
              </td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="jscal-virtual-location">
        <name>VirtualLocation</name>
        <t>The <xref target="RFC8984" section="4.2.6" sectionFormat="parens">VirtualLocation object</xref> converts to a <xref target="ical-prop-conference">CONFERENCE property</xref>.</t>
        <t>The uri property converts to the CONFERENCE property value. Its other properties convert as follows:</t>
        <table>
          <name>Properties of the VirtualLocation object</name>
          <thead>
            <tr>
              <th>Name</th>
              <th>Reference</th>
              <th>Parameter (or other)</th>
              <th>See</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td>description</td>
              <td>
                <xref target="RFC8984" section="4.2.2" sectionFormat="comma"/>
              </td>
              <td>TBD</td>
              <td/>
            </tr>
            <tr>
              <td>features</td>
              <td>
                <xref target="RFC8984" section="4.2.6" sectionFormat="comma"/>
              </td>
              <td>FEATURE</td>
              <td>
                <xref target="ical-prop-conference"/>
              </td>
            </tr>
            <tr>
              <td>name</td>
              <td>
                <xref target="RFC8984" section="4.2.5" sectionFormat="comma"/>
              </td>
              <td>LABEL</td>
              <td>
                <xref target="ical-prop-conference"/>
              </td>
            </tr>
          </tbody>
        </table>
      </section>
    </section>
    <section anchor="updates-icalendar">
      <name>Updates to iCalendar</name>
      <section anchor="new-icalendar-parameters">
        <name>New iCalendar parameters</name>
        <section anchor="ical-param-jscalid">
          <name>JSCALID</name>
          <t>TBD</t>
        </section>
      </section>
      <section anchor="new-icalendar-properties">
        <name>New iCalendar properties</name>
        <section anchor="ical-prop-jscalid">
          <name>JSCALID</name>
          <t>TBD</t>
        </section>
        <section anchor="ical-prop-jsprop">
          <name>JSPROP</name>
          <t>TBD</t>
        </section>
      </section>
    </section>
    <section anchor="updates-jscalendar">
      <name>Updates to JSCalendar</name>
      <section anchor="new-jscalendar-properties">
        <name>New JSCalendar properties</name>
        <section anchor="jscal-prop-icalcomponent">
          <name>iCalComponent</name>
          <dl newline="true">
            <dt>Name:</dt>
            <dd>iCalComponent</dd>
            <dt>Context:</dt>
            <dd>Any JSCalendar object</dd>
            <dt>Type:</dt>
            <dd>
              <tt>ICalComponent</tt> (optional)</dd>
            <dt>Description</dt>
            <dd>
              <t>This contains information about an iCalendar component that got partially or fully converted to JSCalendar.  It allows to preserve the name of the iCalendar component and some or all of its properties and subcomponents.</t>
              <t>An ICalComponent object has the following properties:</t>
              <dl>
                <dt>@type: String (mandatory)</dt>
                <dd>This specifies the type of this object. This <bcp14>MUST</bcp14> be ICalComponent.</dd>
                <dt>name: String (mandatory)</dt>
                <dd>This is the name of the iCalendar component in lowercase.</dd>
                <dt>components: *[][] (optional)</dt>
                <dd>This contains subcomponents of the iCalendar component. The value <bcp14>MUST</bcp14> be a list of iCalendar components formatted in jCal as defined in <xref target="RFC7265" section="3.3" sectionFormat="of"/>.
                </dd>
                <dt>convertedProperties: String[ICalProperty] (optional)</dt>
                <dd>
                  <t>This contains conversion-related information about the component's properties that got partially or fully converted to JSCalendar.  Each key defines the path to a property of the JSCalendar object on which the iCalComponent property is set on.  The value for each key contains information about the iCalendar property which converted to the object property located at that key (see <xref target="jscal-prop-icalproperty"/>).</t>
                  <t>The key <bcp14>MUST</bcp14> be a valid key of a PatchObject as defined in <xref target="RFC8984" section="1.4.9" sectionFormat="of"/>.  The key <bcp14>MUST NOT</bcp14> point into a nested property, unless there is no way to otherwise preserve the iCalendar property elements. For example, if a VEVENT contains an ATTENDEE property, then any iCalendar information about the ATTENDEE property <bcp14>MUST</bcp14> be set in the iCalProperty property of the converted Participant object (see <xref target="ical-prop-attendee"/>).  In contrast, information about a RDATE property contained in a VEVENT would be located by a key pointing into the <tt>recurrenceOverrides</tt> property of the Event object (see <xref target="ical-prop-rdate"/>).</t>
                </dd>
                <dt>properties: *[][] (optional)</dt>
                <dd>This contains properties of the iCalendar component. The value <bcp14>MUST</bcp14> be a list of iCalendar properties formatted in jCal as defined in <xref target="RFC7265" section="3.4" sectionFormat="of"/>.
              </dd>
              </dl>
            </dd>
          </dl>
        </section>
        <section anchor="jscal-prop-icalproperty">
          <name>iCalProperty</name>
          <dl newline="true">
            <dt>Name:</dt>
            <dd>iCalProperty</dd>
            <dt>Context:</dt>
            <dd>Any JSCalendar object</dd>
            <dt>Type:</dt>
            <dd>
              <tt>ICalProperty</tt> (optional)</dd>
            <dt>Description:</dt>
            <dd>
              <t>This contains conversion-related information about an iCalendar property that got partially or fully converted to JSCalendar.  It allows to preserve the name of the iCalendar property and some or all of its parameters.</t>
              <t>An ICalProperty object has the following properties:</t>
              <dl>
                <dt>@type: String (mandatory)</dt>
                <dd>This specifies the type of this object. This <bcp14>MUST</bcp14> be ICalProperty.</dd>
                <dt>name: String (mandatory)</dt>
                <dd>This is the name of the iCalendar property in lowercase.</dd>
                <dt>valueType: String (optional)</dt>
                <dd>This is the name of the iCalendar property value type in lowercase.</dd>
                <dt>parameters: String[String] (optional)</dt>
                <dd>This contains parameters of the iCalendar property. The value <bcp14>MUST</bcp14> comply with iCalendar parameters formatted in jCal as defined in <xref target="RFC7265" section="3.5" sectionFormat="of"/>.</dd>
              </dl>
            </dd>
          </dl>
        </section>
        <section anchor="jscal-prop-locations">
          <name>locations (Participant)</name>
          <dl newline="true">
            <dt>Name:</dt>
            <dd>locations</dd>
            <dt>Context</dt>
            <dd>Participant</dd>
            <dt>Type:</dt>
            <dd>
              <tt>Id[Location]</tt> (optional)</dd>
            <dt>Description:</dt>
            <dd>This represents locations associated with the participant. In contrast to the locationId property, this allows to associate multiple locations with the Participant object. It also allow to more clearly express that a location just is relevant for a single participant.</dd>
          </dl>
        </section>
      </section>
    </section>
    <section anchor="IANA">
      <!-- All drafts are required to have an IANA considerations section.  See RFC 8126 for a guide.-->
      <name>IANA Considerations</name>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml"/>
        <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.2397.xml"/>
        <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.2445.xml"/>
        <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.3986.xml"/>
        <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.5234.xml"/>
        <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.5545.xml"/>
        <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.5546.xml"/>
        <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.5870.xml"/>
        <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.6638.xml"/>
        <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.6838.xml"/>
        <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7265.xml"/>
        <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7529.xml"/>
        <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7808.xml"/>
        <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7953.xml"/>
        <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7986.xml"/>
        <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml"/>
        <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8288.xml"/>
        <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8607.xml"/>
        <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8984.xml"/>
        <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.9073.xml"/>
        <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.9074.xml"/>
        <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.9253.xml"/>
        <reference anchor="TZDB" target="https://www.iana.org/time-zones">
          <front>
            <title>IANA Time Zone Database</title>
            <author/>
            <date/>
          </front>
        </reference>
      </references>
      <references>
        <name>Informative References</name>
        <!--[I-D.calconnect-vobject-i18n] IESG state Expired. Entered the long way to get the correct initials-->
        <reference anchor="I-D.ietf-jmap-calendars" target="https://datatracker.ietf.org/doc/draft-ietf-jmap-calendars/">
          <front>
            <title>JMAP for Calendars</title>
            <author fullname="Neil Jenkins" initials="N.M." surname="Jenkins">
              <organization>Fastmail</organization>
            </author>
            <author fullname="Michael Douglass" initials="M." surname="Douglass">
              <organization>Spherical Cow Group</organization>
            </author>
            <date day="22" month="July" year="2024"/>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-jmap-calendars"/>
        </reference>
      </references>
    </references>
    <section anchor="appendix-discrepancies">
      <name>Discrepancies between iCalendar and JSCalendar</name>
      <t>This section highlights iCalendar and JSCalendar elements for which no conversion rule to a standard element is defined in this document. This is informational; implementations <bcp14>MAY</bcp14> convert these elements, for example by use of the special-purpose properties defined in this document, or some vendor-specific extension properties. Alternatively newer standards might define new standard elements and register them at IANA.</t>
      <section>
        <name>Unsupported iCalendar Elements</name>
        <section>
          <name>Components</name>
          <t>The following components do not convert to a standard element in JSCalendar:</t>
          <ul>
            <li>
              <xref target="RFC7953" section="3.1" sectionFormat="comma">AVAILABLE</xref>
            </li>
            <li>
              <xref target="RFC7953" section="3.1" sectionFormat="comma">VAVAILABILITY</xref>
            </li>
            <li>
              <xref target="RFC5545" section="3.6.4" sectionFormat="comma">VFREEBUSY</xref>
            </li>
            <li>
              <xref target="RFC5545" section="3.6.3" sectionFormat="comma">VJOURNAL</xref>
            </li>
          </ul>
        </section>
        <section>
          <name>Properties by Component</name>
          <t>The following components are defined to contain the listed properties. But these properties do not convert to a standard JSCalendar element.</t>
          <section>
            <name>PARTICIPANT</name>
            <ul>
              <li>
                <xref target="RFC5545" section="3.8.1.2" sectionFormat="comma">CATEGORIES</xref>
              </li>
              <li>
                <xref target="RFC5545" section="3.8.4.2" sectionFormat="comma">CONTACT</xref>
              </li>
              <li>
                <xref target="RFC5545" section="3.8.7.1" sectionFormat="comma">CREATED</xref>
              </li>
              <li>
                <xref target="RFC5545" section="3.8.7.3" sectionFormat="comma">LAST-MODIFIED</xref>
              </li>
              <li>
                <xref target="RFC5545" section="3.8.1.9" sectionFormat="comma">PRIORITY</xref>
              </li>
              <li>
                <xref target="RFC5545" section="3.8.4.5" sectionFormat="comma">RELATED-TO</xref>
              </li>
              <li>
                <xref target="RFC5545" section="3.8.8.3" sectionFormat="comma">REQUEST-STATUS</xref>
              </li>
              <li>
                <xref target="RFC5545" section="3.8.1.10" sectionFormat="comma">RESOURCES</xref>
              </li>
              <li>
                <xref target="RFC5545" section="3.8.1.11" sectionFormat="comma">STATUS</xref>
              </li>
              <li>
                <xref target="RFC9073" section="6.5" sectionFormat="comma">STYLED-DESCRIPTION</xref>
              </li>
              <li>
                <xref target="RFC5545" section="3.8.4.7" sectionFormat="comma">UID</xref>
              </li>
            </ul>
          </section>
          <section>
            <name>VALARM</name>
            <ul>
              <li>
                <xref target="RFC5545" section="3.8.1.1" sectionFormat="comma">ATTACH</xref>
              </li>
              <li>
                <xref target="RFC5545" section="3.8.4.1" sectionFormat="comma">ATTENDEE</xref>
              </li>
              <li>
                <xref target="RFC5545" section="3.8.1.5" sectionFormat="comma">DESCRIPTION</xref>
              </li>
              <li>
                <xref target="RFC5545" section="3.8.2.5" sectionFormat="comma">DURATION</xref>
              </li>
              <li>
                <xref target="RFC9074" section="8.1" sectionFormat="comma">PROXIMITY</xref>
              </li>
              <li>
                <xref target="RFC5545" section="3.8.6.2" sectionFormat="comma">REPEAT</xref>
              </li>
              <li>
                <xref target="RFC9073" section="6.5" sectionFormat="comma">STYLED-DESCRIPTION</xref>
              </li>
              <li>
                <xref target="RFC5545" section="3.8.1.12" sectionFormat="comma">SUMMARY</xref>
              </li>
              <li>
                <xref target="RFC5545" section="3.8.4.7" sectionFormat="comma">UID</xref>
              </li>
            </ul>
          </section>
          <section>
            <name>VCALENDAR</name>
            <ul>
              <li>
                <xref target="RFC5545" section="3.7.1" sectionFormat="comma">CALSCALE</xref>
              </li>
              <li>
                <xref target="RFC7986" section="5.7" sectionFormat="comma">REFRESH-INTERVAL</xref>
              </li>
              <li>
                <xref target="RFC5545" section="3.7.4" sectionFormat="comma">VERSION</xref>
              </li>
            </ul>
          </section>
          <section>
            <name>VEVENT</name>
            <ul>
              <li>
                <xref target="RFC5545" section="3.8.4.2" sectionFormat="comma">CONTACT</xref>
              </li>
              <li>
                <xref target="RFC9253" section="8.3" sectionFormat="comma">REFID</xref>
              </li>
              <li>
                <xref target="RFC5545" section="3.8.1.10" sectionFormat="comma">RESOURCES</xref>
              </li>
            </ul>
          </section>
          <section>
            <name>VLOCATION</name>
            <ul>
              <li>
                <xref target="RFC5545" section="3.8.4.7" sectionFormat="comma">UID</xref>
              </li>
            </ul>
          </section>
          <section>
            <name>VRESOURCE</name>
            <ul>
              <li>
                <xref target="RFC9073" section="6.3" sectionFormat="comma">RESOURCE-TYPE</xref>
              </li>
              <li>
                <xref target="RFC5545" section="3.8.4.7" sectionFormat="comma">UID</xref>
              </li>
            </ul>
          </section>
          <section>
            <name>VTODO</name>
            <ul>
              <li>
                <xref target="RFC5545" section="3.8.2.1" sectionFormat="comma">COMPLETED</xref>
              </li>
              <li>
                <xref target="RFC5545" section="3.8.4.2" sectionFormat="comma">CONTACT</xref>
              </li>
              <li>
                <xref target="RFC9253" section="8.3" sectionFormat="comma">REFID</xref>
              </li>
              <li>
                <xref target="RFC5545" section="3.8.1.10" sectionFormat="comma">RESOURCES</xref>
              </li>
            </ul>
          </section>
        </section>
        <section>
          <name>Properties by Value Type</name>
          <t>The following properties convert to a standard JSCalendar element for some other value type, but they do not for the listed value types.</t>
          <section>
            <name>LINK</name>
            <ul>
              <li>
                <xref target="RFC9253" section="7" sectionFormat="comma">XML-REFERENCE</xref>
              </li>
            </ul>
          </section>
          <section>
            <name>RDATE</name>
            <ul>
              <li>
                <xref target="RFC5545" section="3.3.9" sectionFormat="comma">PERIOD</xref>
              </li>
            </ul>
          </section>
          <section>
            <name>STRUCTURED-DATA</name>
            <ul>
              <li>
                <xref target="RFC9073" section="6.6" sectionFormat="comma">TEXT</xref>
              </li>
            </ul>
          </section>
        </section>
        <section>
          <name>Parameters by Property</name>
          <t>The following properties are defined to contain the listed parameters. But these parameters do not convert to a standard JSCalendar element.</t>
          <section>
            <name>ATTACH</name>
            <ul>
              <li>
                <xref target="RFC8607" section="4.2" sectionFormat="comma">FILENAME</xref>
              </li>
              <li>
                <xref target="RFC8607" section="4.3" sectionFormat="comma">MANAGED-ID</xref>
              </li>
            </ul>
          </section>
          <section>
            <name>ATTENDEE</name>
            <ul>
              <li>
                <xref target="RFC5545" section="3.2.18" sectionFormat="comma">SENT-BY</xref>
              </li>
              <li>
                <xref target="RFC5545" section="3.2.10" sectionFormat="comma">LANGUAGE</xref>
              </li>
            </ul>
          </section>
          <section>
            <name>CATEGORIES</name>
            <ul>
              <li>
                <xref target="RFC5545" section="3.2.10" sectionFormat="comma">LANGUAGE</xref>
              </li>
            </ul>
          </section>
          <section>
            <name>COMMENT</name>
            <ul>
              <li>
                <xref target="RFC5545" section="3.2.1" sectionFormat="comma">ALTREP</xref>
              </li>
              <li>
                <xref target="RFC5545" section="3.2.10" sectionFormat="comma">LANGUAGE</xref>
              </li>
            </ul>
          </section>
          <section>
            <name>CONFERENCE</name>
            <ul>
              <li>
                <xref target="RFC5545" section="3.2.10" sectionFormat="comma">LANGUAGE</xref>
              </li>
            </ul>
          </section>
          <section>
            <name>DESCRIPTION</name>
            <ul>
              <li>
                <xref target="RFC5545" section="3.2.1" sectionFormat="comma">ALTREP</xref>
              </li>
              <li>
                <xref target="RFC5545" section="3.2.10" sectionFormat="comma">LANGUAGE</xref>
              </li>
            </ul>
          </section>
          <section>
            <name>IMAGE</name>
            <ul>
              <li>
                <xref target="RFC5545" section="3.2.1" sectionFormat="comma">ALTREP</xref>
              </li>
            </ul>
          </section>
          <section>
            <name>LINK</name>
            <ul>
              <li>
                <xref target="RFC5545" section="3.2.10" sectionFormat="comma">LANGUAGE</xref>
              </li>
            </ul>
          </section>
          <section>
            <name>LOCATION</name>
            <ul>
              <li>
                <xref target="RFC5545" section="3.2.1" sectionFormat="comma">ALTREP</xref>
              </li>
              <li>
                <xref target="RFC5545" section="3.2.10" sectionFormat="comma">LANGUAGE</xref>
              </li>
            </ul>
          </section>
          <section>
            <name>NAME</name>
            <ul>
              <li>
                <xref target="RFC5545" section="3.2.1" sectionFormat="comma">ALTREP</xref>
              </li>
              <li>
                <xref target="RFC5545" section="3.2.10" sectionFormat="comma">LANGUAGE</xref>
              </li>
            </ul>
          </section>
          <section>
            <name>ORGANIZER</name>
            <ul>
              <li>
                <xref target="RFC6638" section="7.1" sectionFormat="comma">SCHEDULE-AGENT</xref>
              </li>
              <li>
                <xref target="RFC6638" section="7.2" sectionFormat="comma">SCHEDULE-FORCE-SEND</xref>
              </li>
              <li>
                <xref target="RFC6638" section="7.3" sectionFormat="comma">SCHEDULE-STATUS</xref>
              </li>
              <li>
                <xref target="RFC5545" section="3.2.18" sectionFormat="comma">SENT-BY</xref>
              </li>
              <li>
                <xref target="RFC5545" section="3.2.10" sectionFormat="comma">LANGUAGE</xref>
              </li>
            </ul>
          </section>
          <section>
            <name>PARTICIPANT-TYPE</name>
            <ul>
              <li>
                <xref target="RFC9073" section="5.1" sectionFormat="comma">ORDER</xref>
              </li>
            </ul>
          </section>
          <section>
            <name>RECURRENCE-ID</name>
            <ul>
              <li>
                <xref target="RFC5545" section="3.2.13" sectionFormat="comma">RANGE</xref>
              </li>
            </ul>
          </section>
          <section>
            <name>RELATED-TO</name>
            <ul>
              <li>
                <xref target="RFC9253" section="6.2" sectionFormat="comma">GAP</xref>
              </li>
            </ul>
          </section>
          <section>
            <name>REQUEST-STATUS</name>
            <ul>
              <li>
                <xref target="RFC5545" section="3.2.10" sectionFormat="comma">LANGUAGE</xref>
              </li>
            </ul>
          </section>
          <section>
            <name>RESOURCES</name>
            <ul>
              <li>
                <xref target="RFC5545" section="3.2.1" sectionFormat="comma">ALTREP</xref>
              </li>
              <li>
                <xref target="RFC5545" section="3.2.10" sectionFormat="comma">LANGUAGE</xref>
              </li>
            </ul>
          </section>
          <section>
            <name>STRUCTURED-DATA</name>
            <ul>
              <li>
                <xref target="RFC9073" section="5.2" sectionFormat="comma">SCHEMA</xref>
              </li>
            </ul>
          </section>
          <section>
            <name>STYLED-DESCRIPTION</name>
            <ul>
              <li>
                <xref target="RFC5545" section="3.2.1" sectionFormat="comma">ALTREP</xref>
              </li>
              <li>
                <xref target="RFC5545" section="3.2.10" sectionFormat="comma">LANGUAGE</xref>
              </li>
              <li>
                <xref target="RFC9073" section="5.3" sectionFormat="comma">DERIVED</xref>
              </li>
            </ul>
          </section>
          <section>
            <name>SUMMARY</name>
            <ul>
              <li>
                <xref target="RFC5545" section="3.2.1" sectionFormat="comma">ALTREP</xref>
              </li>
              <li>
                <xref target="RFC5545" section="3.2.10" sectionFormat="comma">LANGUAGE</xref>
              </li>
            </ul>
          </section>
          <section>
            <name>TZNAME</name>
            <ul>
              <li>
                <xref target="RFC5545" section="3.2.10" sectionFormat="comma">LANGUAGE</xref>
              </li>
            </ul>
          </section>
        </section>
      </section>
      <section>
        <name>Unsupported JSCalendar Elements</name>
        <t>Unfinished JSCalendar elements and conversion rules are marked with the term "TBD" in <xref target="jscal-to-icalendar"/>.</t>
      </section>
    </section>
  </back>
</rfc>
