<?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="std" consensus="true" docName="draft-ietf-calext-jscalendar-icalendar-22" obsoletes="" updates="5545,jscalendarbis" 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-22"/>
    <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="2026" month="January" day="22"/>
    <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>
    <!-- TODO replace any occurrence of "jscalendarbis" with its RFC number -->
    <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. This document updates RFC 5545 ("iCalendar") and jscalendarbis ("JSCalendar") by defining new properties and parameters for JSCalendar and iCalendar conversion.</t>
    </abstract>
  </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 of how to convert that 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 updates <xref target="RFC5545"/> and <xref target="jscalendarbis"/> by defining iCalendar and JSCalendar elements to preserve elements that have no equivalent in the other format. These conversion-specific properties are defined in Section <xref target="ical-prop-jsprop" format="counter"/> for iCalendar, and <xref target="jscal-prop-icalendar"/> 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 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. The following rules apply:</t>
          <ul>
            <li>An example that only contains iCalendar properties implicitly represents a VEVENT component having these properties set and that is part of a VCALENDAR component.</li>
            <li>An example that only contains one or more VEVENT, VTODO, VJOURNAL, FREEBUSY or VTIMEZONE components implicitly represents a VCALENDAR component that contains them. An example that only contains one or more other components implicitly represents a VEVENT component having these components set and that is part of a VCALENDAR components.</li>
            <li>An example that only contains VEVENT or VTODO components implicitly represents a VCALENDAR component that contains them.</li>
            <li>An example that only contains a VCALENDAR component but no contained components implicitly represents a VCALENDAR component that contains a VEVENT component.</li>
            <li>Implicit components (those without a BEGIN and END, or omitted completely) are assumed to contain all mandatory properties with some value, but the actual value is irrelevant for the example.</li>
          </ul>
          <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, but the value <tt>...</tt> does not represent a property in a component for which at least one same-named property is explicitly stated for that component in the example.  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 are irrelevant for this example, including mandatory properties. The <tt>"..."</tt> property requires the <tt>"@type"</tt> property to be set. <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>
        <name>Lossy versus Lossless Conversion</name>
        <t>This document outlines how to convert iCalendar elements to JSCalendar elements, and the other way round. Many of these can be represented by standard elements in both formats, meaning that they are registered in the iCalendar and JSCalendar IANA registries and differ from the special-purpose elements introduced in <xref target="updates-icalendar"/> and <xref target="updates-jscalendar"/>. Still, a number of elements in either format have no standard counterpart in the other. When converting between between iCalendar and JSCalendar, implementations <bcp14>MAY</bcp14> choose to only convert elements that have standard element in the target format, or aim to preserve as many elements as possible.</t>
        <t>When to choose between lossy and lossless conversion is implementation-specific. For example:</t>
        <ul>
          <li>For lossy conversion, an implementation that internally stores calendar data in JSCalendar format might only want to convert to a subset of iCalendar elements for <xref target="RFC6047">iMIP scheduling</xref>. In this case, it might not make use any of the conversion-specific iCalendar properties introduced in <xref target="updates-icalendar"/>.</li>
          <li>For lossless conversion, an implementation that internally stores calendar data in iCalendar format might want to convert without loss to JSCalendar when updating calendar events with <xref target="jmap-calendars">JMAP</xref>. For that, it can use the conversion-specific properties defined in <xref target="updates-jscalendar"/>.</li>
        </ul>
        <t>All the examples in this document illustrate lossless conversion, if not explicitly stated otherwise in the example.</t>
      </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="jscalendarbis" section="2.3" sectionFormat="parens">Group object</xref>.  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>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>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>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>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>
            </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>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-icalendar">"iCalendar" property</xref> of the Group object.</t>
          <t>The order of elements in the "entries" property is implementation-specific, e.g. entries need not be in the same order as their source components in the iCalendar 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. As an exception to this rule, this 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 a 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"
        }
      },
      "recurrenceRule": {
        "@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".</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:20240103T170000
...
END:VEVENT
END:VCALENDAR
]]></sourcecode>
            <sourcecode type="json"><![CDATA[
{
  "@type": "Group",
  "entries": [
    {
      "...": "",
      "@type": "Event",
      "recurrenceId": "2024-02-02T14:00:00",
      "recurrenceIdTimeZone": "Europe/Berlin",
      "start": "2024-02-02T16:00:00",
      "timeZone": "Europe/Berlin",
      "uid": "F4257E1D-5461-4EF6-840F-9DFC653EB559"
    },
    {
      "...": "",
      "@type": "Event",
      "recurrenceId": "2024-01-03T14:00:00",
      "recurrenceIdTimeZone": "Europe/Berlin",
      "start": "2024-01-03T17: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="jscalendarbis" 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>If the <xref target="ical-param-jsid">JSID parameter</xref> or <xref target="ical-prop-jsid">JSID property</xref> is set on a property or component, then its value <bcp14>MUST</bcp14> be used as key when converting that element from iCalendar to JSCalendar.  In absence of the JSID parameter or property key generation is implementation-specific.</t>
          <t>Some sections later in this document describe key generation schemes for specific iCalendar elements by making use of <xref target="RFC9562" section="5.5" sectionFormat="parens">UUID Version 5 with SHA1 hash</xref>. The Namespace ID to generate such keys is "7f1e1965-ae73-4454-b088-232c90730ce2". These key generation schemes are not mandatory, nor is making use of that particular Namespace ID when using UUID Version 5 (UUIDv5) as keys.</t>
          <t>Irrespective of the key generation scheme, all keys <bcp14>MUST</bcp14> be valid according to the definition of the Id type. For consistency, keys <bcp14>SHOULD</bcp14> be stable such that converting the same iCalendar data to JSCalendar multiple times produces the same keys.</t>
        </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 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 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 "Etc/UTC" in JSCalendar.</t>
          <t>If the property value 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 as follows:</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. Otherwise, how to convert the TZID parameter value is implementation-specific: software libraries such as the <eref target="https://icu.unicode.org/">International Components for Unicode</eref> support converting Microsoft time zone names to IANA time zone identifiers. Alternatively, an implementation might determine the name of an IANA time zone which has identical time zone rules over the time span of the calendar object.</t>
          <t>Implementations <bcp14>MAY</bcp14> preserve a TZID parameter set to a non-IANA timezone identifier and its related VTIMEZONE by use of the "convertedProperties" and "components" properties (see <xref target="jscal-prop-icalendar"/>), but <bcp14>MUST NOT</bcp14> expect other implementations to consider them when processing the calendar object. See <xref target="test-ical-prop-dtstart-tzid-non-iana"/> 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.</t>
          <t>When converting from iCalendar to JSCalendar, 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>
          <t><xref target="jscal-event-and-task"/> defines which iCalendar value type to choose when converting from JSCalendar to iCalendar.</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> in a VEVENT or VTODO component converts to a <xref target="jscalendarbis" section="4.4.5" sectionFormat="parens">Participant object</xref>.  The converted object is set in the "participants" property of the Event or Task object.</t>
          <t>The key of the Participant object <bcp14>MUST</bcp14> be the value of the <xref target="ical-prop-jsid">JSID property</xref>, if set. If no JSID property but the CALENDAR-ADDRESS property is set, then the key <bcp14>MAY</bcp14> be a UUIDv5 generated from the property value (see <xref target="generating-jscalendar-ids"/>). Otherwise, the key <bcp14>MAY</bcp14> be the UID property value. When converting to iCalendar, implementations <bcp14>MAY</bcp14> omit setting the JSID property if key matches the UUIDv5 of the CALENDAR-ADDRESS property value or the key matches the UID property, and the key is not part of a JSON pointer in any JSPTR parameter value.</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>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>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>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>name</td>
                <td>
                  <xref target="ical-prop-summary"/>
                </td>
                <td/>
              </tr>
            </tbody>
          </table>
          <t>Other properties or components <bcp14>MAY</bcp14> be converted to the <xref target="jscal-prop-icalendar">"iCalendar" 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:PARTICIPANT
UID:47AD2E1C-49D4-45DF-BD83-8398ACC7D8E2
DESCRIPTION:A participant
...
END:PARTICIPANT
]]></sourcecode>
            <sourcecode type="json"><![CDATA[
"participants": {
  "47AD2E1C-49D4-45DF-BD83-8398ACC7D8E2": {
    "@type": "Participant",
    "description": "A participant",
    "iCalendar": {
      "@type": "ICalComponent",
      "name": "participant",
      "properties": [
        [
          "uid",
          {},
          "text",
          "47AD2E1C-49D4-45DF-BD83-8398ACC7D8E2"
        ]
      ]
    }
  }
}
]]></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> in a VEVENT or VTODO component converts to an <xref target="jscalendarbis" section="4.5.1" sectionFormat="parens">Alert object</xref>. The converted object is set in the "alerts" property of the Event or Task object.</t>
          <t>The key of the Alert object <bcp14>MUST</bcp14> be the value of the <xref target="ical-prop-jsid">JSID property</xref>, if set. Otherwise, the key <bcp14>MAY</bcp14> be the value of the UID property. When converting to iCalendar, implementations <bcp14>MAY</bcp14> omit setting the JSID property if the key matches the value of the UID property, and the key is not part of a JSON pointer in any JSPTR parameter value.</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-icalendar">"iCalendar" 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:VALARM
UID:04DC2968-6468-4B92-BC09-5A17D7D3D4E
TRIGGER:-PT30M
ACTION:DISPLAY
DESCRIPTION:Breakfast meeting
END:VALARM
]]></sourcecode>
            <sourcecode type="json"><![CDATA[
"alerts": {
  "04DC2968-6468-4B92-BC09-5A17D7D3D4E": {
    "@type": "Alert",
    "iCalendar": {
      "@type": "ICalComponent",
      "name": "valarm",
      "properties": [
        [
          "description",
          {},
          "text",
          "Breakfast meeting"
        ],
        [
          "uid",
          {},
          "text",
          "04DC2968-6468-4B92-BC09-5A17D7D3D4E"
        ]
      ]
    },
    "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="jscalendarbis" section="2.1" sectionFormat="parens">Event object</xref>.  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>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, endTimeZone</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</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>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>organizerCalendarAddress</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>RRULE</td>
                <td>
                  <xref target="RFC5545" section="3.8.5.3" sectionFormat="comma"/>
                </td>
                <td>recurrenceRule</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>SHOW-WITHOUT-TIME</td>
                <td>
                  <xref target="icaljscalexts" section="4.2" sectionFormat="comma"/>
                </td>
                <td>showWithoutTime</td>
                <td>
                  <xref target="ical-prop-show-without-time"/>
                </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>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>
            </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-icalendar">"iCalendar" property</xref> of the Event object.</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>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",
      "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> in a VEVENT or VTODO component converts to a <xref target="jscalendarbis" section="4.2.5" sectionFormat="parens">Location object</xref>.  The converted object is set in the "locations" property of the Event or Task object.</t>
          <t>The key of the Location object <bcp14>MUST</bcp14> be the value of the <xref target="ical-prop-jsid">JSID property</xref>, if set. Otherwise, the key <bcp14>MAY</bcp14> be the value of the UID property.  When converting to iCalendar, implementations <bcp14>MAY</bcp14> omit setting the JSID property if the key matches the value of the UID property, and the key is not part of a JSON pointer in any JSPTR parameter value.</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>COORDINATES</td>
                <td>
                  <xref target="icaljscalexts" section="4.1" sectionFormat="comma"/>
                </td>
                <td>coordinates</td>
                <td>
                  <xref target="ical-prop-coordinates"/>
                </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>
            </tbody>
          </table>
          <t>Other properties or components <bcp14>MAY</bcp14> be converted to the <xref target="jscal-prop-icalendar">"iCalendar" 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": {
  "4954DC22-5BD6-4E98-844D-0302982F54AC": {
    "@type": "Location",
    "name": "The venue",
    "iCalendar": {
      "@type": "ICalComponent",
      "name": "vlocation",
      "properties": [
        [
          "structured-data",
          {},
          "uri",
          "http://dir.example.com/venues/big-hall.vcf"
        ],
        [
          "uid",
          {},
          "text",
          "4954DC22-5BD6-4E98-844D-0302982F54AC"
        ]
      ]
    }
  }
}
]]></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="jscalendarbis" section="2.2" sectionFormat="parens">Task object</xref>.  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>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</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>ESTIMATED-DURATION</td>
                <td>
                  <xref target="ical-tasks" section="12.1" sectionFormat="comma"/>
                </td>
                <td>estimatedDuration</td>
                <td>
                  <xref target="ical-prop-estimated-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>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>organizerCalendarAddress</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>RRULE</td>
                <td>
                  <xref target="RFC5545" section="3.8.5.3" sectionFormat="comma"/>
                </td>
                <td>recurrenceRule</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>SHOW-WITHOUT-TIME</td>
                <td>
                  <xref target="icaljscalexts" section="4.2" sectionFormat="comma"/>
                </td>
                <td>showWithoutTime</td>
                <td>
                  <xref target="ical-prop-show-without-time"/>
                </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>
            </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-icalendar">"iCalendar" property</xref> of the Task object.</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>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="jscalendarbis" section="4.5.1" 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
ACKNOWLEDGED:20241002T114703Z
...
]]></sourcecode>
            <sourcecode type="json"><![CDATA[
"alerts": {
  "1204B2FA-E4A0-4335-B7CD-0DDC09C9B890": {
    "@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="jscalendarbis" section="4.5.1" 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-icalendar">iCalendar/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
ACTION:DISPLAY
...
]]></sourcecode>
            <sourcecode type="json"><![CDATA[
"alerts": {
  "02E4CAD6-B7A7-4EE4-93A6-4AA5AFD080E2": {
    "@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
ACTION:AUDIO
...
]]></sourcecode>
            <sourcecode type="json"><![CDATA[
"alerts": {
  "FC529A2B-D10F-461D-BDCF-55C77BB4B933": {
    "@type": "Alert",
    "iCalendar": {
      "@type": "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, PARTICIPANT, VLOCATION, or VCALENDAR component converts to a <xref target="jscalendarbis" section="1.4.11" sectionFormat="parens">Link object</xref>.  The converted object is set in the "links" property of the Event, Task, Participant, Location, or Group object.
          </t>
          <t>The key of the Link object <bcp14>MUST</bcp14> be the value of the <xref target="ical-param-jsid">JSID parameter</xref>, if set. If no JSID parameter is set, then the key <bcp14>MAY</bcp14> be the UUIDv5 generated from the property value (see <xref target="generating-jscalendar-ids"/>). When converting to iCalendar, implementations <bcp14>MAY</bcp14> omit setting the JSID parameter if the key matches the UUIDv5 of the ATTACH property value and the key is not part of a JSON pointer in any JSPTR parameter value.</t>
          <t>The ATTACH 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>MUST</bcp14> be set in the "mediatype" 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>LABEL</td>
                <td>
                  <xref target="RFC7986" section="6.4" sectionFormat="comma"/>
                </td>
                <td>title</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>Remarks:</t>
          <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": {
  "245708bf-8e07-5d3b-a5da-2974a63c3b91": {
    "@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": {
  "7beac36a-9287-57cb-96ab-dd2fc91163a2": {
    "@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="jscalendarbis" section="4.4.5" sectionFormat="parens">Participant object</xref>.  The converted object is set in the "participants" property of the Event or Task object. The property value converts to the calendarAddress property of the Participant object.</t>
          <t>The key of the Participant object <bcp14>MUST</bcp14> be the value of the <xref target="ical-param-jsid">JSID parameter</xref>, if set. If no JSID parameter is set, then the key <bcp14>MAY</bcp14> be the UUIDv5 generated from the property value (see <xref target="generating-jscalendar-ids"/>). When converting to iCalendar, implementations <bcp14>MAY</bcp14> omit setting the JSID parameter if the key matches the UUIDv5 of the ATTENDEE property value and the key is not part of a JSON pointer in any JSPTR parameter value.</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. How to deal with conflicting values is implementation-specific.</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>ROOM converts to "location"</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>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>OWNER role defined in <xref target="icaljscalexts"/></td>
              </tr>
              <tr>
                <td>RSVP</td>
                <td>
                  <xref target="RFC5545" section="3.2.17" sectionFormat="comma"/>
                </td>
                <td>expectReply</td>
                <td/>
              </tr>
              <tr>
                <td>SENT-BY</td>
                <td>
                  <xref target="RFC5545" section="3.2.18" sectionFormat="comma"/>
                </td>
                <td>sentBy</td>
                <td/>
              </tr>
            </tbody>
          </table>
          <t>The PARTSTAT of an ATTENDEE property in a VTODO component converts not only to the "participationStatus" property of the Participant object, but also to its progress property if the PARTSTAT parameter value is specific for VTODO components:</t>
          <table anchor="ical-prop-attendee-param-partstat">
            <name>Converting the PARTSTAT parameter in a VTODO component to Participant properties</name>
            <thead>
              <tr>
                <th>PARTSTAT</th>
                <th>Reference</th>
                <th>participationStatus</th>
                <th>progress</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td>NEEDS-ACTION</td>
                <td>
                  <xref target="RFC5545" section="3.2.12" sectionFormat="comma"/>
                </td>
                <td>needs-action</td>
                <td/>
              </tr>
              <tr>
                <td>ACCEPTED</td>
                <td>
                  <xref target="RFC5545" section="3.2.12" sectionFormat="comma"/>
                </td>
                <td>accepted</td>
                <td/>
              </tr>
              <tr>
                <td>DECLINED</td>
                <td>
                  <xref target="RFC5545" section="3.2.12" sectionFormat="comma"/>
                </td>
                <td>declined</td>
                <td/>
              </tr>
              <tr>
                <td>TENTATIVE</td>
                <td>
                  <xref target="RFC5545" section="3.2.12" sectionFormat="comma"/>
                </td>
                <td>tentative</td>
                <td/>
              </tr>
              <tr>
                <td>DELEGATED</td>
                <td>
                  <xref target="RFC5545" section="3.2.12" sectionFormat="comma"/>
                </td>
                <td>delegated</td>
                <td/>
              </tr>
              <tr>
                <td>COMPLETED</td>
                <td>
                  <xref target="RFC5545" section="3.2.12" sectionFormat="comma"/>
                </td>
                <td>accepted</td>
                <td>completed</td>
              </tr>
              <tr>
                <td>IN-PROCESS</td>
                <td>
                  <xref target="RFC5545" section="3.2.12" sectionFormat="comma"/>
                </td>
                <td>accepted</td>
                <td>in-process</td>
              </tr>
              <tr>
                <td>FAILED</td>
                <td>
                  <xref target="ical-tasks" section="11.1" sectionFormat="comma"/>
                </td>
                <td>accepted</td>
                <td>failed</td>
              </tr>
            </tbody>
          </table>
          <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;RSVP=TRUE;PARTSTAT=TENTATIVE;CN=Henry Cabot:mailto:hcabot@example.com
ORGANIZER:mailto:organizer@example.com
  ]]></sourcecode>
            <sourcecode type="json"><![CDATA[
"participants": {
  "0b235cc4-f04d-5fc4-98a3-c066650b3fbf": {
    "@type": "Participant",
    "calendarAddress": "mailto:hcabot@example.com",
    "name": "Henry Cabot",
    "participationStatus": "tentative",
    "expectReply": true
  },
  "251d3e9f-d83f-534c-8c45-c2896c75670c": {
    "@type": "Participant",
    "calendarAddress": "mailto:organizer@example.com",
    "roles": {
      "owner": true
    }
  }
},
"organizerCalendarAddress": "mailto:organizer@example.com"
]]></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
UID:6CF544E4-BBC7-45A2-97FF-DFD1908CCE40
CALENDAR-ADDRESS:mailto:foo@example.com
DESCRIPTION:some description
...
END:PARTICIPANT
ATTENDEE;RSVP=TRUE;PARTSTAT=TENTATIVE:mailto:foo@example.com
ORGANIZER:mailto:organizer@example.com
  ]]></sourcecode>
            <sourcecode type="json"><![CDATA[
"participants": {
  "59eb121c-e8f2-558a-9049-ef750a5976bd": {
    "@type": "Participant",
    "calendarAddress": "mailto:foo@example.com",
    "participationStatus": "tentative",
    "expectReply": true,
    "description": "some description",
    "iCalendar": {
      "@type": "ICalComponent",
      "name": "participant",
      "properties": [
        [
          "uid",
          {},
          "text",
          "6CF544E4-BBC7-45A2-97FF-DFD1908CCE40"
        ]
      ]
    },
    "...": ""
  },
  "251d3e9f-d83f-534c-8c45-c2896c75670c": {
    "@type": "Participant",
    "calendarAddress": "mailto:organizer@example.com",
    "...": ""
  }
},
"organizerCalendarAddress": "mailto:organizer@example.com"
]]></sourcecode>
          </figure>
          <figure anchor="test-ical-prop-attendee-vtodo-partstat">
            <name>Converting the ATTENDEE property with a VTODO-specific participation status</name>
            <sourcecode type="text/calendar"><![CDATA[
BEGIN:VTODO
ATTENDEE;RSVP=TRUE;PARTSTAT=COMPLETED:mailto:foo@example.com
ORGANIZER:mailto:organizer@example.com
...
  ]]></sourcecode>
            <sourcecode type="json"><![CDATA[
"@type": "Task",
"participants": {
  "59eb121c-e8f2-558a-9049-ef750a5976bd": {
    "@type": "Participant",
    "calendarAddress": "mailto:foo@example.com",
    "participationStatus": "accepted",
    "progress": "completed",
    "expectReply": true,
    "...": ""
  },
  "251d3e9f-d83f-534c-8c45-c2896c75670c": {
    "@type": "Participant",
    "calendarAddress": "mailto:organizer@example.com",
    "...": ""
  }
},
"organizerCalendarAddress": "mailto:organizer@example.com"
]]></sourcecode>
          </figure>
          <figure anchor="test-ical-prop-attendee-role-owner">
            <name>Converting the ATTENDEE property with the OWNER role</name>
            <sourcecode type="text/calendar"><![CDATA[
ATTENDEE;RSVP=TRUE:mailto:foo@example.com
ATTENDEE;ROLE=OWNER;RSVP=TRUE:mailto:bar@example.com
ORGANIZER:mailto:organizer@example.com
  ]]></sourcecode>
            <sourcecode type="json"><![CDATA[
"participants": {
  "59eb121c-e8f2-558a-9049-ef750a5976bd": {
    "@type": "Participant",
    "calendarAddress": "mailto:foo@example.com",
    "expectReply": true
  },
  "5b6f4fa0-3695-53a7-904b-d0a6f8bc326f": {
    "@type": "Participant",
    "calendarAddress": "mailto:bar@example.com",
    "expectReply": true,
    "roles": {
      "owner": true
    }
  }
},
"organizerCalendarAddress": "mailto:organizer@example.com"
]]></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="jmap-calendars" section="5.1.1" sectionFormat="parens">"calendarAddress" property</xref> of the Participant object.
          </t>
          <t>Implementations <bcp14>MAY</bcp14> preserve the fact that a Participant object's "calendarAddress" property converted from the CALENDAR-ADRESS property of a PARTICIPANT component, rather than an ATTENDEE property. In this case, they <bcp14>MUST</bcp14> add an entry for the "calendarAddress" property in the "iCalendar/convertedProperties" property 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
UID:47AD2E1C-49D4-45DF-BD83-8398ACC7D8E2
...
END:PARTICIPANT
  ]]></sourcecode>
            <sourcecode type="json"><![CDATA[
"participants": {
  "59eb121c-e8f2-558a-9049-ef750a5976bd": {
    "@type": "Participant",
    "calendarAddress": "mailto:foo@example.com",
    "iCalendar": {
      "@type": "ICalComponent",
      "name": "participant",
      "convertedProperties": {
        "calendarAddress": {
          "@type": "ICalProperty",
          "name": "calendar-address"
        }
      },
      "properties": [
        [
          "uid",
          {},
          "text",
          "47AD2E1C-49D4-45DF-BD83-8398ACC7D8E2"
        ]
      ]
    }
  }
}
]]></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="jscalendarbis" section="4.2.10" 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:Favorites
CATEGORIES:Meeting
  ]]></sourcecode>
            <sourcecode type="json"><![CDATA[
"keywords": {
  "Favorites": 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="jscalendarbis" 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-icalendar">iCalendar/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="jscalendarbis" section="4.2.12" 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-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="jscalendarbis" section="4.2.11" 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="jscalendarbis" section="4.2.7" sectionFormat="parens">VirtualLocation object</xref>.  The converted object is set in the "virtualLocations" property of the Event or Task object. The property value converts to the "uri" property of the VirtualLocation object.</t>
          <t>The key of the VirtualLocation object <bcp14>MUST</bcp14> be the value of the <xref target="ical-param-jsid">JSID parameter</xref>, if set. If no JSID parameter is set, then the key <bcp14>MAY</bcp14> be the UUIDv5 generated from the property value (see <xref target="generating-jscalendar-ids"/>). When converting to iCalendar, implementations <bcp14>MAY</bcp14> omit setting the JSID parameter if the key matches the UUIDv5 of the CONFERENCE property value and the key is not part of a JSON pointer in any JSPTR parameter value.</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="Web video chat, access code=76543"
 :https://chat.example.com/audio?id=123456
  ]]></sourcecode>
            <sourcecode type="json"><![CDATA[
"virtualLocations": {
  "67e4a1e9-cffc-5bd4-9602-1a5dfc8e1626": {
    "@type": "VirtualLocation",
    "name": "Web video chat, access code=76543",
    "uri": "https://chat.example.com/audio?id=123456",
    "features": {
      "audio": true,
      "video": true
    }
  }
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="ical-prop-coordinates">
          <name>COORDINATES</name>
          <t>
            The <xref target="icaljscalexts" section="4.1" sectionFormat="parens">COORDINATES property</xref> in a VLOCATION component converts to the <xref target="jscalendarbis" section="4.2.5" sectionFormat="parens">"coordinates" property</xref> of the Location object.</t>
          <t>The following example illustrates how to convert the COORDINATES property:</t>
          <figure anchor="test-ical-prop-coordinates">
            <name>Converting the COORDINATES property</name>
            <sourcecode type="text/calendar"><![CDATA[
BEGIN:VEVENT
BEGIN:VLOCATION
COORDINATES;VALUE=URI:geo:48.198634,16.371648;crs=wgs84;u=40
...
  ]]></sourcecode>
            <sourcecode type="json"><![CDATA[
"locations": {
  "B995322D-2C00-4DE0-8958-DB6687CF3DB3": {
    "@type": "Location",
    "coordinates": "geo:48.198634,16.371648;crs=wgs84;u=40",
    "...": ""
  }
}
]]></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="jscalendarbis" section="4.1.4" 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, or PARTICIPANT component converts to the <xref target="jscalendarbis" section="4.2.2" sectionFormat="parens">"description" property</xref> of the Event, Task, Group, 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-icalendar">"iCalendar" 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:Their pancakes are delicious\; they are fluffy and sweet.
  ]]></sourcecode>
            <sourcecode type="json"><![CDATA[
"description": "Their pancakes 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="jscalendarbis" section="5.1.2" sectionFormat="parens">"duration" property</xref> of the Event object.
          </t>
          <t>If the value type of the DTEND property is DATE, then the duration is the number of days or weeks between the DTSTART and DTEND property values. If the value type is DATE-TIME, then the duration is the timespan between 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 it converts to the "endTimeZone" property of the Event.</t>
          <t>Implementations <bcp14>MAY</bcp14> preserve the fact that the duration got determined by the DTEND property. How to do this depends on the timezone identifiers of the DTSTART and DTEND properties: If the time zone identifiers are not equal, then the presence of the "endTimeZone" property implies that it converted from the DTEND property. If the time zone identifiers are equal, then implementations <bcp14>MAY</bcp14> set the <xref target="jscal-prop-icalendar">"iCalendar" 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".</t>
          <t>The following examples illustrate how to convert the DTEND property:</t>
          <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:20241017T130000
DTEND;TZID=Asia/Bangkok:20241018T040000
  ]]></sourcecode>
            <sourcecode type="json"><![CDATA[
"start": "2024-10-17T13:00:00",
"timeZone": "Europe/Berlin",
"duration": "PT10H",
"endTimeZone": "Asia/Bangkok"
]]></sourcecode>
          </figure>
          <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",
"iCalendar": {
  "@type": "ICalComponent",
  "name": "vevent",
  "convertedProperties": {
    "duration": {
      "@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:20240107
  ]]></sourcecode>
            <sourcecode type="json"><![CDATA[
"start": "2024-01-02T00:00:00",
"timeZone": null,
"duration": "P5D",
"showWithoutTime": true,
"iCalendar": {
  "@type": "ICalComponent",
  "name": "vevent",
  "convertedProperties": {
    "duration": {
      "@type": "ICalProperty",
      "name": "dtend"
    }
  }
}
]]></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="jscalendarbis" section="4.1.5" sectionFormat="parens">"updated" property</xref> of the Event or Task 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>
        </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 or VTODO component converts to the "start" property of the Event or Task object (Sections 5.1.1 and 5.2.2 of <xref target="jscalendarbis"/>).</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="jscalendarbis" 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.</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>
          <figure anchor="test-ical-prop-dtstart-tzid-non-iana">
            <name>Converting the DTSTART property with a non-IANA TZID parameter</name>
            <sourcecode type="text/calendar"><![CDATA[
DTSTART;TZID="W. Europe Standard Time":20241121T105302
]]></sourcecode>
            <sourcecode type="json"><![CDATA[
"start": "2024-11-21T10:53:02",
"timeZone": "Europe/Berlin",
"iCalendar": {
  "@type": "ICalComponent",
  "name": "vevent",
  "convertedProperties": {
    "start": {
      "@type": "ICalProperty",
      "name": "dtstart",
      "parameters": {
        "tzid": "W. Europe Standard Time"
      }
    }
  }
}
]]></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="jscalendarbis" 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 it contains both the DUE and DTSTART properties and the timezone identifier of the DUE property differs from that of the DTSTART property, then the "due" date-time property value <bcp14>MUST</bcp14> be relative to the time zone of DTSTART.</t>
          <t>If the value type of the DUE property is DATE, then the value of the <xref target="jscalendarbis" 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[
BEGIN:VTODO
DUE;TZID=Europe/Berlin:20240921T105302
]]></sourcecode>
            <sourcecode type="json"><![CDATA[
"@type": "Task",
"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[
BEGIN:VTODO
DUE:20240921T105302Z
]]></sourcecode>
            <sourcecode type="json"><![CDATA[
"@type": "Task",
"due": "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[
BEGIN:VTODO
DUE:20240921T105302
]]></sourcecode>
            <sourcecode type="json"><![CDATA[
"@type": "Task",
"due": "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[
BEGIN:VTODO
DUE;VALUE=DATE:20240921
]]></sourcecode>
            <sourcecode type="json"><![CDATA[
"@type": "Task",
"due": "2024-09-21T00:00:00",
"timeZone": null,
"showWithoutTime": true
]]></sourcecode>
          </figure>
          <figure anchor="test-ical-prop-due-and-dtstart-date">
            <name>Converting the DUE property with value type DATE in combination with DTSTART</name>
            <sourcecode type="text/calendar"><![CDATA[
BEGIN:VTODO
DTSTART;VALUE=DATE:20250220
DUE;VALUE=DATE:20250221
]]></sourcecode>
            <sourcecode type="json"><![CDATA[
"@type": "Task",
"start": "2025-02-20T00:00:00",
"due": "2025-02-21T00:00:00",
"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="jscalendarbis" 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-estimated-duration">
          <name>ESTIMATED-DURATION</name>
          <t>
            The <xref target="ical-tasks" section="12.1" sectionFormat="parens">ESTIMATED-DURATION property</xref> in a VTODO component converts to the <xref target="jscalendarbis" section="5.2.3" sectionFormat="parens">"estimatedDuration" property</xref> of the Task object.
          </t>
          <t>The following example illustrates how to convert the ESTIMATED-DURATION property:</t>
          <figure anchor="test-ical-prop-estimated-duration">
            <name>Converting the ESTIMATED-DURATION</name>
            <sourcecode type="text/calendar"><![CDATA[
BEGIN:VTODO
ESTIMATED-DURATION:P2D
]]></sourcecode>
            <sourcecode type="json"><![CDATA[
"@type": "Task",
"estimatedDuration": "P2D"
]]></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> in a VEVENT or VTODO component converts to a <xref target="jscalendarbis" section="1.4.9" sectionFormat="parens">PatchObject value</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" member to "true" and <bcp14>MUST NOT</bcp14> set any other property.</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",
"recurrenceRule": {
  "@type": "RecurrenceRule",
  "frequency": "monthly"
},
"recurrenceOverrides": {
  "2023-08-01T13:00:00": {
    "excluded": true
  }
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="ical-prop-geo">
          <name>GEO</name>
          <t>A GEO property with the DERIVED parameter value "TRUE" does not convert to JSCalendar. For non-derived GEO properties, the following rules apply:</t>
          <t>
            The <xref target="RFC5545" section="3.8.1.6" sectionFormat="parens">GEO property</xref> in a VEVENT or VTODO component converts to a <xref target="jscalendarbis" section="4.2.5" sectionFormat="parens">Location object</xref>.  If the VEVENT or VTODO component also contains the <xref target="ical-prop-location">LOCATION property</xref>, then the GEO and LOCATION properties convert to the same Location object.  The converted object is set in the "locations" property of the Event or Task object.
          </t>
          <t>The key of the Location object <bcp14>MUST</bcp14> be the value of the <xref target="ical-param-jsid">JSID parameter</xref>, if set. If no JSID parameter is set, then the key <bcp14>MAY</bcp14> be the UUIDv5 generated from the property value (see <xref target="generating-jscalendar-ids"/>). When converting to iCalendar, implementations <bcp14>MAY</bcp14> omit setting the JSID parameter if the key matches the UUIDv5 of the GEO property value and the key is not part of a JSON pointer in any JSPTR parameter value.</t>
          <t>
            The <xref target="RFC5545" section="3.8.1.6" sectionFormat="parens">GEO property</xref> in a VLOCATION component converts to the <xref target="jscalendarbis" section="4.2.5" sectionFormat="parens">"coordinates" property</xref> of the Location object.
          </t>
          <t>The pair of FLOAT values converts to a 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 optional "coord-c" part of the URI <bcp14>MUST</bcp14> be omitted.</t>
          <t>Implementations <bcp14>MAY</bcp14> preserve the fact that the coordinates converted from a GEO property by setting the JSON pointer path to the "coordinates" property in the "iCalendar/convertedProperties" property. If the GEO property converted from a VEVENT or VTODO component, then the "iCalendar" property <bcp14>MUST</bcp14> be that of the Event or Task object, for the VLOCATION component it <bcp14>MUST</bcp14> be the "iCalendar" property of the Location object.</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. The JSID parameter is set to simplify testing.</name>
            <sourcecode type="text/calendar"><![CDATA[
GEO;JSID=loc1:45.5;-93.3
  ]]></sourcecode>
            <sourcecode type="json"><![CDATA[
"locations": {
  "loc1": {
    "@type": "Location",
    "coordinates": "geo:45.5,-93.3"
  }
},
"iCalendar": {
  "@type": "ICalComponent",
  "name": "vevent",
  "convertedProperties": {
    "locations/loc1/coordinates": {
      "@type": "ICalProperty",
      "name": "geo"
    }
  }
}
]]></sourcecode>
          </figure>
          <figure anchor="test-ical-prop-geo-and-location">
            <name>Converting the GEO and LOCATION properties in a VEVENT. The JSID parameters are set to simplify testing.</name>
            <sourcecode type="text/calendar"><![CDATA[
LOCATION;JSID=loc1:Taj Mahal
GEO;JSID=loc1:27.175;78.041944
  ]]></sourcecode>
            <sourcecode type="json"><![CDATA[
"locations": {
  "loc1": {
    "@type": "Location",
    "name": "Taj Mahal",
    "coordinates": "geo:27.175,78.041944",
    "...": ""
  }
},
"iCalendar": {
  "@type": "ICalComponent",
  "name": "vevent",
  "convertedProperties": {
    "locations/loc1/coordinates": {
      "@type": "ICalProperty",
      "name": "geo"
    }
  }
}
]]></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": {
  "8FC58765-4559-49BC-8718-A5E46FC433B9": {
    "@type": "Location",
    "name": "Eiffel Tower",
    "coordinates": "geo:48.858222,2.2945",
    "iCalendar": {
      "@type": "ICalComponent",
      "name": "vlocation",
      "convertedProperties": {
        "coordinates": {
          "@type": "ICalProperty",
          "name": "geo"
        }
      },
      "...": ""
    }
  }
}
]]></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, PARTICIPANT, or VCALENDAR component converts to a <xref target="jscalendarbis" section="1.4.11" sectionFormat="parens">Link object</xref>.  The converted object is set in the "links" property of the Event, Task, Location, Participant, or Group object.
          </t>
          <t>The key of the Link object <bcp14>MUST</bcp14> be the value of the <xref target="ical-param-jsid">JSID parameter</xref>, if set. If no JSID parameter is set, then the key <bcp14>MAY</bcp14> be the UUIDv5 generated from the property value (see <xref target="generating-jscalendar-ids"/>). When converting to iCalendar, implementations <bcp14>MAY</bcp14> omit setting the JSID parameter if the key matches the UUIDv5 of the IMAGE property value and the key is not part of a JSON pointer in any JSPTR parameter value.</t>
          <t>The IMAGE 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 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>LABEL</td>
                <td>
                  <xref target="RFC7986" section="6.4" sectionFormat="comma"/>
                </td>
                <td>title</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 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,THUMBNAIL;LABEL=An image;FMTTYPE=image/png:
 https://example.com/images/party.png
  ]]></sourcecode>
            <sourcecode type="json"><![CDATA[
"links": {
  "2c42ac17-1eaf-5a75-a216-aef848785d79": {
    "@type": "Link",
    "href": "https://example.com/images/party.png",
    "display": {
      "badge": true,
      "thumbnail": true
    },
    "contentType": "image/png",
    "title": "An 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 VCALENDAR component converts to the <xref target="jscalendarbis" section="4.1.5" sectionFormat="parens">"updated" property</xref> of the Group object.
          </t>
          <t>
              The <xref target="RFC5545" section="3.8.7.3" sectionFormat="parens">LAST-MODIFIED property</xref> in a VEVENT or VTODO component does <em>not</em> convert to the <xref target="jscalendarbis" section="4.1.5" sectionFormat="parens">"updated" property</xref> of the Event or Task object. Implementations <bcp14>MAY</bcp14> instead preserve the LAST-MODIFIED property in the "iCalendar" 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[
BEGIN:VCALENDAR
LAST-MODIFIED:20240914T231257Z
...
  ]]></sourcecode>
            <sourcecode type="json"><![CDATA[
"@type": "Group",
"updated": "2024-09-14T23:12:57Z"
]]></sourcecode>
          </figure>
        </section>
        <section anchor="ical-prop-link">
          <name>LINK</name>
          <t>A <xref target="RFC9253" section="8.2" sectionFormat="parens">LINK property</xref> with value type URI in a VEVENT, VTODO, PARTICIPANT, VLOCATION, or VCALENDAR component converts to a <xref target="jscalendarbis" section="1.4.11" sectionFormat="parens">Link object</xref>.  The converted object is set in the "links" property of the Event, Task, Participant, Location, or Group object.</t>
          <t>The key of the Link object <bcp14>MUST</bcp14> be the value of the <xref target="ical-param-jsid">JSID parameter</xref>, if set. If no JSID parameter is set, then the key <bcp14>MAY</bcp14> be the UUIDv5 generated from the property value (see <xref target="generating-jscalendar-ids"/>). When converting to iCalendar, implementations <bcp14>MAY</bcp14> omit setting the JSID parameter if the key matches the UUIDv5 of the LINK property value and the key is not part of a JSON pointer in any JSPTR parameter value.</t>
          <t>The LINK property value converts to the "href" property of the Link object.</t>
          <t>The LINK property parameters convert as follows:</t>
          <table>
            <name>Parameters of the LINK 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>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 any other value type does not convert to a standard JSCalendar element. Implementations <bcp14>MAY</bcp14> convert it to the <xref target="jscal-prop-icalendar">"iCalendar" property</xref>.</t>
          <t>The following example illustrates how to convert the LINK property:</t>
          <figure anchor="test-ical-prop-link">
            <name>Converting the LINK property</name>
            <sourcecode type="text/calendar"><![CDATA[
LINK;LINKREL="https://example.com/linkrel/source";LABEL=Venue;VALUE=URI:
 https://example.com/events
  ]]></sourcecode>
            <sourcecode type="json"><![CDATA[
"links": {
  "63023b12-fcf4-53fa-841d-8c1684b9f80b": {
    "@type": "Link",
    "href": "https://example.com/events",
    "title": "Venue",
    "rel": "https://example.com/linkrel/source"
  }
}
]]></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 or VTODO component converts to a <xref target="jscalendarbis" 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 or Task.</t>
          <t>The key of the Location object <bcp14>MUST</bcp14> be the value of the <xref target="ical-param-jsid">JSID parameter</xref>, if set. If no JSID parameter is set, then the key <bcp14>MAY</bcp14> be the UUIDv5 generated from the property value (see <xref target="generating-jscalendar-ids"/>). When converting to iCalendar, implementations <bcp14>MAY</bcp14> omit setting the JSID parameter if the key matches the UUIDv5 of the LOCATION property value and the key is not part of a JSON pointer in any JSPTR parameter value.</t>
          <t>The LOCATION property value converts to the "title" property of the Location object.</t>
          <t>If the calendar component contains multiple VLOCATION components, then the LOCATION property also converts to the "mainLocationId" property of the Event or Task object. If the LOCATION property does not have the DERIVED parameter set to TRUE, then the "mainLocationId" is set to the key of the Location object of the LOCATION property. If instead the LOCATION property is derived and its property value matches the NAME property value of a VLOCATION component, then the "mainLocationId" is the identifier of the Location object of that VLOCATION component.</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": {
  "adde7a5b-2fb5-52aa-b760-595ea9edb80a": {
    "@type": "Location",
    "name": "Conference Room - F123, Bldg. 002",
    "...": ""
  }
}
]]></sourcecode>
          </figure>
          <t>The following example illustrates how to convert the LOCATION property and multiple VLOCATION components:</t>
          <figure anchor="test-ical-prop-location-vlocation">
            <name>Converting the LOCATION property and multiple VLOCATION components</name>
            <sourcecode type="text/calendar"><![CDATA[
LOCATION;DERIVED=TRUE:Fred's Bar
BEGIN:VLOCATION
UID:12D2B3EC-AC84-4B70-9EB6-CFE6AD5830B0
NAME:Fred's Bar
LOCATION-TYPE:bar
...
END:VLOCATION
BEGIN:VLOCATION
UID:6B1C3968-38D2-46AF-B436-BF3F72D459D4
NAME:XYZ Parking
LOCATION-TYPE:parking
COORDINATES;VALUE=URI:geo:40.71427,-74.00597
...
END:VLOCATION
  ]]></sourcecode>
            <sourcecode type="json"><![CDATA[
"locations": {
  "12D2B3EC-AC84-4B70-9EB6-CFE6AD5830B0": {
    "@type": "Location",
    "name": "Fred's Bar",
    "locationTypes": {
      "bar": true
    },
    "...": ""
  },
  "6B1C3968-38D2-46AF-B436-BF3F72D459D4": {
    "@type": "Location",
    "name": "XYZ Parking",
    "locationTypes": {
      "parking": true
    },
    "coordinates": "geo:40.71427,-74.00597",
    "...": ""
  }
},
"mainLocationId": "12D2B3EC-AC84-4B70-9EB6-CFE6AD5830B0"
]]></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="jscalendarbis" section="4.2.5" sectionFormat="parens">"locationTypes" property</xref> of the Location object.</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
...
  ]]></sourcecode>
            <sourcecode type="json"><![CDATA[
"locations": {
  "0EA3F99A-835E-49CC-970C-8A4707A4C076": {
    "@type": "Location",
    "locationTypes": {
      "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="jscalendarbis" section="4.1.7" 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 component converts to the "name" property of the <xref target="jscalendarbis" section="4.2.5" sectionFormat="parens">Location</xref> or <xref target="jscalendarbis" section="4.4.5" 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="jscalendarbis" section="4.2.1" sectionFormat="parens">"title" property</xref> of the Group object. If the LANGUAGE parameter is set, then the parameter value converts to the <xref target="jscalendarbis" section="4.2.9" sectionFormat="parens">"locale" property</xref> of the same 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;LANGUAGE=de:Feiertage Deutschland 2025
...
  ]]></sourcecode>
            <sourcecode type="json"><![CDATA[
{
  "@type": "Group",
  "title": "Feiertage Deutschland 2025",
  "locale": "de",
  "...": ""
}
]]></sourcecode>
          </figure>
          <figure anchor="test-ical-prop-name-vlocation">
            <name>Converting the NAME property in the VLOCATION component</name>
            <sourcecode type="text/calendar"><![CDATA[
BEGIN:VEVENT
BEGIN:VLOCATION
NAME:Room B
...
END:VLOCATION
...
  ]]></sourcecode>
            <sourcecode type="json"><![CDATA[
"locations": {
  "8DE8404B-3BFA-443F-92B4-C678AD0F67DB": {
    "@type": "Location",
    "name": "Room B",
    "iCalendar": {
      "@type": "ICalComponent",
      "name": "vlocation"
    }
  }
}
]]></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="jscalendarbis" section="4.4.4" sectionFormat="parens">"organizerCalendarAddress" property</xref> of the Event or Task object.</t>
          <t>It also converts to a Participant object in the <xref target="jscalendarbis" section="4.4.5" sectionFormat="parens">"participants" property</xref>, if any of its parameters convert to a Participant object property (see <xref target="ical-prop-organizer-parameters"/>), or if none of the ATTENDEE properties in the iCalendar component have the ROLE parameter set to "OWNER". The ORGANIZER property value converts to the "calendarAddress" property of the Participant, the "owner" role is set in Participant "roles" property.</t>
          <t>The key of the Participant object <bcp14>MUST</bcp14> be the value of the <xref target="ical-param-jsid">JSID parameter</xref>, if set. If no JSID parameter is set, then the key <bcp14>MAY</bcp14> be the UUIDv5 generated from the ORGANIZER property value (see <xref target="generating-jscalendar-ids"/>). When converting to iCalendar, implementations <bcp14>MAY</bcp14> omit setting the JSID parameter if the key matches the UUIDv5 of the ORGANIZER property value and the key is not part of a JSON pointer in any JSPTR parameter value.</t>
          <t>The ORGANIZER property parameters convert to the Participant object as follows:</t>
          <table anchor="ical-prop-organizer-parameters">
            <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>EMAIL</td>
                <td>
                  <xref target="RFC7986" section="6.2" sectionFormat="comma"/>
                </td>
                <td>email</td>
                <td/>
              </tr>
              <tr>
                <td>SENT-BY</td>
                <td>
                  <xref target="RFC5545" section="3.2.18" sectionFormat="comma"/>
                </td>
                <td>sentBy</td>
                <td/>
              </tr>
            </tbody>
          </table>
          <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. How to deal with conflicting property values is implementation-specific.</t>
          <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:organizer@example.com
ATTENDEE;RSVP=TRUE:mailto:foo@example.com
  ]]></sourcecode>
            <sourcecode type="json"><![CDATA[
"organizerCalendarAddress": "mailto:organizer@example.com",
"participants": {
  "251d3e9f-d83f-534c-8c45-c2896c75670c": {
    "@type": "Participant",
    "calendarAddress": "mailto:organizer@example.com",
    "roles": {
      "owner": true
    }
  },
  "59eb121c-e8f2-558a-9049-ef750a5976bd": {
    "@type": "Participant",
    "calendarAddress": "mailto:foo@example.com",
    "expectReply": true,
    "...": ""
  }
}
]]></sourcecode>
          </figure>
          <figure anchor="test-ical-prop-organizer-and-attendee">
            <name>Converting an ORGANIZER and its related ATTENDEE property</name>
            <sourcecode type="text/calendar"><![CDATA[
ORGANIZER;CN=Jane Doe:mailto:organizer@example.com
ATTENDEE;PARTSTAT=ACCEPTED;CN=Jane Doe:mailto:organizer@example.com
ATTENDEE;RSVP=TRUE;PARTSTAT=TENTATIVE:mailto:foo@example.com
  ]]></sourcecode>
            <sourcecode type="json"><![CDATA[
"organizerCalendarAddress": "mailto:organizer@example.com",
"participants": {
  "251d3e9f-d83f-534c-8c45-c2896c75670c": {
    "@type": "Participant",
    "calendarAddress": "mailto:organizer@example.com",
    "name": "Jane Doe",
    "participationStatus": "accepted",
    "roles": {
      "owner": true
    }
  },
  "59eb121c-e8f2-558a-9049-ef750a5976bd": {
    "@type": "Participant",
    "calendarAddress": "mailto:foo@example.com",
    "expectReply": true,
    "participationStatus": "tentative",
    "...": ""
  }
}
]]></sourcecode>
          </figure>
          <figure anchor="test-ical-prop-organizer-cn-other-owner">
            <name>Converting an ORGANIZER property with CN parameter and another participant having the 'owner' role set</name>
            <sourcecode type="text/calendar"><![CDATA[
ORGANIZER;CN=Jane Doe:mailto:organizer@example.com
ATTENDEE;ROLE=OWNER;RSVP=TRUE:mailto:foo@example.com
  ]]></sourcecode>
            <sourcecode type="json"><![CDATA[
"organizerCalendarAddress": "mailto:organizer@example.com",
"participants": {
  "251d3e9f-d83f-534c-8c45-c2896c75670c": {
    "@type": "Participant",
    "calendarAddress": "mailto:organizer@example.com",
    "name": "Jane Doe",
    "roles": {
      "owner": true
    }
  },
  "59eb121c-e8f2-558a-9049-ef750a5976bd": {
    "@type": "Participant",
    "calendarAddress": "mailto:foo@example.com",
    "expectReply": true,
    "roles": {
      "owner": true
    },
    "...": ""
  }
}
]]></sourcecode>
          </figure>
          <figure anchor="test-ical-prop-organizer-other-owner">
            <name>Converting an ORGANIZER property with another participant having the 'owner' role set</name>
            <sourcecode type="text/calendar"><![CDATA[
ORGANIZER:mailto:organizer@example.com
ATTENDEE;ROLE=OWNER;RSVP=TRUE:mailto:foo@example.com
  ]]></sourcecode>
            <sourcecode type="json"><![CDATA[
"organizerCalendarAddress": "mailto:organizer@example.com",
"participants": {
  "59eb121c-e8f2-558a-9049-ef750a5976bd": {
    "@type": "Participant",
    "calendarAddress": "mailto:foo@example.com",
    "expectReply": true,
    "roles": {
      "owner": true
    },
    "...": ""
  }
}
]]></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="jscalendarbis" section="5.2.4" sectionFormat="parens">"percentComplete" property</xref> of the Task 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 VTODO component</name>
            <sourcecode type="text/calendar"><![CDATA[
BEGIN:VCALENDAR
BEGIN:VTODO
PERCENT-COMPLETE:53
...
  ]]></sourcecode>
            <sourcecode type="json"><![CDATA[
{
  "@type": "Group",
  "entries": [
    {
      "@type": "Task",
      "percentComplete": 53,
      "...": ""
    }
  ],
  "...": ""
}
]]></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="jscalendarbis" 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="jscalendarbis" section="4.1.3" sectionFormat="parens">"prodId" property</xref> of the Group object. Implementations <bcp14>MAY</bcp14> additionally convert it also 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>
              A <xref target="RFC5545" section="3.8.5.2" sectionFormat="parens">RDATE property</xref> with value type DATE or DATE-TIME in a VEVENT or VTODO component converts to a <xref target="jscalendarbis" section="1.4.9" sectionFormat="parens">PatchObject value</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 object. The PatchObject value <bcp14>MUST</bcp14> be an empty JSON object.</t>
          <t>A RDATE property with value type PERIOD does not convert to a standard JSCalendar element.  Implementations <bcp14>MAY</bcp14> convert it to the <xref target="jscal-prop-icalendar">"iCalendar" property</xref> of the Event or Task 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",
"recurrenceRule": {
  "@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="jscalendarbis" 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-icalendar">iCalendar</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="jscalendarbis" section="1.4.10" sectionFormat="parens">Relation object</xref>.  The converted object is set in the "relatedTo" property of the <xref target="jscalendarbis" section="4.1.2" sectionFormat="parens">Event or Task object</xref>, or the <xref target="jscalendarbis" section="4.5.1" sectionFormat="parens">Alert object</xref>.
          </t>
          <t>The property value in a VEVENT or VTODO converts as-is to the id of the Relation object in the "relatedTo" property. The property value in a VALARM converts to the same value as the id of that Alert object, which represents the VALARM component having that property value set in the UID property. Any RELTYPE parameters convert to the "relation" property in that Relation object. The parameter values convert in lowercase.</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=CHILD: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": {
      "child": 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
JSID:alert1
TRIGGER:-PT15M
DESCRIPTION:Event reminder
ACTION:DISPLAY
ACKNOWLEDGED:20210302T151514Z
END:VALARM
...
BEGIN:VALARM
UID:DE7B5C34-83FF-47FE-BE9E-FF41AE6DD097
JSID:alert2
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": {
  "alert1": {
    "@type": "Alert",
    "trigger": {
      "@type": "OffsetTrigger",
      "offset": "-PT15M"
    },
    "acknowledged": "2021-03-02T15:15:14Z",
    "iCalendar": {
      "@type": "ICalComponent",
      "name": "valarm",
      "properties": [
        [
          "description",
          {},
          "text",
          "Event reminder"
        ],
        [
          "uid",
          {},
          "text",
          "8297C37D-BA2D-4476-91AE-C1EAA364F8E1"
        ]
      ]
    },
    "...": ""
  },
  "alert2": {
    "@type": "Alert",
    "trigger": {
      "@type": "AbsoluteTrigger",
      "when": "2021-03-02T15:20:00Z"
    },
    "relatedTo": {
      "alert1": {
        "@type": "Relation",
        "relation": {
          "snooze": true
        }
      }
    },
    "iCalendar": {
      "@type": "ICalComponent",
      "name": "valarm",
      "properties": [
        [
          "description",
          {},
          "text",
          "Event reminder"
        ],
        [
          "uid",
          {},
          "text",
          "DE7B5C34-83FF-47FE-BE9E-FF41AE6DD097"
        ]
      ]
    },
    "...": ""
  }
}
]]></sourcecode>
          </figure>
        </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 or VTODO component converts to a <xref target="jscalendarbis" section="4.3.3" sectionFormat="parens">RecurrenceRule object</xref>.  The converted object is set in the "recurrenceRule" property of the Event or Task object.
          </t>
          <t>The RECUR value 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 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="text/calendar"><![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[
"recurrenceRule": {
  "@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="jscalendarbis" section="4.1.6" sectionFormat="parens">"sequence" property</xref> of the Event or Task 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="text/calendar"><![CDATA[
SEQUENCE:3
]]></sourcecode>
            <sourcecode type="json"><![CDATA[
"sequence": 3
]]></sourcecode>
          </figure>
        </section>
        <section anchor="ical-prop-show-without-time">
          <name>SHOW-WITHOUT-TIME</name>
          <t>The <xref target="icaljscalexts" section="4.2" sectionFormat="parens">SHOW-WITHOUT-TIME property</xref> in a VEVENT or VTODO component converts to the <xref target="jscalendarbis" section="4.2.4" sectionFormat="parens">"showWithoutTime" property</xref> of the Event or Task object. As outlined in the definition of the SHOW-WITHOUT-TIME property, the property <bcp14>MUST</bcp14> be ignored if the temporal value type of the VEVENT or VTODO component is DATE, or if the property value is "FALSE".</t>
          <t>The following example illustrates how to convert the SHOW-WITHOUT-TIME property:</t>
          <figure anchor="test-ical-prop-show-without-time">
            <name>Example for converting the SHOW-WITHOUT-TIME property</name>
            <sourcecode type="text/calendar"><![CDATA[
DTSTART;TZID=America/Chicago:20250521T080000
DURATION:PT12H
SHOW-WITHOUT-TIME;VALUE=BOOLEAN:TRUE
]]></sourcecode>
            <sourcecode type="json"><![CDATA[
"start": "2025-05-21T08:00:00",
"timeZone": "America/Chicago",
"duration": "PT12H",
"showWithoutTime": true
]]></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="jscalendarbis" section="5.1.4" sectionFormat="parens">"status" property</xref> of the Event object.

            The STATUS property in a VTODO component converts to the <xref target="jscalendarbis" 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="text/calendar"><![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="text/calendar"><![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="jscalendarbis" section="5.3.2" sectionFormat="parens">"source" property</xref> of the Group object.
          </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="text/calendar"><![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-styled-description">
          <name>STYLED-DESCRIPTION</name>
          <t>The <xref target="RFC9073" section="6.5" sectionFormat="parens">STYLED-DESCRIPTION property</xref> in a PARTICIPANT, VEVENT or VTODO component converts to the <xref target="jscalendarbis" section="4.2.2" sectionFormat="parens">"description" property</xref> of the Participant, Event or Task object 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> 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. If the value is TRUE, then another property in the same component is expected to contain the description.</li>
          </ul>
          <t>If these conditions are not met, implementations MAY preserve the property in the <xref target="jscal-prop-icalendar">"iCalendar" 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="jscalendarbis" section="4.2.1" sectionFormat="parens">"title" property</xref> of the Event or Task object. If the LANGUAGE parameter is set, then the parameter value converts to the <xref target="jscalendarbis" section="4.2.9" sectionFormat="parens">"locale" property</xref> of the same object.
          </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="jscalendarbis" section="4.2.5" sectionFormat="parens">"name" property</xref> of the Participant object.
          </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-language">
            <name>Converting the SUMMARY property with LANGUAGE parameter in a VEVENT</name>
            <sourcecode type="text/calendar"><![CDATA[
SUMMARY;LANGUAGE=fr:Fête d'anniversaire
  ]]></sourcecode>
            <sourcecode type="json"><![CDATA[
"title": "Fête d'anniversaire",
"locale": "fr"
]]></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": {
  "858DA9AE-695B-43CD-BA4E-294C945356BC": {
    "@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="jscalendarbis" section="4.4.2" sectionFormat="parens">"freeBusyStatus" property</xref> of the Event or Task object.
          </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="jscalendarbis" section="4.5.1" 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": {
  "2D3D674B-E3E4-4C63-BBF5-4582ED49BCB7": {
    "@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": {
  "6AB751CF-515B-4925-9B8D-5AA2185F3E64": {
    "@type": "Alert",
    "trigger": {
      "@type": "AbsoluteTrigger",
      "when": "2025-03-02T01:02:03Z"
    },
    "...": ""
  }
}
]]></sourcecode>
          </figure>
        </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="jscalendarbis" section="4.1.1" sectionFormat="parens">"uid" property</xref> of the Event, Task, or Group object.
          </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>
    </section>
    <section anchor="jscal-to-icalendar">
      <name>Converting JSCalendar to iCalendar</name>
      <section anchor="jscal-alert">
        <name>Alert</name>
        <t>The <xref target="jscalendarbis" section="4.5.1" sectionFormat="parens">Alert object</xref> converts to a <xref target="ical-comp-valarm">VALARM component</xref>.  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="jscalendarbis" section="4.5.1" sectionFormat="comma"/>
              </td>
              <td>ACKNOWLEDGED</td>
              <td>
                <xref target="ical-prop-acknowledged"/>
              </td>
            </tr>
            <tr>
              <td>action</td>
              <td>
                <xref target="jscalendarbis" section="4.5.1" sectionFormat="comma"/>
              </td>
              <td>ACTION</td>
              <td>
                <xref target="ical-prop-action"/>
              </td>
            </tr>
            <tr>
              <td>relatedTo</td>
              <td>
                <xref target="jscalendarbis" section="4.5.1" 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="jscalendarbis" section="4.5.1" 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>MAY</bcp14> be set.</t>
          </li>
        </ul>
        <t>Other properties <bcp14>MAY</bcp14> be converted to <xref target="ical-prop-jsprop">JSPROP properties</xref> in the VALARM component.</t>
      </section>
      <section anchor="jscal-event-and-task">
        <name>Event and Task</name>
        <t>The <xref target="jscalendarbis" section="2.1" sectionFormat="parens">Event object</xref> converts to a <xref target="ical-comp-vevent">VEVENT component</xref>, the <xref target="jscalendarbis" section="2.2" sectionFormat="parens">Task object</xref> converts to a <xref target="ical-comp-vtodo">VTODO component</xref>.</t>
        <t>In the iCalendar component, the value data types of the DTSTART, DUE and RECURRENCE-ID properties all <bcp14>MUST</bcp14> be of the same form, either DATE, or DATE WITH LOCAL TIME, or DATE WITH UTC TIME (see <xref target="RFC5545" section="3.3.5"/>). It <bcp14>MUST</bcp14> be DATE if the "showWithoutTime" property value is "true", the "timeZone" property value is null, and the time component is zero in the values of the "start", due", "duration", "estimatedDuration", "recurrenceId" properties, and the "until" property of the RecurrenceRule object, and in any key of the "recurrenceOverrides" property value. Otherwise, it <bcp14>MAY</bcp14> be DATE WITH UTC TIME if the "timeZone" property value is "Etc/UTC" and the "endTimeZone" property value is null. It <bcp14>MUST</bcp14> be DATE WITH LOCAL TIME in all other cases.</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="jscalendarbis" section="4.5.1" sectionFormat="comma"/>
              </td>
              <td>VALARM (component)</td>
              <td>
                <xref target="jscal-alert">Alert object</xref>
              </td>
            </tr>
            <tr>
              <td>categories</td>
              <td>
                <xref target="jscalendarbis" section="4.2.11" sectionFormat="comma"/>
              </td>
              <td>CONCEPT</td>
              <td>
                <xref target="ical-prop-concept"/>
              </td>
            </tr>
            <tr>
              <td>color</td>
              <td>
                <xref target="jscalendarbis" section="4.2.12" sectionFormat="comma"/>
              </td>
              <td>COLOR</td>
              <td>
                <xref target="ical-prop-color"/>
              </td>
            </tr>
            <tr>
              <td>created</td>
              <td>
                <xref target="jscalendarbis" section="4.1.4" sectionFormat="comma"/>
              </td>
              <td>CREATED</td>
              <td>
                <xref target="ical-prop-created"/>
              </td>
            </tr>
            <tr>
              <td>description</td>
              <td>
                <xref target="jscalendarbis" 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="jscalendarbis" 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>freeBusyStatus</td>
              <td>
                <xref target="jscalendarbis" 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="jscalendarbis" section="4.2.10" sectionFormat="comma"/>
              </td>
              <td>CATEGORIES</td>
              <td>
                <t>
                  <xref target="ical-prop-categories"/>
                </t>
              </td>
            </tr>
            <tr>
              <td>links</td>
              <td>
                <xref target="jscalendarbis" section="4.2.8" 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="jscalendarbis" section="4.2.9" sectionFormat="comma"/>
              </td>
              <td>LANGUAGE (parameter) of SUMMARY property</td>
              <td>
                <t><xref target="ical-prop-summary"/>, <xref target="ical-prop-description"/>, <xref target="ical-prop-styled-description"/></t>
              </td>
            </tr>
            <tr>
              <td>locations</td>
              <td>
                <xref target="jscalendarbis" 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>mainLocationId</td>
              <td>
                <xref target="jscalendarbis" section="4.2.6" sectionFormat="comma"/>
              </td>
              <td>LOCATION</td>
              <td>
                <t>
                  <xref target="jscal-location">Location object</xref>
                </t>
              </td>
            </tr>
            <tr>
              <td>method</td>
              <td>
                <xref target="jscalendarbis" section="4.1.7" 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>organizerCalendarAddress</td>
              <td>
                <xref target="jscalendarbis" section="4.4.4" sectionFormat="comma"/>
              </td>
              <td>ORGANIZER</td>
              <td>
                <t>
                  <xref target="ical-prop-organizer"/>
                </t>
              </td>
            </tr>
            <tr>
              <td>participants</td>
              <td>
                <xref target="jscalendarbis" section="4.4.5" 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="jscalendarbis" 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="jscalendarbis" 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="jscalendarbis" section="4.1.3" 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>progress</td>
              <td>
                <xref target="jscalendarbis" section="5.2.5" sectionFormat="comma"/>
              </td>
              <td>STATUS</td>
              <td>
                <t>
                  <xref target="ical-prop-status"/>
                </t>
              </td>
            </tr>
            <tr>
              <td>recurrenceId</td>
              <td>
                <xref target="jscalendarbis" 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="jscalendarbis" 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="jscalendarbis" section="4.3.4" sectionFormat="comma"/>
              </td>
              <td>RDATE, EXDATE or recurrence override component</td>
              <td><xref target="ical-recurring-components"/>, and remarks below</td>
            </tr>
            <tr>
              <td>recurrenceRule</td>
              <td>
                <xref target="jscalendarbis" 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="jscalendarbis" section="4.1.2" sectionFormat="comma"/>
              </td>
              <td>RELATED-TO</td>
              <td>
                <t>
                  <xref target="ical-prop-related-to"/>
                </t>
              </td>
            </tr>
            <tr>
              <td>sequence</td>
              <td>
                <xref target="jscalendarbis" section="4.1.6" sectionFormat="comma"/>
              </td>
              <td>SEQUENCE</td>
              <td>
                <t>
                  <xref target="ical-prop-sequence"/>
                </t>
              </td>
            </tr>
            <tr>
              <td>showWithoutTime</td>
              <td>
                <xref target="jscalendarbis" section="4.2.4" sectionFormat="comma"/>
              </td>
              <td>SHOW-WITHOUT-TIME</td>
              <td>
                <t><xref target="ical-prop-show-without-time"/>, and remarks below
                </t>
              </td>
            </tr>
            <tr>
              <td>timeZone</td>
              <td>
                <xref target="jscalendarbis" section="4.6.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>title</td>
              <td>
                <xref target="jscalendarbis" 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="jscalendarbis" section="4.1.1" sectionFormat="comma"/>
              </td>
              <td>UID</td>
              <td>
                <t>
                  <xref target="ical-prop-uid"/>
                </t>
              </td>
            </tr>
            <tr>
              <td>updated</td>
              <td>
                <xref target="jscalendarbis" section="4.1.5" 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>virtualLocations</td>
              <td>
                <xref target="jscalendarbis" section="4.2.7" 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 the "description" property converts to the DESCRIPTION or STYLED-DESCRIPTION property. A description of content type "text/plain" converts to the DESCRIPTION property. Any other description converts to the STYLED-DESCRIPTION property, in which case a plain text version of the rich-text description <bcp14>MAY</bcp14> be set additionally in the DESCRIPTION property, having its DERIVED parameter set to "TRUE". How to derive plain text from rich-text is implementation-specific.</t>
          </li>
          <li>
            <t>The entries in the "recurrenceOverrides" property convert depending on the contents of the PatchObject value. A PatchObject that sets the "excluded" member to "true" converts to an EXDATE property for the date-time of that recurrence instance. An empty PatchObject converts to an RDATE property. Any other PatchObject converts to a recurrence override component in the embedding VCALENDAR component.</t>
          </li>
          <li>
            <t>The "showWithoutTime" property only converts to the SHOW-WITHOUT-TIME property if the value data type of the DTSTART or DUE properties is of form DATE WITH UTC TIME or DATE WITH LOCAL TIME.</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="jscalendarbis" 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>endTimeZone</td>
              <td>
                <xref target="jscalendarbis" section="5.1.3" sectionFormat="comma"/>
              </td>
              <td>TZID parameter of DTEND</td>
              <td>
                <t><xref target="ical-prop-dtend"/>, <xref target="ical-prop-due"/></t>
              </td>
            </tr>
            <tr>
              <td>start</td>
              <td><xref target="jscalendarbis" section="5.1.1" sectionFormat="comma"/>,
              </td>
              <td>DTSTART</td>
              <td>
                <t>
                  <xref target="ical-prop-dtstart"/>
                </t>
              </td>
            </tr>
            <tr>
              <td>status</td>
              <td>
                <xref target="jscalendarbis" section="5.1.4" 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="jscalendarbis" 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="jscalendarbis" section="5.2.3" sectionFormat="comma"/>
              </td>
              <td>ESTIMATED-DURATION</td>
              <td>
                <t>
                  <xref target="ical-prop-estimated-duration"/>
                </t>
              </td>
            </tr>
            <tr>
              <td>percentComplete</td>
              <td>
                <xref target="jscalendarbis" 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="jscalendarbis" section="5.2.5" sectionFormat="comma"/>
              </td>
              <td>STATUS</td>
              <td>
                <t>
                  <xref target="ical-prop-status"/>
                </t>
              </td>
            </tr>
            <tr>
              <td>start</td>
              <td><xref target="jscalendarbis" section="5.2.2" sectionFormat="comma"/>,
              </td>
              <td>DTSTART</td>
              <td>
                <t>
                  <xref target="ical-prop-dtstart"/>
                </t>
              </td>
            </tr>
          </tbody>
        </table>
        <t>Other properties <bcp14>MAY</bcp14> be converted to <xref target="ical-prop-jsprop">JSPROP properties</xref> in the VEVENT or VTODO component.</t>
      </section>
      <section anchor="jscal-group">
        <name>Group</name>
        <t>The <xref target="jscalendarbis" section="2.3" sectionFormat="parens">Group object</xref> converts to a <xref target="ical-comp-vcalendar">VCALENDAR component</xref>.  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="jscalendarbis" section="4.2.11" sectionFormat="comma"/>
              </td>
              <td>CONCEPT</td>
              <td>
                <t>
                  <xref target="ical-prop-concept"/>
                </t>
              </td>
            </tr>
            <tr>
              <td>color</td>
              <td>
                <xref target="jscalendarbis" section="4.2.12" sectionFormat="comma"/>
              </td>
              <td>COLOR</td>
              <td>
                <t>
                  <xref target="ical-prop-color"/>
                </t>
              </td>
            </tr>
            <tr>
              <td>created</td>
              <td>
                <xref target="jscalendarbis" section="4.1.4" sectionFormat="comma"/>
              </td>
              <td>CREATED</td>
              <td>
                <t>
                  <xref target="ical-prop-created"/>
                </t>
              </td>
            </tr>
            <tr>
              <td>description</td>
              <td>
                <xref target="jscalendarbis" 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>entries</td>
              <td>
                <xref target="jscalendarbis" 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="jscalendarbis" section="4.2.10" sectionFormat="comma"/>
              </td>
              <td>CATEGORIES</td>
              <td>
                <t>
                  <xref target="ical-prop-categories"/>
                </t>
              </td>
            </tr>
            <tr>
              <td>links</td>
              <td>
                <xref target="jscalendarbis" section="4.2.8" 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="jscalendarbis" section="4.2.9" sectionFormat="comma"/>
              </td>
              <td>LANGUAGE (parameter) of either NAME, or DESCRIPTION (in order of preference)</td>
              <td>
                <t><xref target="ical-prop-name"/>, <xref target="ical-prop-description"/></t>
              </td>
            </tr>
            <tr>
              <td>prodId</td>
              <td>
                <xref target="jscalendarbis" section="4.1.3" 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="jscalendarbis" 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="jscalendarbis" 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="jscalendarbis" section="4.1.1" sectionFormat="comma"/>
              </td>
              <td>UID</td>
              <td>
                <t>
                  <xref target="ical-prop-uid"/>
                </t>
              </td>
            </tr>
            <tr>
              <td>updated</td>
              <td>
                <xref target="jscalendarbis" section="4.1.5" 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 "descriptionContentType" property value determines if the "description" property converts to the DESCRIPTION or STYLED-DESCRIPTION property. A description of content type "text/plain" converts to the DESCRIPTION property. Any other description converts to the STYLED-DESCRIPTION property, in which case a plain text version of the rich-text description <bcp14>MAY</bcp14> be set additionally in the DESCRIPTION property, having its DERIVED parameter set to "TRUE". How to derive plain text from rich-text is implementation-specific.</t>
          </li>
          <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>
        <t>Other properties <bcp14>MAY</bcp14> be converted to <xref target="ical-prop-jsprop">JSPROP properties</xref> in the VCALENDAR component.</t>
      </section>
      <section anchor="jscal-link">
        <name>Link</name>
        <t>The <xref target="jscalendarbis" section="1.4.11" sectionFormat="parens">Link object</xref> converts either an <xref target="ical-prop-attach">ATTACH property</xref> or an <xref target="ical-prop-image">IMAGE property</xref>. Which iCalendar property to choose is implementation-specific. As a guideline:</t>
        <ul>
          <li>Choose the iCalendar property name indicated in the <xref target="jscal-prop-icalendar">iCalendar</xref> of the JSCalendar object that contains this Link object, if set.</li>
          <li>Choose IMAGE, if the "display" property is set.</li>
          <li>Choose LINK, if the "rel" 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>contentType</td>
              <td>
                <xref target="jscalendarbis" 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="jscalendarbis" section="1.4.11" sectionFormat="comma"/>
              </td>
              <td>DISPLAY</td>
              <td><xref target="ical-prop-image"/>, and remarks below
              </td>
            </tr>
            <tr>
              <td>rel</td>
              <td>
                <xref target="jscalendarbis" section="1.4.11" sectionFormat="comma"/>
              </td>
              <td>LINKREL</td>
              <td>
                <xref target="RFC9253" section="6.1"/>
              </td>
            </tr>
            <tr>
              <td>size</td>
              <td>
                <xref target="jscalendarbis" 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="RFC7986" section="6.4" sectionFormat="comma"/>
              </td>
              <td>LABEL</td>
              <td>
                <xref target="ical-prop-attach"/>
              </td>
            </tr>
          </tbody>
        </table>
        <t>Other properties <bcp14>MAY</bcp14> be converted to <xref target="ical-prop-jsprop">JSPROP properties</xref> in the same component to which the Link object converts to as a property.</t>
      </section>
      <section anchor="jscal-location">
        <name>Location</name>
        <t>The <xref target="jscalendarbis" section="4.2.5" sectionFormat="parens">Location object</xref> converts to either a <xref target="ical-prop-location">LOCATION</xref> or <xref target="ical-prop-geo">GEO</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>If the "iCalendar" property on the Location object is set, or the parent JSCalendar object contains an entry for that Location in the "convertedProperties" property of its "iCalendar" property, then convert the object back to the named iCalendar component or property.</li>
          <li>Choose LOCATION if the key of the Location object in the "locations" property matches the "mainLocationId" property, or if the "name" property is set and the iCalendar component does not already contain a LOCATION property. The "name" property converts to the LOCATION property value.</li>
          <li>Choose the VLOCATION component otherwise.</li>
        </ul>
        <t>Implementations <bcp14>MAY</bcp14> convert one of the Location objects to both a VLOCATION component and the LOCATION and GEO properties of the component that contains the VLOCATION component. In this case, the DERIVED parameter <bcp14>MUST</bcp14> be set on the LOCATION and GEO properties with value "TRUE".</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="jscalendarbis" section="4.2.5" sectionFormat="comma"/>
              </td>
              <td>COORDINATES</td>
              <td><xref target="ical-prop-coordinates"/>, <xref target="ical-prop-geo"/></td>
            </tr>
            <tr>
              <td>links</td>
              <td>
                <xref target="jscalendarbis" section="4.2.8" 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="jscalendarbis" 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="jscalendarbis" section="4.2.5" sectionFormat="comma"/>
              </td>
              <td>NAME</td>
              <td>
                <xref target="ical-prop-name"/>
              </td>
            </tr>
          </tbody>
        </table>
        <t>Other properties <bcp14>MAY</bcp14> be converted to <xref target="ical-prop-jsprop">JSPROP properties</xref> in the VLOCATION component, or the component which the Location converts to as a property.</t>
      </section>
      <section anchor="jscal-participant">
        <name>Participant</name>
        <t>The <xref target="jscalendarbis" section="4.4.5" sectionFormat="parens">Participant object</xref> converts to an <xref target="ical-prop-attendee">ATTENDEE property</xref> and <xref target="ical-comp-participant">PARTICIPANT component</xref>, unless it is fully represented by the <xref target="ical-prop-organizer">ORGANIZER property</xref>:</t>
        <ul>
          <li>
            <t>It if fully represented by the ORGANIZER property if its "calendarAddress" property value matches the "organizerCalendarAddress" property value, and it does not have any role but the "owner" role set, and it only has properties set that convert to ORGANIZER parameters (see <xref target="ical-prop-organizer-parameters"/>).
        </t>
          </li>
          <li>
            <t>Otherwise, it converts to an ATTENDEE property if the "calendarAddress" property is set. The "calendarAddress" converts to the ATTENDEE property value.</t>
          </li>
          <li>
            <t>It converts to a PARTICIPANT component if any of the Participant properties in <xref target="jscal-participant-props-participant"/> are set. If the Participant object also converts to an ATTENDEE property, then the CALENDAR-ADDRESS property value of the PARTICIPANT component <bcp14>MUST</bcp14> match the ATTENDEE property value.</t>
          </li>
        </ul>
        <t>The following Participant properties convert to parameters of the ATTENDEE property. How to convert these if the Participant "calendarAddress" property is not set 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="jscalendarbis" section="4.4.5" sectionFormat="comma"/>
              </td>
              <td>DELEGATED-FROM</td>
              <td>
                <xref target="ical-prop-attendee"/>
              </td>
            </tr>
            <tr>
              <td>delegatedTo</td>
              <td>
                <xref target="jscalendarbis" section="4.4.5" sectionFormat="comma"/>
              </td>
              <td>DELEGATED-TO</td>
              <td>
                <xref target="ical-prop-attendee"/>
              </td>
            </tr>
            <tr>
              <td>email</td>
              <td>
                <xref target="jscalendarbis" section="4.4.5" sectionFormat="comma"/>
              </td>
              <td>EMAIL</td>
              <td><xref target="ical-prop-attendee"/>, and remarks below
              </td>
            </tr>
            <tr>
              <td>expectReply</td>
              <td>
                <xref target="jscalendarbis" section="4.4.5" sectionFormat="comma"/>
              </td>
              <td>RSVP</td>
              <td>
                <xref target="ical-prop-attendee"/>
              </td>
            </tr>
            <tr>
              <td>kind</td>
              <td>
                <xref target="jscalendarbis" section="4.4.5" sectionFormat="comma"/>
              </td>
              <td>CUTYPE</td>
              <td>
                <xref target="ical-prop-attendee"/>
              </td>
            </tr>
            <tr>
              <td>memberOf</td>
              <td>
                <xref target="jscalendarbis" section="4.4.5" sectionFormat="comma"/>
              </td>
              <td>MEMBER</td>
              <td>
                <xref target="ical-prop-attendee"/>
              </td>
            </tr>
            <tr>
              <td>name</td>
              <td>
                <xref target="jscalendarbis" section="4.4.5" sectionFormat="comma"/>
              </td>
              <td>CN</td>
              <td><xref target="ical-prop-attendee"/>, and remarks below
              </td>
            </tr>
            <tr>
              <td>participationStatus</td>
              <td>
                <xref target="jscalendarbis" section="4.4.5" sectionFormat="comma"/>
              </td>
              <td>PARTSTAT</td>
              <td>
                <xref target="ical-prop-attendee"/>
              </td>
            </tr>
            <tr>
              <td>progress</td>
              <td>
                <xref target="jscalendarbis" section="4.4.5" sectionFormat="comma"/>
              </td>
              <td>PARTSTAT</td>
              <td><xref target="ical-prop-attendee"/>, and remarks below
              </td>
            </tr>
            <tr>
              <td>roles</td>
              <td>
                <xref target="jscalendarbis" section="4.4.5" sectionFormat="comma"/>
              </td>
              <td>ROLE</td>
              <td><xref target="ical-prop-attendee"/>, and remarks below
              </td>
            </tr>
            <tr>
              <td>sentBy</td>
              <td>
                <xref target="jscalendarbis" section="4.4.5" sectionFormat="comma"/>
              </td>
              <td>SENT-BY</td>
              <td><xref target="ical-prop-attendee"/>, and remarks below
              </td>
            </tr>
          </tbody>
        </table>
        <t>Remarks:</t>
        <ul>
          <li>
            <t>The "owner" role needs not convert to the ROLE parameter of the ATTENDEE property if the Participant object converts to both the ATTENDEE and ORGANIZER property.</t>
          </li>
          <li>
            <t>The "name", "email" and "sentBy" properties also convert to parameters of the ORGANIZER property, if the Participant converts to the ORGANIZER property.</t>
          </li>
          <li>
            <t>The progress property converts to the PARTSTAT parameter as outlined in <xref target="ical-prop-attendee-param-partstat"/>.</t>
          </li>
        </ul>
        <t>The following Participant properties convert to the PARTICIPANT component:</t>
        <table anchor="jscal-participant-props-participant">
          <name>Properties of the Participant object that convert to the PARTICIPANT 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="jscalendarbis" section="4.4.5" 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="jscalendarbis" section="4.4.5" sectionFormat="comma"/>
              </td>
              <td>FMTTYPE (parameter) of STYLED-DESCRIPTION</td>
              <td>
                <t>
                  <xref target="ical-prop-styled-description"/>
                </t>
              </td>
            </tr>
            <tr>
              <td>links</td>
              <td>
                <xref target="jscalendarbis" 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>name</td>
              <td>
                <xref target="jscalendarbis" section="4.4.5" sectionFormat="comma"/>
              </td>
              <td>SUMMARY</td>
              <td>
                <t>
                  <xref target="ical-prop-summary"/>
                </t>
              </td>
            </tr>
            <tr>
              <td>percentComplete</td>
              <td>
                <xref target="jscalendarbis" section="4.4.5" sectionFormat="comma"/>
              </td>
              <td>PERCENT-COMPLETE</td>
              <td>
                <t>
                  <xref target="ical-prop-percent-complete"/>
                </t>
              </td>
            </tr>
          </tbody>
        </table>
        <t>Other properties <bcp14>MAY</bcp14> be converted to <xref target="ical-prop-jsprop">JSPROP properties</xref> in the PARTICIPANT component, or the component which the Participant converts to as a property.</t>
      </section>
      <section anchor="jscal-virtual-location">
        <name>VirtualLocation</name>
        <t>The <xref target="jscalendarbis" section="4.2.7" 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.</t>
        <t>The following properties convert to parameters of the CONFERENCE property:</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>features</td>
              <td>
                <xref target="jscalendarbis" section="4.2.7" sectionFormat="comma"/>
              </td>
              <td>FEATURE</td>
              <td>
                <xref target="ical-prop-conference"/>
              </td>
            </tr>
            <tr>
              <td>name</td>
              <td>
                <xref target="jscalendarbis" section="4.2.7" 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-properties">
        <name>New Properties</name>
        <section anchor="ical-prop-jsid">
          <name>JSID</name>
          <dl newline="true">
            <dt>Property Name:</dt>
            <dd>JSID</dd>
            <dt>Purpose:</dt>
            <dd>This property preserves the identifier of a JSCalendar object value in iCalendar.</dd>
            <dt>Value type:</dt>
            <dd>TEXT; also see "Format Definition" below for value restrictions.</dd>
            <dt>Property Parameters:</dt>
            <dd>
              IANA and non-standard property parameters can be specified on this property.
        </dd>
            <dt>Conformance:</dt>
            <dd>This property can be specified at most once in any calendar component.</dd>
            <dt>Description:</dt>
            <dd>
              <t>This property specifies the JSON object key of the JSCalendar object to which an iCalendar component converts to. For example, this property set in a VALARM component within a VEVENT component defines the key of the Alert object value in the Event object's "alerts" property (see <xref target="test-ical-prop-jsid-alert"/>).</t>
              <t>The value of the JSID property <bcp14>MUST</bcp14> be a valid object key according to the definition of the JSCalendar property to which the component converts to.</t>
            </dd>
            <dt>Format Definition:</dt>
            <dd>
              <t>This property is defined by the following notation:</t>
              <sourcecode type="abnf"><![CDATA[
jsid-prop = "JSID" *(";" other-param) ":" TEXT CRLF
]]></sourcecode>
            </dd>
            <dt anchor="ical-prop-jsid-examples">Example(s):</dt>
            <dd>
              <t>The following example illustrates how to convert the JSID property set in a VALARM component.</t>
              <figure anchor="test-ical-prop-jsid-alert">
                <name>Converting the JSID property of a VALARM component</name>
                <sourcecode type="text/calendar"><![CDATA[
BEGIN:VEVENT
...
BEGIN:VALARM
UID:52DFB000-3C49-4577-8003-3086001BD26A
JSID:myalert
...
END:VALARM
]]></sourcecode>
                <sourcecode type="json"><![CDATA[
"@type": "Event",
"alerts": {
  "myalert": {
    "@type": "Alert",
    "iCalendar": {
      "@type": "ICalComponent",
      "name": "valarm",
      "properties": [
        [
          "uid",
          {},
          "text",
          "52DFB000-3C49-4577-8003-3086001BD26A"
        ]
      ]
    },
    "...": ""
  }
}
]]></sourcecode>
              </figure>
            </dd>
          </dl>
        </section>
        <section anchor="ical-prop-jsprop">
          <name>JSPROP</name>
          <dl newline="true">
            <dt>Property Name:</dt>
            <dd>JSPROP</dd>
            <dt>Purpose:</dt>
            <dd>This property represents a JSCalendar property in iCalendar.</dd>
            <dt>Value type:</dt>
            <dd>TEXT; also see "Format Definition" below for value restrictions.</dd>
            <dt>Property Parameters:</dt>
            <dd>
              The <xref target="ical-param-jsptr">JSPTR parameter</xref>
              <bcp14>MUST</bcp14> be specified on this property. Other IANA and non-standard property parameters can be specified on this property.
        </dd>
            <dt>Conformance:</dt>
            <dd>This property can be specified multiple times in any calendar component.</dd>
            <dt>Description:</dt>
            <dd>
              <t>This property converts an arbitrary JSCalendar property from and to iCalendar.  The iCalendar property value is the JSON-encoded value of the JSCalendar property, represented as a TEXT value.  The JSON value <bcp14>MUST NOT</bcp14> be the null value, and it <bcp14>SHOULD NOT</bcp14> contain insignificant whitespace as defined in <xref target="RFC8259" format="default" sectionFormat="of" derivedContent="RFC8259" section="2"/>.  The value of the JSPTR parameter points to the JSCalendar property within the JSCalendar object and <bcp14>MUST NOT</bcp14> start with the SOLIDUS (U+002F) character.  The pointer <bcp14>MUST NOT</bcp14> reference into an array.</t>
              <t>All JSPROP properties in a calendar component together form a <xref target="jscalendarbis" section="1.4.9" sectionFormat="parens">PatchObject</xref>: the JSPTR parameter of a JSPROP property corresponds to a key in the PatchObject, the property value corresponds to the JSON value for that key. When converting from iCalendar to JSCalendar, the PatchObject <bcp14>MUST</bcp14> only be applied after all other iCalendar elements of the component have been converted.  Only new properties are allowed to be set, a JSON pointer in the PatchObject that points to an existing property <bcp14>MUST</bcp14> be ignored.</t>
            </dd>
            <dt>Format Definition:</dt>
            <dd>
              <t>This property is defined by the following notation:</t>
              <sourcecode type="abnf"><![CDATA[
jsprop = "JSPROP" jsprop-param ":" TEXT CRLF

jsprop-param  = *(
          ; The following are MANDATORY and MUST NOT
          ; occur more than once
          ( ";" jsptr-param )
          ;
          ; The following is OPTIONAL
          ; and MAY occur more than once.
          ;
          (";" other-param)
          ;
          )
]]></sourcecode>
            </dd>
            <dt anchor="ical-prop-jsprop-examples">Example(s):</dt>
            <dd>
              <t>The following example illustrates how to convert a JSPROP property with a JSON boolean value</t>
              <figure anchor="test-ical-prop-jsprop-boolean">
                <name>Converting the JSPROP property with a JSON boolean value</name>
                <sourcecode type="text/calendar"><![CDATA[
JSPROP;JSPTR="example.com:foo":true
]]></sourcecode>
                <sourcecode type="json"><![CDATA[
"example.com:foo": true
]]></sourcecode>
              </figure>
              <t>The following example illustrates how to convert a JSPROP property with a JSON object value</t>
              <figure anchor="test-ical-prop-jsprop-object">
                <name>Converting the JSPROP property with a JSON object value</name>
                <sourcecode type="text/calendar"><![CDATA[
JSPROP;JSPTR="example.com:foo":{"bar":1234\,"baz":"bam"}
]]></sourcecode>
                <sourcecode type="json"><![CDATA[
"example.com:foo": {
  "bar": 1234,
  "baz": "bam"
}
]]></sourcecode>
              </figure>
              <t>The following example illustrates how to convert a JSPROP property that points to a property within a JSCalendar Alert. The JSON pointer in the JSPTR parameter is relative to the Alert object.</t>
              <figure anchor="test-ical-prop-jsprop-alert">
                <name>Converting the JSPROP property within a VALARM component</name>
                <sourcecode type="text/calendar"><![CDATA[
BEGIN:VEVENT
...
BEGIN:VALARM
JSPROP;JSPTR="example.com:foo":"bar"
...
END:VALARM
]]></sourcecode>
                <sourcecode type="json"><![CDATA[
"@type": "Event",
"alerts": {
  "DB7A8058-2212-46D9-87C2-867C7F65D625": {
    "@type": "Alert",
    "example.com:foo": "bar",
    "...": ""
  }
}
]]></sourcecode>
              </figure>
              <t>The following example illustrates how to convert a JSPROP property that points to a property within a JSCalendar Link. The JSON pointer in the JSPTR parameter is relative to the Event object because the Link object converts to an iCalendar property. The <xref target="ical-param-jsid">JSID parameter</xref> on the ATTACH property ensures that the JSON path remains valid during conversion.</t>
              <figure anchor="test-ical-prop-jsprop-link-object">
                <name>Converting the JSPROP property within a Link object</name>
                <sourcecode type="text/calendar"><![CDATA[
BEGIN:VEVENT
...
ATTACH;JSID=mylink1:https://www.rfc-editor.org/rfc/rfc8984.html
JSPROP;JSPTR="links/mylink1/example.com:foo":"bar"
...
]]></sourcecode>
                <sourcecode type="json"><![CDATA[
"@type": "Event",
"links": {
  "mylink1": {
    "@type": "Link",
    "href": "https://www.rfc-editor.org/rfc/rfc8984.html",
    "example.com:foo": "bar",
    "...": ""
  }
}
]]></sourcecode>
              </figure>
            </dd>
          </dl>
        </section>
      </section>
      <section anchor="new-icalendar-parameters">
        <name>New Parameters</name>
        <section anchor="ical-param-jsid">
          <name>JSID</name>
          <dl newline="true">
            <dt>Parameter Name:</dt>
            <dd>JSID</dd>
            <dt>Format Definition:</dt>
            <dd>
              <sourcecode type="abnf"><![CDATA[
jsid-param  = "JSID" "=" param-value
]]></sourcecode>
            </dd>
            <dt>Description:</dt>
            <dd>
              <t>This parameter specifies the JSON object key of the JSCalendar object to which an iCalendar property converts to. For example, this parameter set on an ATTACH property within a VEVENT component defines the key of the Link object value in the Event object's "links" property (see below for an example).</t>
              <t>The value of the JSID parameter <bcp14>MUST</bcp14> be a valid key according to the definition of the JSCalendar property to which the property that this parameter is set on converts to. Typically, this requires the value to be a valid <xref target="jscalendarbis" section="1.4.1" sectionFormat="parens">Id</xref>.</t>
            </dd>
            <dt>Example(s):</dt>
            <dd>
              <figure anchor="test-ical-param-jsid-attach">
                <name>Converting the JSID parameter on an ATTACH property</name>
                <sourcecode type="text/calendar"><![CDATA[
ATTACH;JSID=mylink1:https://example.com
]]></sourcecode>
                <sourcecode type="json"><![CDATA[
"links": {
  "mylink1": {
    "@type": "Link",
    "href": "https://example.com"
  }
}
]]></sourcecode>
              </figure>
            </dd>
          </dl>
        </section>
        <section anchor="ical-param-jsptr">
          <name>JSPTR</name>
          <dl newline="true">
            <dt>Parameter Name:</dt>
            <dd>JSPTR</dd>
            <dt>Format Definition:</dt>
            <dd>
              <sourcecode type="abnf"><![CDATA[
jsptr-param  = "JSPTR" "=" quoted-string
]]></sourcecode>
            </dd>
            <dt>Description:</dt>
            <dd>This parameter is specified on a <xref target="ical-prop-jsprop">JSPROP</xref> property.  Its value is a JSON pointer <xref target="RFC6901"/> that points to a JSCalendar property.
        </dd>
            <dt>Description:</dt>
            <dd>
              <t>This parameter has a single value that <bcp14>MUST</bcp14> be a valid JSON pointer as defined in <xref target="RFC6901"/>. The value <bcp14>MUST</bcp14> be quoted to preserve its case-sensitivity and it <bcp14>MUST NOT</bcp14> contain the DQUOTE character. See <xref target="RFC5545" section="3.2"/> for how to format parameter values.</t>
            </dd>
            <dt>Example(s):</dt>
            <dd>
              <sourcecode type="text/plain"><![CDATA[
JSPROP;JSPTR="example.com:foo":"bar"
]]></sourcecode>
              <t>For further examples, see <xref target="ical-prop-jsprop-examples"/>.</t>
            </dd>
          </dl>
        </section>
      </section>
    </section>
    <section anchor="updates-jscalendar">
      <name>Updates to JSCalendar</name>
      <section anchor="new-jscalendar-properties">
        <name>New Properties</name>
        <section anchor="jscal-prop-icalendar">
          <name>iCalendar</name>
          <dl newline="true">
            <dt>Name:</dt>
            <dd>iCalendar</dd>
            <dt>Context:</dt>
            <dd>Any JSCalendar object</dd>
            <dt>Type:</dt>
            <dd><tt>ICalComponent</tt> (optional)</dd>
            <dt>Description</dt>
            <dd>
              <t>This property contains information about iCalendar data that got converted to this JSCalendar object.  It allows for preserving the name of iCalendar elements, such as a component's name, properties and subcomponents. This specification defines the ICalComponent object type for converting iCalendar components to a JSCalendar object. Future specifications <bcp14>MAY</bcp14> define additional value types for this property.</t>
              <t>An ICalComponent object has the following properties:</t>
              <dl>
                <dt>@type: String</dt>
                <dd>This specifies the type of this object. This <bcp14>MUST</bcp14> be <tt>ICalComponent</tt>, if set.</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 which did not convert to standard JSCalendar elements. 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 JSCalendar element.  The value for each key contains information about the iCalendar property which converted to the JSCalendar element located at that key. Unless otherwise defined for a specific iCalendar property, the path points to that JSCalendar object property to which the iCalendar property value converted to.</t>
                  <t>The key <bcp14>MUST</bcp14> be a valid key of a PatchObject as defined in <xref target="jscalendarbis" section="1.4.9" sectionFormat="of"/>.  The key <bcp14>MAY</bcp14> point to the key in a nested object if the element at that key was converted from an iCalendar property of the component for which the "iCalendar" property is set. It <bcp14>MUST NOT</bcp14> point into nested objects otherwise.</t>
                </dd>
                <dt>properties: *[][] (optional)</dt>
                <dd>This contains properties of the iCalendar component which did not convert to standard JSCalendar elements. 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>
              <t>An ICalProperty object has the following properties:</t>
              <dl>
                <dt>@type: String</dt>
                <dd>This specifies the type of this object. This <bcp14>MUST</bcp14> be <tt>ICalProperty</tt>, if set.</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|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>
          <t>The example in <xref target="test-jscal-prop-icalendar"/> describes how to convert unknown iCalendar elements to the "iCalendar" property. The "X-FOO" parameter set on the SUMMARY property illustrates how to preserve an unknown iCalendar parameter on a property that does convert to a standard JSCalendar element. The "X-BAR" property and "X-BAZ" component illustrate how to convert entirely unknown iCalendar elements.</t>
          <figure anchor="test-jscal-prop-icalendar">
            <name>Converting unknown iCalendar elements to the iCalendar property</name>
            <sourcecode type="text/calendar"><![CDATA[
BEGIN:VEVENT
SUMMARY;X-FOO=bar:test
...
X-BAR:bam
...
BEGIN:X-BAZ
UID:507A08F9-81D8-4D16-9480-D6D75E977943
END:X-BAZ
...
]]></sourcecode>
            <sourcecode type="json"><![CDATA[
{
  "@type": "Event",
  "title": "test",
  "iCalendar": {
    "@type": "ICalComponent",
    "name": "vevent",
    "convertedProperties": {
      "title": {
        "@type": "ICalProperty",
        "name": "summary",
        "parameters": {
          "x-foo": "bar"
        }
      }
    },
    "properties": [
      [
        "x-bar",
        {},
        "unknown",
        "bam"
      ]
    ],
    "components": [
      [
        "x-baz",
        [
          [
            "uid",
            {},
            "text",
            "507A08F9-81D8-4D16-9480-D6D75E977943"
          ]
        ],
        []
      ]
    ]
  },
  "...": ""
}
]]></sourcecode>
          </figure>
        </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>
        <name>Changes to the "iCalendar Element Registries"</name>
        <t>IANA will add the following entries to the "Properties" registry:</t>
        <dl spacing="compact">
          <dt>Property</dt>
          <dd>JSID</dd>
          <dt>Status</dt>
          <dd>Current</dd>
          <dt>Reference</dt>
          <dd>
            <xref target="ical-prop-jsid"/>
          </dd>
        </dl>
        <dl spacing="compact">
          <dt>Property</dt>
          <dd>JSPROP</dd>
          <dt>Status</dt>
          <dd>Current</dd>
          <dt>Reference</dt>
          <dd>
            <xref target="ical-prop-jsprop"/>
          </dd>
        </dl>
        <t>IANA will add the following entries to the "Parameters" registry:</t>
        <dl spacing="compact">
          <dt>Parameter</dt>
          <dd>JSID</dd>
          <dt>Status</dt>
          <dd>Current</dd>
          <dt>Reference</dt>
          <dd>
            <xref target="ical-param-jsid"/>
          </dd>
        </dl>
        <dl spacing="compact">
          <dt>Parameter</dt>
          <dd>JSPTR</dd>
          <dt>Status</dt>
          <dd>Current</dd>
          <dt>Reference</dt>
          <dd>
            <xref target="ical-param-jsptr"/>
          </dd>
        </dl>
      </section>
      <section>
        <name>Changes to the "JSCalendar Registries"</name>
        <t>IANA will add the following entries to the "JSCalendar Properties" registry:</t>
        <dl spacing="compact">
          <dt>Property Name</dt>
          <dd>iCalendar</dd>
          <dt>Property Type</dt>
          <dd>ICalComponent</dd>
          <dt>Property Context</dt>
          <dd>Event, Location, Participant, Task</dd>
          <dt>Reference</dt>
          <dd>
            <xref target="jscal-prop-icalendar"/>
          </dd>
          <dt>Intended Usage</dt>
          <dd>common</dd>
          <dt>Is Per-User</dt>
          <dd>no</dd>
          <dt>Change Controller</dt>
          <dd>IETF</dd>
        </dl>
        <dl spacing="compact">
          <dt>Property Name</dt>
          <dd>iCalendar</dd>
          <dt>Property Type</dt>
          <dd>ICalComponent</dd>
          <dt>Property Context</dt>
          <dd>Alert</dd>
          <dt>Reference</dt>
          <dd>
            <xref target="jscal-prop-icalendar"/>
          </dd>
          <dt>Intended Usage</dt>
          <dd>common</dd>
          <dt>Is Per-User</dt>
          <dd>yes</dd>
          <dt>Change Controller</dt>
          <dd>IETF</dd>
        </dl>
      </section>
    </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.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.5870.xml"/>
        <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.6047.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.6901.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.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.8259.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"/>
        <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.9562.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="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="4" month="November" year="2025"/>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-jmap-calendars"/>
        </reference>
        <reference anchor="ical-tasks" target="https://datatracker.ietf.org/doc/draft-ietf-calext-ical-tasks">
          <front>
            <title>Task Extensions to iCalendar</title>
            <author fullname="Michael Douglass" initials="M." surname="Douglass">
              <organization>Bedework Commercial Services</organization>
            </author>
            <author fullname="Adrian Apthorp" initials="A." surname="Apthorp">
              <organization>DHL Express</organization>
            </author>
            <date day="9" month="December" year="2025"/>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-calext-ical-tasks"/>
        </reference>
        <reference anchor="jscalendarbis" target="https://datatracker.ietf.org/doc/draft-ietf-calext-jscalendarbis/">
          <front>
            <title>JSCalendar: A JSON Representation of Calendar Data</title>
            <author fullname="Neil Jenkins" initials="N.M." surname="Jenkins">
              <organization>Fastmail</organization>
            </author>
            <author fullname="Robert Stepanek" initials="R." surname="Stepanek">
              <organization>Fastmail</organization>
            </author>
            <date day="14" month="January" year="2026"/>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-calext-jscalendarbis"/>
        </reference>
        <reference anchor="icaljscalexts" target="https://datatracker.ietf.org/doc/draft-stepanek-icalendar-jscalendar-extensions/">
          <front>
            <title>iCalendar Format Extensions for JSCalendar</title>
            <author fullname="Robert Stepanek" initials="R." surname="Stepanek">
              <organization>Fastmail</organization>
            </author>
            <date day="19" month="January" year="2026"/>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-stepanek-icalendar-jscalendar-extensions"/>
        </reference>
        <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8607.xml"/>
      </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 and only complete at the time of publication of this document.</t>
      <t>Implementations <bcp14>MAY</bcp14> choose to convert the following elements, for example using the properties defined in <xref target="updates-icalendar"/> and <xref target="updates-jscalendar"/>, or they might convert them to some vendor-specific extension properties. Later RFC documents might also define new standard elements and register them at IANA, either extending this list of inconvertible elements, or rather reduce it by introducing a standard element to convert to.</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>
            <li>
              <xref target="RFC9073" section="7.3" sectionFormat="comma">VRESOURCE</xref>
            </li>
            <li>
              <xref target="RFC5545" section="3.6.5" sectionFormat="comma">VTIMEZONE</xref>
            </li>
            <li>
              <xref target="ical-tasks" section="14.1" sectionFormat="comma">VSTATUS</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>
              <xref target="RFC9073" section="7.1" sectionFormat="comma">PARTICIPANT</xref>
            </name>
            <ul>
              <li>
                <xref target="RFC5545" section="3.8.1.2" sectionFormat="comma">CATEGORIES</xref>
              </li>
              <li>
                <xref target="RFC5545" section="3.8.1.4" sectionFormat="comma">COMMENT</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="RFC9253" section="8.2" sectionFormat="comma">LINK</xref>
              </li>
              <li>
                <xref target="RFC5545" section="3.8.1.7" sectionFormat="comma">LOCATION</xref>
              </li>
              <li>
                <xref target="RFC9073" section="6.2" sectionFormat="comma">PARTICIPANT-TYPE</xref>
              </li>
              <li>
                <xref target="RFC5545" section="3.8.1.9" sectionFormat="comma">PRIORITY</xref>
              </li>
              <li>
                <xref target="ical-tasks" section="12.2" sectionFormat="comma">REASON</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="RFC9074" section="6.6" sectionFormat="comma">STRUCTURED-DATA</xref>
              </li>
              <li>
                <xref target="RFC5545" section="3.8.4.7" sectionFormat="comma">UID</xref>
              </li>
              <li>
                <xref target="RFC5545" section="3.8.4.6" sectionFormat="comma">URL</xref>
              </li>
            </ul>
          </section>
          <section>
            <name>
              <xref target="RFC5545" section="3.6.6" sectionFormat="comma">VALARM</xref>
            </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>
              <xref target="RFC5545" section="3.4" sectionFormat="comma">VCALENDAR</xref>
            </name>
            <ul>
              <li>
                <xref target="RFC5545" section="3.7.1" sectionFormat="comma">CALSCALE</xref>
              </li>
              <li>
                <xref target="RFC9253" section="8.2" sectionFormat="comma">LINK</xref>
              </li>
              <li>
                <xref target="RFC7986" section="5.7" sectionFormat="comma">REFRESH-INTERVAL</xref>
              </li>
              <li>
                <xref target="RFC5545" section="3.8.4.6" sectionFormat="comma">URL</xref>
              </li>
              <li>
                <xref target="RFC5545" section="3.7.4" sectionFormat="comma">VERSION</xref>
              </li>
            </ul>
          </section>
          <section>
            <name>
              <xref target="RFC5545" section="3.6.1" sectionFormat="comma">VEVENT</xref>
            </name>
            <ul>
              <li>
                <xref target="RFC5545" section="3.8.1.4" sectionFormat="comma">COMMENT</xref>
              </li>
              <li>
                <xref target="RFC5545" section="3.8.4.2" sectionFormat="comma">CONTACT</xref>
              </li>
              <li>
                <xref target="RFC9253" section="8.2" sectionFormat="comma">LINK</xref>
              </li>
              <li>
                <xref target="RFC9253" section="8.3" sectionFormat="comma">REFID</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="RFC9074" section="6.6" sectionFormat="comma">STRUCTURED-DATA</xref>
              </li>
              <li>
                <xref target="RFC5545" section="3.8.4.6" sectionFormat="comma">URL</xref>
              </li>
            </ul>
          </section>
          <section>
            <name>
              <xref target="RFC9073" section="7.2" sectionFormat="comma">VLOCATION</xref>
            </name>
            <ul>
              <li>
                <xref target="RFC5545" section="3.8.1.5" sectionFormat="comma">DESCRIPTION</xref>
              </li>
              <li>
                <xref target="RFC9253" section="8.2" sectionFormat="comma">LINK</xref>
              </li>
              <li>
                <xref target="RFC5545" section="3.8.4.7" sectionFormat="comma">UID</xref>
              </li>
              <li>
                <xref target="RFC9074" section="6.6" sectionFormat="comma">STRUCTURED-DATA</xref>
              </li>
              <li>
                <xref target="RFC9073" section="6.5" sectionFormat="comma">STYLED-DESCRIPTION</xref>
              </li>
            </ul>
          </section>
          <section>
            <name>
              <xref target="RFC5545" section="3.6.2" sectionFormat="comma">VTODO</xref>
            </name>
            <ul>
              <li>
                <xref target="RFC5545" section="3.8.1.4" sectionFormat="comma">COMMENT</xref>
              </li>
              <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.2" sectionFormat="comma">LINK</xref>
              </li>
              <li>
                <xref target="RFC9253" section="8.3" sectionFormat="comma">REFID</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="RFC9074" section="6.6" sectionFormat="comma">STRUCTURED-DATA</xref>
              </li>
              <li>
                <xref target="ical-tasks" section="12.4" sectionFormat="comma">TASK-MODE</xref>
              </li>
              <li>
                <xref target="RFC5545" section="3.8.4.6" sectionFormat="comma">URL</xref>
              </li>
            </ul>
          </section>
        </section>
        <section>
          <name>Subcomponents by Component</name>
          <t>The following components are defined to contain the listed subcomponents. But these subcomponents do not convert to a standard JSCalendar element.</t>
          <section>
            <name>
              <xref target="RFC9073" section="7.1" sectionFormat="comma">PARTICIPANT</xref>
            </name>
            <ul>
              <li>
                <xref target="RFC9073" section="7.2" sectionFormat="comma">VLOCATION</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>
              <xref target="RFC5545" section="3.8.5.2" sectionFormat="comma">RDATE</xref>
            </name>
            <ul>
              <li>
                <xref target="RFC5545" section="3.3.9" sectionFormat="comma">PERIOD</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>
              <xref target="RFC5545" section="3.8.1.1" sectionFormat="comma">ATTACH</xref>
            </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>
              <xref target="RFC5545" section="3.8.4.1" sectionFormat="comma">ATTENDEE</xref>
            </name>
            <ul>
              <li>
                <xref target="RFC5545" section="3.2.6" sectionFormat="comma">DIR</xref>
              </li>
              <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>
              <xref target="RFC5545" section="3.8.1.2" sectionFormat="comma">CATEGORIES</xref>
            </name>
            <ul>
              <li>
                <xref target="RFC5545" section="3.2.10" sectionFormat="comma">LANGUAGE</xref>
              </li>
            </ul>
          </section>
          <section>
            <name>
              <xref target="RFC7986" section="5.11" sectionFormat="comma">CONFERENCE</xref>
            </name>
            <ul>
              <li>
                <xref target="RFC5545" section="3.2.10" sectionFormat="comma">LANGUAGE</xref>
              </li>
            </ul>
          </section>
          <section>
            <name>
              <xref target="RFC5545" section="3.8.1.5" sectionFormat="comma">DESCRIPTION</xref>
            </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>
              <xref target="RFC7986" section="5.10" sectionFormat="comma">IMAGE</xref>
            </name>
            <ul>
              <li>
                <xref target="RFC5545" section="3.2.1" sectionFormat="comma">ALTREP</xref>
              </li>
              <li><xref target="RFC7986" section="6.1" sectionFormat="comma">DISPLAY</xref> (if the parameter value contains more than one "displayval").
              </li>
            </ul>
          </section>
          <section>
            <name>
              <xref target="RFC9253" section="8.2" sectionFormat="comma">LINK</xref>
            </name>
            <ul>
              <li>
                <xref target="RFC5545" section="3.2.10" sectionFormat="comma">LANGUAGE</xref>
              </li>
            </ul>
          </section>
          <section>
            <name>
              <xref target="RFC5545" section="3.8.1.7" sectionFormat="comma">LOCATION</xref>
            </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>
              <xref target="RFC7986" section="5.1" sectionFormat="comma">NAME</xref>
            </name>
            <ul>
              <li>
                <xref target="RFC5545" section="3.2.1" sectionFormat="comma">ALTREP</xref>
              </li>
            </ul>
          </section>
          <section>
            <name>
              <xref target="RFC5545" section="3.8.4.3" sectionFormat="comma">ORGANIZER</xref>
            </name>
            <ul>
              <li>
                <xref target="RFC5545" section="3.2.6" sectionFormat="comma">DIR</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>
              <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>
            </ul>
          </section>
          <section>
            <name>
              <xref target="RFC5545" section="3.8.4.4" sectionFormat="comma">RECURRENCE-ID</xref>
            </name>
            <ul>
              <li>
                <xref target="RFC5545" section="3.2.13" sectionFormat="comma">RANGE</xref>
              </li>
            </ul>
          </section>
          <section>
            <name>
              <xref target="RFC5545" section="3.8.4.5" sectionFormat="comma">RELATED-TO</xref>
            </name>
            <ul>
              <li>
                <xref target="RFC9253" section="6.2" sectionFormat="comma">GAP</xref>
              </li>
            </ul>
          </section>
          <section>
            <name>
              <xref target="RFC5545" section="3.8.8.3" sectionFormat="comma">REQUEST-STATUS</xref>
            </name>
            <ul>
              <li>
                <xref target="RFC5545" section="3.2.10" sectionFormat="comma">LANGUAGE</xref>
              </li>
            </ul>
          </section>
          <section>
            <name>
              <xref target="RFC5545" section="3.8.1.10" sectionFormat="comma">RESOURCES</xref>
            </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>
              <xref target="RFC9073" section="6.5" sectionFormat="comma">STYLED-DESCRIPTION</xref>
            </name>
            <ul>
              <li>
                <xref target="RFC5545" section="3.2.1" sectionFormat="comma">ALTREP</xref>
              </li>
              <li>
                <xref target="RFC9073" section="5.3" sectionFormat="comma">DERIVED</xref>
              </li>
              <li>
                <xref target="RFC5545" section="3.2.10" sectionFormat="comma">LANGUAGE</xref>
              </li>
            </ul>
          </section>
          <section>
            <name>
              <xref target="RFC5545" section="3.8.1.12" sectionFormat="comma">SUMMARY</xref>
            </name>
            <ul>
              <li>
                <xref target="RFC5545" section="3.2.1" sectionFormat="comma">ALTREP</xref>
              </li>
            </ul>
          </section>
          <section>
            <name>
              <xref target="RFC5545" section="3.8.3.2" sectionFormat="comma">TZNAME</xref>
            </name>
            <ul>
              <li>
                <xref target="RFC5545" section="3.2.10" sectionFormat="comma">LANGUAGE</xref>
              </li>
            </ul>
          </section>
        </section>
      </section>
    </section>
  </back>
</rfc>
