diff --git a/components/accessible-select/README.md b/components/accessible-select/README.md new file mode 100644 index 0000000000..7ed98a7ee5 --- /dev/null +++ b/components/accessible-select/README.md @@ -0,0 +1,8 @@ +> :warning: +> This is currently considered internal, please use `@dhis2/ui`. +> +> See the [Getting started +> guide](https://github.com/dhis2/ui/blob/master/docs/getting-started.md) +> for more information. + +For usage instructions see [the documentation for this component](https://ui.dhis2.nu/components/select). diff --git a/components/accessible-select/d2.config.js b/components/accessible-select/d2.config.js new file mode 100644 index 0000000000..9973893afc --- /dev/null +++ b/components/accessible-select/d2.config.js @@ -0,0 +1,6 @@ +module.exports = { + type: 'lib', + entryPoints: { + lib: 'src/index.js', + }, +} diff --git a/components/accessible-select/i18n/ar.po b/components/accessible-select/i18n/ar.po new file mode 100644 index 0000000000..b3d9f24d61 --- /dev/null +++ b/components/accessible-select/i18n/ar.po @@ -0,0 +1,32 @@ +# +# Translators: +# phil_dhis2, 2021 +# Hamza Assada <7amza.it@gmail.com>, 2021 +# +msgid "" +msgstr "" +"Project-Id-Version: i18next-conv\n" +"POT-Creation-Date: 2021-05-10T11:56:32.496Z\n" +"PO-Revision-Date: 2021-06-24 12:50+0000\n" +"Last-Translator: Hamza Assada <7amza.it@gmail.com>, 2021\n" +"Language-Team: Arabic (https://www.transifex.com/hisp-uio/teams/100509/ar/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ar\n" +"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n" + +msgid "Clear" +msgstr "مسح" + +msgid "No data found" +msgstr "لم يتم إيجاد بيانات" + +msgid "Type to filter options" +msgstr "اكتب لتصفية الخيارات" + +msgid "Loading options" +msgstr "تحميل الخيارات" + +msgid "No options found" +msgstr "لم يتم العثور على خيارات" diff --git a/components/accessible-select/i18n/ar_IQ.po b/components/accessible-select/i18n/ar_IQ.po new file mode 100644 index 0000000000..a49772e03b --- /dev/null +++ b/components/accessible-select/i18n/ar_IQ.po @@ -0,0 +1,31 @@ +# +# Translators: +# KRG HIS , 2021 +# +msgid "" +msgstr "" +"Project-Id-Version: i18next-conv\n" +"POT-Creation-Date: 2021-05-10T11:56:32.496Z\n" +"PO-Revision-Date: 2021-06-24 12:50+0000\n" +"Last-Translator: KRG HIS , 2021\n" +"Language-Team: Arabic (Iraq) (https://www.transifex.com/hisp-uio/teams/100509/ar_IQ/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ar_IQ\n" +"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n" + +msgid "Clear" +msgstr "مسح" + +msgid "No data found" +msgstr "" + +msgid "Type to filter options" +msgstr "" + +msgid "Loading options" +msgstr "" + +msgid "No options found" +msgstr "" diff --git a/components/accessible-select/i18n/ckb.po b/components/accessible-select/i18n/ckb.po new file mode 100644 index 0000000000..1bdf9a1a2e --- /dev/null +++ b/components/accessible-select/i18n/ckb.po @@ -0,0 +1,31 @@ +# +# Translators: +# KRG HIS , 2021 +# +msgid "" +msgstr "" +"Project-Id-Version: i18next-conv\n" +"POT-Creation-Date: 2021-05-10T11:56:32.496Z\n" +"PO-Revision-Date: 2021-06-24 12:50+0000\n" +"Last-Translator: KRG HIS , 2021\n" +"Language-Team: Central Kurdish (https://www.transifex.com/hisp-uio/teams/100509/ckb/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ckb\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Clear" +msgstr "پاککردنەوە" + +msgid "No data found" +msgstr "" + +msgid "Type to filter options" +msgstr "" + +msgid "Loading options" +msgstr "" + +msgid "No options found" +msgstr "" diff --git a/components/accessible-select/i18n/cs.po b/components/accessible-select/i18n/cs.po new file mode 100644 index 0000000000..4fcabdff17 --- /dev/null +++ b/components/accessible-select/i18n/cs.po @@ -0,0 +1,31 @@ +# +# Translators: +# trendspotter , 2021 +# +msgid "" +msgstr "" +"Project-Id-Version: i18next-conv\n" +"POT-Creation-Date: 2021-05-10T11:56:32.496Z\n" +"PO-Revision-Date: 2021-06-24 12:50+0000\n" +"Last-Translator: trendspotter , 2021\n" +"Language-Team: Czech (https://www.transifex.com/hisp-uio/teams/100509/cs/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: cs\n" +"Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;\n" + +msgid "Clear" +msgstr "Vyčistit" + +msgid "No data found" +msgstr "Nenalezena žádná data" + +msgid "Type to filter options" +msgstr "Zadáním filtrujete možnosti" + +msgid "Loading options" +msgstr "Možnosti načítání" + +msgid "No options found" +msgstr "Nenalezeny žádné možnosti" diff --git a/components/accessible-select/i18n/da.po b/components/accessible-select/i18n/da.po new file mode 100644 index 0000000000..4a20130dfa --- /dev/null +++ b/components/accessible-select/i18n/da.po @@ -0,0 +1,31 @@ +# +# Translators: +# phil_dhis2, 2021 +# +msgid "" +msgstr "" +"Project-Id-Version: i18next-conv\n" +"POT-Creation-Date: 2021-05-10T11:56:32.496Z\n" +"PO-Revision-Date: 2021-06-24 12:50+0000\n" +"Last-Translator: phil_dhis2, 2021\n" +"Language-Team: Danish (https://www.transifex.com/hisp-uio/teams/100509/da/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: da\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Clear" +msgstr "Clear" + +msgid "No data found" +msgstr "" + +msgid "Type to filter options" +msgstr "" + +msgid "Loading options" +msgstr "" + +msgid "No options found" +msgstr "" diff --git a/components/accessible-select/i18n/en.pot b/components/accessible-select/i18n/en.pot new file mode 100644 index 0000000000..9696225e86 --- /dev/null +++ b/components/accessible-select/i18n/en.pot @@ -0,0 +1,24 @@ +msgid "" +msgstr "" +"Project-Id-Version: i18next-conv\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1)\n" +"POT-Creation-Date: 2021-05-10T11:56:32.496Z\n" +"PO-Revision-Date: 2021-05-10T11:56:32.496Z\n" + +msgid "Clear" +msgstr "" + +msgid "No data found" +msgstr "" + +msgid "Type to filter options" +msgstr "" + +msgid "Loading options" +msgstr "" + +msgid "No options found" +msgstr "" diff --git a/components/accessible-select/i18n/es.po b/components/accessible-select/i18n/es.po new file mode 100644 index 0000000000..cad34babe6 --- /dev/null +++ b/components/accessible-select/i18n/es.po @@ -0,0 +1,31 @@ +# +# Translators: +# Prabhjot Singh, 2021 +# +msgid "" +msgstr "" +"Project-Id-Version: i18next-conv\n" +"POT-Creation-Date: 2021-05-10T11:56:32.496Z\n" +"PO-Revision-Date: 2021-06-24 12:50+0000\n" +"Last-Translator: Prabhjot Singh, 2021\n" +"Language-Team: Spanish (https://www.transifex.com/hisp-uio/teams/100509/es/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: es\n" +"Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" + +msgid "Clear" +msgstr "Limpiar" + +msgid "No data found" +msgstr "Datos no encontrados" + +msgid "Type to filter options" +msgstr "Escriba para filtrar opciones" + +msgid "Loading options" +msgstr "Cargando las opciones" + +msgid "No options found" +msgstr "No se ha encontrado ninguna opción" diff --git a/components/accessible-select/i18n/es_419.po b/components/accessible-select/i18n/es_419.po new file mode 100644 index 0000000000..a8bad0b714 --- /dev/null +++ b/components/accessible-select/i18n/es_419.po @@ -0,0 +1,31 @@ +# +# Translators: +# Jaime Bosque , 2022 +# +msgid "" +msgstr "" +"Project-Id-Version: i18next-conv\n" +"POT-Creation-Date: 2021-05-10T11:56:32.496Z\n" +"PO-Revision-Date: 2021-06-24 12:50+0000\n" +"Last-Translator: Jaime Bosque , 2022\n" +"Language-Team: Spanish (Latin America) (https://www.transifex.com/hisp-uio/teams/100509/es_419/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: es_419\n" +"Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" + +msgid "Clear" +msgstr "Limpiar" + +msgid "No data found" +msgstr "" + +msgid "Type to filter options" +msgstr "" + +msgid "Loading options" +msgstr "" + +msgid "No options found" +msgstr "" diff --git a/components/accessible-select/i18n/fr.po b/components/accessible-select/i18n/fr.po new file mode 100644 index 0000000000..b7434862d0 --- /dev/null +++ b/components/accessible-select/i18n/fr.po @@ -0,0 +1,32 @@ +# +# Translators: +# phil_dhis2, 2021 +# Viktor Varland , 2021 +# +msgid "" +msgstr "" +"Project-Id-Version: i18next-conv\n" +"POT-Creation-Date: 2021-05-10T11:56:32.496Z\n" +"PO-Revision-Date: 2021-06-24 12:50+0000\n" +"Last-Translator: Viktor Varland , 2021\n" +"Language-Team: French (https://www.transifex.com/hisp-uio/teams/100509/fr/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: fr\n" +"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" + +msgid "Clear" +msgstr "Effacer" + +msgid "No data found" +msgstr "Aucune valeur trouvée" + +msgid "Type to filter options" +msgstr "" + +msgid "Loading options" +msgstr "" + +msgid "No options found" +msgstr "" diff --git a/components/accessible-select/i18n/id.po b/components/accessible-select/i18n/id.po new file mode 100644 index 0000000000..55bf495d4c --- /dev/null +++ b/components/accessible-select/i18n/id.po @@ -0,0 +1,32 @@ +# +# Translators: +# Viktor Varland , 2021 +# Farida Sibuea , 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: i18next-conv\n" +"POT-Creation-Date: 2021-05-10T11:56:32.496Z\n" +"PO-Revision-Date: 2021-06-24 12:50+0000\n" +"Last-Translator: Farida Sibuea , 2023\n" +"Language-Team: Indonesian (https://app.transifex.com/hisp-uio/teams/100509/id/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: id\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Clear" +msgstr "Hapus" + +msgid "No data found" +msgstr "Tidak ada data yang ditemukan" + +msgid "Type to filter options" +msgstr "Tipe opsi filter" + +msgid "Loading options" +msgstr "Opsi mengunggah" + +msgid "No options found" +msgstr "Opsi tidak tersedia" diff --git a/components/accessible-select/i18n/km.po b/components/accessible-select/i18n/km.po new file mode 100644 index 0000000000..60395c4ca0 --- /dev/null +++ b/components/accessible-select/i18n/km.po @@ -0,0 +1,31 @@ +# +# Translators: +# channara rin, 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: i18next-conv\n" +"POT-Creation-Date: 2021-05-10T11:56:32.496Z\n" +"PO-Revision-Date: 2021-06-24 12:50+0000\n" +"Last-Translator: channara rin, 2023\n" +"Language-Team: Khmer (https://app.transifex.com/hisp-uio/teams/100509/km/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: km\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Clear" +msgstr "សម្អាត" + +msgid "No data found" +msgstr "មិនមានទិន្នន័យបង្ហាញ" + +msgid "Type to filter options" +msgstr "វាយបញ្ចូលមុខងារដើម្បីច្រោះ" + +msgid "Loading options" +msgstr "កំពុងទាញយកមុខងារ" + +msgid "No options found" +msgstr "មិនមានមុខងារបង្ហាញ" diff --git a/components/accessible-select/i18n/lo.po b/components/accessible-select/i18n/lo.po new file mode 100644 index 0000000000..da8ba43a5b --- /dev/null +++ b/components/accessible-select/i18n/lo.po @@ -0,0 +1,31 @@ +# +# Translators: +# phil_dhis2, 2021 +# +msgid "" +msgstr "" +"Project-Id-Version: i18next-conv\n" +"POT-Creation-Date: 2021-05-10T11:56:32.496Z\n" +"PO-Revision-Date: 2021-06-24 12:50+0000\n" +"Last-Translator: phil_dhis2, 2021\n" +"Language-Team: Lao (https://www.transifex.com/hisp-uio/teams/100509/lo/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: lo\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Clear" +msgstr "ລຶບ" + +msgid "No data found" +msgstr "ບໍ່ພົບຂໍ້ມູນ" + +msgid "Type to filter options" +msgstr "" + +msgid "Loading options" +msgstr "" + +msgid "No options found" +msgstr "" diff --git a/components/accessible-select/i18n/my.po b/components/accessible-select/i18n/my.po new file mode 100644 index 0000000000..3b65bda2e8 --- /dev/null +++ b/components/accessible-select/i18n/my.po @@ -0,0 +1,32 @@ +# +# Translators: +# phil_dhis2, 2021 +# Viktor Varland , 2021 +# +msgid "" +msgstr "" +"Project-Id-Version: i18next-conv\n" +"POT-Creation-Date: 2021-05-10T11:56:32.496Z\n" +"PO-Revision-Date: 2021-06-24 12:50+0000\n" +"Last-Translator: Viktor Varland , 2021\n" +"Language-Team: Burmese (https://www.transifex.com/hisp-uio/teams/100509/my/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: my\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Clear" +msgstr "ရှင်းလင်းသည်" + +msgid "No data found" +msgstr "data မတွေ့ပါ။" + +msgid "Type to filter options" +msgstr "" + +msgid "Loading options" +msgstr "" + +msgid "No options found" +msgstr "" diff --git a/components/accessible-select/i18n/nb.po b/components/accessible-select/i18n/nb.po new file mode 100644 index 0000000000..077687c40c --- /dev/null +++ b/components/accessible-select/i18n/nb.po @@ -0,0 +1,32 @@ +# +# Translators: +# Caroline Hesthagen Holen , 2021 +# Karoline Tufte Lien , 2022 +# +msgid "" +msgstr "" +"Project-Id-Version: i18next-conv\n" +"POT-Creation-Date: 2021-05-10T11:56:32.496Z\n" +"PO-Revision-Date: 2021-06-24 12:50+0000\n" +"Last-Translator: Karoline Tufte Lien , 2022\n" +"Language-Team: Norwegian Bokmål (https://www.transifex.com/hisp-uio/teams/100509/nb/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: nb\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Clear" +msgstr "Fjern" + +msgid "No data found" +msgstr "Ingen data funnet" + +msgid "Type to filter options" +msgstr "Skriv for å filtrere alternativer" + +msgid "Loading options" +msgstr "Laster alternativer" + +msgid "No options found" +msgstr "Ingen alternativer funnet" diff --git a/components/accessible-select/i18n/nl.po b/components/accessible-select/i18n/nl.po new file mode 100644 index 0000000000..bf101c5c6f --- /dev/null +++ b/components/accessible-select/i18n/nl.po @@ -0,0 +1,32 @@ +# +# Translators: +# Rica Zamora Duchateau, 2022 +# Charel van den Elsen, 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: i18next-conv\n" +"POT-Creation-Date: 2021-05-10T11:56:32.496Z\n" +"PO-Revision-Date: 2021-06-24 12:50+0000\n" +"Last-Translator: Charel van den Elsen, 2023\n" +"Language-Team: Dutch (https://app.transifex.com/hisp-uio/teams/100509/nl/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: nl\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Clear" +msgstr "Duidelijk" + +msgid "No data found" +msgstr "Geen gegevens gevonden" + +msgid "Type to filter options" +msgstr "Typ om opties te filteren" + +msgid "Loading options" +msgstr "Laad opties" + +msgid "No options found" +msgstr "Geen opties gevonden" diff --git a/components/accessible-select/i18n/prs.po b/components/accessible-select/i18n/prs.po new file mode 100644 index 0000000000..4d2dda6733 --- /dev/null +++ b/components/accessible-select/i18n/prs.po @@ -0,0 +1,31 @@ +# +# Translators: +# phil_dhis2, 2021 +# +msgid "" +msgstr "" +"Project-Id-Version: i18next-conv\n" +"POT-Creation-Date: 2021-05-10T11:56:32.496Z\n" +"PO-Revision-Date: 2021-06-24 12:50+0000\n" +"Last-Translator: phil_dhis2, 2021\n" +"Language-Team: Persian (Afghanistan) (https://www.transifex.com/hisp-uio/teams/100509/fa_AF/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: fa_AF\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +msgid "Clear" +msgstr "پاک کردن" + +msgid "No data found" +msgstr "هیچ معلوماتی یافت نشد" + +msgid "Type to filter options" +msgstr "" + +msgid "Loading options" +msgstr "" + +msgid "No options found" +msgstr "" diff --git a/components/accessible-select/i18n/ps.po b/components/accessible-select/i18n/ps.po new file mode 100644 index 0000000000..70a4270f33 --- /dev/null +++ b/components/accessible-select/i18n/ps.po @@ -0,0 +1,32 @@ +# +# Translators: +# phil_dhis2, 2021 +# Viktor Varland , 2021 +# +msgid "" +msgstr "" +"Project-Id-Version: i18next-conv\n" +"POT-Creation-Date: 2021-05-10T11:56:32.496Z\n" +"PO-Revision-Date: 2021-06-24 12:50+0000\n" +"Last-Translator: Viktor Varland , 2021\n" +"Language-Team: Pashto (https://www.transifex.com/hisp-uio/teams/100509/ps/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ps\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Clear" +msgstr "پاک یې کړئ" + +msgid "No data found" +msgstr "هېڅ ډاټا یا مالومات ونه موندل شول" + +msgid "Type to filter options" +msgstr "" + +msgid "Loading options" +msgstr "" + +msgid "No options found" +msgstr "" diff --git a/components/accessible-select/i18n/pt.po b/components/accessible-select/i18n/pt.po new file mode 100644 index 0000000000..2dad4e5cdd --- /dev/null +++ b/components/accessible-select/i18n/pt.po @@ -0,0 +1,32 @@ +# +# Translators: +# phil_dhis2, 2021 +# Viktor Varland , 2021 +# +msgid "" +msgstr "" +"Project-Id-Version: i18next-conv\n" +"POT-Creation-Date: 2021-05-10T11:56:32.496Z\n" +"PO-Revision-Date: 2021-06-24 12:50+0000\n" +"Last-Translator: Viktor Varland , 2021\n" +"Language-Team: Portuguese (https://www.transifex.com/hisp-uio/teams/100509/pt/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pt\n" +"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" + +msgid "Clear" +msgstr "Limpar" + +msgid "No data found" +msgstr "Dado não encontrado" + +msgid "Type to filter options" +msgstr "" + +msgid "Loading options" +msgstr "" + +msgid "No options found" +msgstr "" diff --git a/components/accessible-select/i18n/pt_BR.po b/components/accessible-select/i18n/pt_BR.po new file mode 100644 index 0000000000..6579a6af33 --- /dev/null +++ b/components/accessible-select/i18n/pt_BR.po @@ -0,0 +1,32 @@ +# +# Translators: +# phil_dhis2, 2021 +# Viktor Varland , 2021 +# +msgid "" +msgstr "" +"Project-Id-Version: i18next-conv\n" +"POT-Creation-Date: 2021-05-10T11:56:32.496Z\n" +"PO-Revision-Date: 2021-06-24 12:50+0000\n" +"Last-Translator: Viktor Varland , 2021\n" +"Language-Team: Portuguese (Brazil) (https://www.transifex.com/hisp-uio/teams/100509/pt_BR/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pt_BR\n" +"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" + +msgid "Clear" +msgstr "Limpar" + +msgid "No data found" +msgstr "Dado não encontrado" + +msgid "Type to filter options" +msgstr "" + +msgid "Loading options" +msgstr "" + +msgid "No options found" +msgstr "" diff --git a/components/accessible-select/i18n/ru.po b/components/accessible-select/i18n/ru.po new file mode 100644 index 0000000000..dc8d2e7316 --- /dev/null +++ b/components/accessible-select/i18n/ru.po @@ -0,0 +1,31 @@ +# +# Translators: +# phil_dhis2, 2021 +# +msgid "" +msgstr "" +"Project-Id-Version: i18next-conv\n" +"POT-Creation-Date: 2021-05-10T11:56:32.496Z\n" +"PO-Revision-Date: 2021-06-24 12:50+0000\n" +"Last-Translator: phil_dhis2, 2021\n" +"Language-Team: Russian (https://www.transifex.com/hisp-uio/teams/100509/ru/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ru\n" +"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);\n" + +msgid "Clear" +msgstr "Очистить" + +msgid "No data found" +msgstr "Данные не найдены" + +msgid "Type to filter options" +msgstr "" + +msgid "Loading options" +msgstr "" + +msgid "No options found" +msgstr "" diff --git a/components/accessible-select/i18n/sv.po b/components/accessible-select/i18n/sv.po new file mode 100644 index 0000000000..017a61da21 --- /dev/null +++ b/components/accessible-select/i18n/sv.po @@ -0,0 +1,31 @@ +# +# Translators: +# phil_dhis2, 2021 +# +msgid "" +msgstr "" +"Project-Id-Version: i18next-conv\n" +"POT-Creation-Date: 2021-05-10T11:56:32.496Z\n" +"PO-Revision-Date: 2021-06-24 12:50+0000\n" +"Last-Translator: phil_dhis2, 2021\n" +"Language-Team: Swedish (https://www.transifex.com/hisp-uio/teams/100509/sv/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sv\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Clear" +msgstr "Klar" + +msgid "No data found" +msgstr "" + +msgid "Type to filter options" +msgstr "" + +msgid "Loading options" +msgstr "" + +msgid "No options found" +msgstr "" diff --git a/components/accessible-select/i18n/tet.po b/components/accessible-select/i18n/tet.po new file mode 100644 index 0000000000..64cfad8c41 --- /dev/null +++ b/components/accessible-select/i18n/tet.po @@ -0,0 +1,31 @@ +# +# Translators: +# phil_dhis2, 2021 +# +msgid "" +msgstr "" +"Project-Id-Version: i18next-conv\n" +"POT-Creation-Date: 2021-05-10T11:56:32.496Z\n" +"PO-Revision-Date: 2021-06-24 12:50+0000\n" +"Last-Translator: phil_dhis2, 2021\n" +"Language-Team: Tetum (Tetun) (https://www.transifex.com/hisp-uio/teams/100509/tet/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: tet\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Clear" +msgstr "Hamós" + +msgid "No data found" +msgstr "" + +msgid "Type to filter options" +msgstr "" + +msgid "Loading options" +msgstr "" + +msgid "No options found" +msgstr "" diff --git a/components/accessible-select/i18n/tg.po b/components/accessible-select/i18n/tg.po new file mode 100644 index 0000000000..0abbf7c967 --- /dev/null +++ b/components/accessible-select/i18n/tg.po @@ -0,0 +1,32 @@ +# +# Translators: +# phil_dhis2, 2021 +# Viktor Varland , 2021 +# +msgid "" +msgstr "" +"Project-Id-Version: i18next-conv\n" +"POT-Creation-Date: 2021-05-10T11:56:32.496Z\n" +"PO-Revision-Date: 2021-06-24 12:50+0000\n" +"Last-Translator: Viktor Varland , 2021\n" +"Language-Team: Tajik (https://www.transifex.com/hisp-uio/teams/100509/tg/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: tg\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Clear" +msgstr "Пок кардан" + +msgid "No data found" +msgstr "Ягон иттилоот ёфт нашуд" + +msgid "Type to filter options" +msgstr "" + +msgid "Loading options" +msgstr "" + +msgid "No options found" +msgstr "" diff --git a/components/accessible-select/i18n/uk.po b/components/accessible-select/i18n/uk.po new file mode 100644 index 0000000000..ca9a0a55f5 --- /dev/null +++ b/components/accessible-select/i18n/uk.po @@ -0,0 +1,33 @@ +# +# Translators: +# phil_dhis2, 2021 +# Viktor Varland , 2021 +# Éva Tamási, 2022 +# +msgid "" +msgstr "" +"Project-Id-Version: i18next-conv\n" +"POT-Creation-Date: 2021-05-10T11:56:32.496Z\n" +"PO-Revision-Date: 2021-06-24 12:50+0000\n" +"Last-Translator: Éva Tamási, 2022\n" +"Language-Team: Ukrainian (https://app.transifex.com/hisp-uio/teams/100509/uk/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: uk\n" +"Plural-Forms: nplurals=4; plural=(n % 1 == 0 && n % 10 == 1 && n % 100 != 11 ? 0 : n % 1 == 0 && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14) ? 1 : n % 1 == 0 && (n % 10 ==0 || (n % 10 >=5 && n % 10 <=9) || (n % 100 >=11 && n % 100 <=14 )) ? 2: 3);\n" + +msgid "Clear" +msgstr "Очистити" + +msgid "No data found" +msgstr "Даних не знайдено" + +msgid "Type to filter options" +msgstr "Введіть параметри фільтра" + +msgid "Loading options" +msgstr "Параметри завантаження" + +msgid "No options found" +msgstr "Варіантів не знайдено" diff --git a/components/accessible-select/i18n/ur.po b/components/accessible-select/i18n/ur.po new file mode 100644 index 0000000000..3a60d63089 --- /dev/null +++ b/components/accessible-select/i18n/ur.po @@ -0,0 +1,32 @@ +# +# Translators: +# phil_dhis2, 2021 +# Viktor Varland , 2021 +# +msgid "" +msgstr "" +"Project-Id-Version: i18next-conv\n" +"POT-Creation-Date: 2021-05-10T11:56:32.496Z\n" +"PO-Revision-Date: 2021-06-24 12:50+0000\n" +"Last-Translator: Viktor Varland , 2021\n" +"Language-Team: Urdu (https://www.transifex.com/hisp-uio/teams/100509/ur/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ur\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Clear" +msgstr "کلیئر" + +msgid "No data found" +msgstr "کوئی ڈیٹا نہیں ملا" + +msgid "Type to filter options" +msgstr "" + +msgid "Loading options" +msgstr "" + +msgid "No options found" +msgstr "" diff --git a/components/accessible-select/i18n/uz_Latn.po b/components/accessible-select/i18n/uz_Latn.po new file mode 100644 index 0000000000..e00ae95217 --- /dev/null +++ b/components/accessible-select/i18n/uz_Latn.po @@ -0,0 +1,31 @@ +# +# Translators: +# Yury Rogachev , 2021 +# +msgid "" +msgstr "" +"Project-Id-Version: i18next-conv\n" +"POT-Creation-Date: 2021-05-10T11:56:32.496Z\n" +"PO-Revision-Date: 2021-06-24 12:50+0000\n" +"Last-Translator: Yury Rogachev , 2021\n" +"Language-Team: Uzbek (Latin) (https://www.transifex.com/hisp-uio/teams/100509/uz@Latn/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: uz@Latn\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Clear" +msgstr "Аниқ" + +msgid "No data found" +msgstr "Maʼlumotlar topilmadi" + +msgid "Type to filter options" +msgstr "" + +msgid "Loading options" +msgstr "" + +msgid "No options found" +msgstr "" diff --git a/components/accessible-select/i18n/uz_UZ_Cyrl.po b/components/accessible-select/i18n/uz_UZ_Cyrl.po new file mode 100644 index 0000000000..a3930567a8 --- /dev/null +++ b/components/accessible-select/i18n/uz_UZ_Cyrl.po @@ -0,0 +1,31 @@ +# +# Translators: +# Ibatov , 2021 +# +msgid "" +msgstr "" +"Project-Id-Version: i18next-conv\n" +"POT-Creation-Date: 2021-05-10T11:56:32.496Z\n" +"PO-Revision-Date: 2021-06-24 12:50+0000\n" +"Last-Translator: Ibatov , 2021\n" +"Language-Team: Uzbek (Cyrillic) (https://app.transifex.com/hisp-uio/teams/100509/uz@Cyrl/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: uz@Cyrl\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Clear" +msgstr "Тозалаш" + +msgid "No data found" +msgstr "Маълумотлар топилмади" + +msgid "Type to filter options" +msgstr "" + +msgid "Loading options" +msgstr "" + +msgid "No options found" +msgstr "" diff --git a/components/accessible-select/i18n/uz_UZ_Latn.po b/components/accessible-select/i18n/uz_UZ_Latn.po new file mode 100644 index 0000000000..b183c651a5 --- /dev/null +++ b/components/accessible-select/i18n/uz_UZ_Latn.po @@ -0,0 +1,31 @@ +# +# Translators: +# Yury Rogachev , 2021 +# +msgid "" +msgstr "" +"Project-Id-Version: i18next-conv\n" +"POT-Creation-Date: 2021-05-10T11:56:32.496Z\n" +"PO-Revision-Date: 2021-06-24 12:50+0000\n" +"Last-Translator: Yury Rogachev , 2021\n" +"Language-Team: Uzbek (Latin) (https://app.transifex.com/hisp-uio/teams/100509/uz@Latn/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: uz@Latn\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Clear" +msgstr "Аниқ" + +msgid "No data found" +msgstr "Maʼlumotlar topilmadi" + +msgid "Type to filter options" +msgstr "" + +msgid "Loading options" +msgstr "" + +msgid "No options found" +msgstr "" diff --git a/components/accessible-select/i18n/vi.po b/components/accessible-select/i18n/vi.po new file mode 100644 index 0000000000..2791f3d7cc --- /dev/null +++ b/components/accessible-select/i18n/vi.po @@ -0,0 +1,32 @@ +# +# Translators: +# phil_dhis2, 2021 +# Viktor Varland , 2021 +# +msgid "" +msgstr "" +"Project-Id-Version: i18next-conv\n" +"POT-Creation-Date: 2021-05-10T11:56:32.496Z\n" +"PO-Revision-Date: 2021-06-24 12:50+0000\n" +"Last-Translator: Viktor Varland , 2021\n" +"Language-Team: Vietnamese (https://www.transifex.com/hisp-uio/teams/100509/vi/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: vi\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Clear" +msgstr "Xóa" + +msgid "No data found" +msgstr "Không tìm thấy dữ liệu" + +msgid "Type to filter options" +msgstr "" + +msgid "Loading options" +msgstr "" + +msgid "No options found" +msgstr "" diff --git a/components/accessible-select/i18n/zh.po b/components/accessible-select/i18n/zh.po new file mode 100644 index 0000000000..6f911219a6 --- /dev/null +++ b/components/accessible-select/i18n/zh.po @@ -0,0 +1,33 @@ +# +# Translators: +# phil_dhis2, 2021 +# 晓东 林 <13981924470@126.com>, 2021 +# easylin , 2021 +# +msgid "" +msgstr "" +"Project-Id-Version: i18next-conv\n" +"POT-Creation-Date: 2021-05-10T11:56:32.496Z\n" +"PO-Revision-Date: 2021-06-24 12:50+0000\n" +"Last-Translator: easylin , 2021\n" +"Language-Team: Chinese (https://www.transifex.com/hisp-uio/teams/100509/zh/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Clear" +msgstr "清除" + +msgid "No data found" +msgstr "没有发现数据" + +msgid "Type to filter options" +msgstr "键入过滤选项" + +msgid "Loading options" +msgstr "加载选项" + +msgid "No options found" +msgstr "没有找到选项" diff --git a/components/accessible-select/i18n/zh_CN.po b/components/accessible-select/i18n/zh_CN.po new file mode 100644 index 0000000000..6d3e87d890 --- /dev/null +++ b/components/accessible-select/i18n/zh_CN.po @@ -0,0 +1,32 @@ +# +# Translators: +# easylin , 2021 +# 晓东 林 <13981924470@126.com>, 2021 +# +msgid "" +msgstr "" +"Project-Id-Version: i18next-conv\n" +"POT-Creation-Date: 2021-05-10T11:56:32.496Z\n" +"PO-Revision-Date: 2021-06-24 12:50+0000\n" +"Last-Translator: 晓东 林 <13981924470@126.com>, 2021\n" +"Language-Team: Chinese (China) (https://www.transifex.com/hisp-uio/teams/100509/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Clear" +msgstr "清除" + +msgid "No data found" +msgstr "没有数据被找到" + +msgid "Type to filter options" +msgstr "" + +msgid "Loading options" +msgstr "" + +msgid "No options found" +msgstr "" diff --git a/components/accessible-select/package.json b/components/accessible-select/package.json new file mode 100644 index 0000000000..911099695b --- /dev/null +++ b/components/accessible-select/package.json @@ -0,0 +1,61 @@ +{ + "name": "@dhis2-ui/native-select", + "version": "8.14.9", + "description": "UI Select", + "repository": { + "type": "git", + "url": "https://github.com/dhis2/ui.git", + "directory": "components/select" + }, + "homepage": "https://github.com/dhis2/ui#readme", + "license": "BSD-3-Clause", + "private": false, + "main": "./build/cjs/index.js", + "module": "./build/es/index.js", + "exports": { + "import": "./build/es/index.js", + "require": "./build/cjs/index.js" + }, + "sideEffects": false, + "publishConfig": { + "access": "public" + }, + "scripts": { + "start": "start-storybook -c ../../storybook/config --port 5000", + "build": "d2-app-scripts build", + "test": "d2-app-scripts test --jestConfig ../../jest.config.shared.js" + }, + "peerDependencies": { + "@dhis2/d2-i18n": "^1", + "react": "^16.8", + "react-dom": "^16.8", + "styled-jsx": "^4" + }, + "dependencies": { + "@dhis2/prop-types": "^3.1.2", + "@dhis2-ui/box": "8.14.9", + "@dhis2-ui/button": "8.14.9", + "@dhis2-ui/card": "8.14.9", + "@dhis2-ui/checkbox": "8.14.9", + "@dhis2-ui/chip": "8.14.9", + "@dhis2-ui/field": "8.14.9", + "@dhis2-ui/input": "8.14.9", + "@dhis2-ui/layer": "8.14.9", + "@dhis2-ui/loader": "8.14.9", + "@dhis2-ui/popper": "8.14.9", + "@dhis2-ui/status-icon": "8.14.9", + "@dhis2/ui-constants": "8.14.9", + "@dhis2/ui-icons": "8.14.9", + "classnames": "^2.3.1", + "prop-types": "^15.7.2" + }, + "files": [ + "build" + ], + "devDependencies": { + "@dhis2/d2-i18n": "^1.1.0", + "react": "16.13", + "react-dom": "16.13", + "styled-jsx": "^4.0.1" + } +} diff --git a/components/accessible-select/src/accessible-select/accessible-select-option.js b/components/accessible-select/src/accessible-select/accessible-select-option.js new file mode 100644 index 0000000000..49a5e7bd0b --- /dev/null +++ b/components/accessible-select/src/accessible-select/accessible-select-option.js @@ -0,0 +1,112 @@ +import { colors, elevations, spacers } from '@dhis2/ui-constants' +import PropTypes from 'prop-types' +import React from 'react' + +export default function AccessibleSelectOption({ + value, + label, + checked, + name, + onFocus, + onBlur, + onChange, +}) { + return ( + + ) +} + +AccessibleSelectOption.defaultProps = { + checked: undefined, +} + +AccessibleSelectOption.propTypes = { + label: PropTypes.string.isRequired, + name: PropTypes.string.isRequired, + value: PropTypes.string.isRequired, + checked: PropTypes.bool, + onBlur: PropTypes.func, + onChange: PropTypes.func, + onFocus: PropTypes.func, +} diff --git a/components/accessible-select/src/accessible-select/accessible-select.js b/components/accessible-select/src/accessible-select/accessible-select.js new file mode 100644 index 0000000000..27199af877 --- /dev/null +++ b/components/accessible-select/src/accessible-select/accessible-select.js @@ -0,0 +1,236 @@ +import { Layer } from '@dhis2-ui/layer' +import { Popper } from '@dhis2-ui/popper' +import { colors, elevations } from '@dhis2/ui-constants' +import { IconChevronDown16 } from '@dhis2/ui-icons'; +import PropTypes from 'prop-types' +import React, { useEffect, useRef, useState } from 'react' +import css from 'styled-jsx/css' + +const { className, styles } = css.resolve` + display: none; +` + +// Check whether an option is valid +export const checkIfValidOption = (option) => + typeof option.props?.value !== 'undefined' && + typeof option.props?.label !== 'undefined' + +const modifyOptions = (children, callback) => { + return React.Children.map(children, (child) => { + const isValidOption = checkIfValidOption(child) + const hasChildren = !!child.props?.children + + if (!isValidOption && !hasChildren) { + return child + } + + if (isValidOption && !hasChildren) { + return callback(child) + } + + const modifiedChildren = modifyOptions(child.props.children, callback) + + if (!isValidOption && hasChildren) { + React.cloneElement(child, { + ...child.props, + children: modifiedChildren, + }) + } + + return callback( + React.cloneElement(child, { + ...child.props, + children: modifiedChildren, + }) + ) + }) +} + +export default function AccessibleSelect({ + name, + selected, + helpText, + children: _children, + onBlur: externalOnBlur, + onChange: externalOnChange, + onFocus, +}) { + const buttonRef = useRef() + const [open, setOpen] = useState(false) + const [width, setWidth] = useState(-1) + const optionsContainerId = `${name}-options` + + useEffect(() => { + function handler() { + const { offsetWidth } = buttonRef.current + if (width !== offsetWidth) { + setWidth(offsetWidth) + } + } + + handler() + window.addEventListener('resize', handler) + return () => window.removeEventListener('resize', handler) + }, [width]) + + const onChange = (event) => { + setOpen(false) + + if (externalOnChange) { + externalOnChange(event) + } + } + + const onBlur = (event) => { + if (externalOnBlur) { + externalOnBlur(event) + } + } + + const children = modifyOptions(_children, (option) => { + return React.cloneElement(option, { + ...option.props, + name, + checked: option.props.value === selected, + onChange, + onBlur, + onFocus, + }) + }) + + return ( +
+ + + setOpen(false)} + > + +
+ + {helpText} + + + {children} +
+
+
+ + {styles} + + +
+ ) +} + +AccessibleSelect.propTypes = { + children: PropTypes.node.isRequired, + name: PropTypes.string.isRequired, + helpText: PropTypes.string, + selected: PropTypes.string, + onBlur: PropTypes.func, + onChange: PropTypes.func, + onFocus: PropTypes.func, +} diff --git a/components/accessible-select/src/accessible-select/accessible-select.stories.js b/components/accessible-select/src/accessible-select/accessible-select.stories.js new file mode 100644 index 0000000000..78de89fe8c --- /dev/null +++ b/components/accessible-select/src/accessible-select/accessible-select.stories.js @@ -0,0 +1,99 @@ +import React, { useState } from 'react' +import AccessibleSelectOption from './accessible-select-option.js' +import AccessibleSelect from './accessible-select.js' + +export default { + title: 'Accessible Select', + component: AccessibleSelect, +} + +export const Default = () => { + const [selected, setSelected] = useState('foo') + const name = 'selectName' + + return ( + setSelected(e.target.value)} + > + + + + + ) +} + +export const Searchable = () => { + const [selected, setSelected] = useState('foo') + const name = 'selectName' + const allOptions = [ + { value: 'foo', label: 'Foo' }, + { value: 'bar', label: 'Bar' }, + { value: 'baz', label: 'Baz' }, + ] + const [options, setOptions] = useState(allOptions) + + return ( + setSelected(e.target.value)} + > + { + const filter = e.target.value.toLowerCase() + + if (!filter) { + return setOptions(allOptions) + } + + const nextOptions = allOptions.filter((option) => { + return option.label.toLowerCase().includes(filter) + }) + setOptions(nextOptions) + }} + placeholder="Search options" + /> + + {options.map(({ value, label }) => ( + + ))} + + ) +} + +export const NestedOptions = () => { + const [selected, setSelected] = useState('foo') + const name = 'selectName' + const H2 = ({ children }) => ( +

{children}

+ ) + + return ( + setSelected(e.target.value)} + > +
+

Headline #1

+ + + +
+ +
+

Headline #2

+ + + +
+
+ ) +} diff --git a/components/accessible-select/src/accessible-select/index.js b/components/accessible-select/src/accessible-select/index.js new file mode 100644 index 0000000000..7e479d8161 --- /dev/null +++ b/components/accessible-select/src/accessible-select/index.js @@ -0,0 +1,2 @@ +export { default as AccessibleSelect } from './accessible-select.js' +export { default as AccessibleSelectOption } from './accessible-select-option.js' diff --git a/components/accessible-select/src/index.js b/components/accessible-select/src/index.js new file mode 100644 index 0000000000..24a06e1d08 --- /dev/null +++ b/components/accessible-select/src/index.js @@ -0,0 +1 @@ +export { AccessibleSelect, AccessibleSelectOption } from './accessible-select/index.js'