Barista: ИсслСдования: Combobox / Select as webcomponents

Π‘ΠΎΠ·Π΄Π°Π½Π½Ρ‹ΠΉ Π½Π° 28 июл. 2020  Β·  11ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ  Β·  Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: dynatrace-oss/barista

Запрос Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

РСзюмС

Нам Π½ΡƒΠΆΠ½ΠΎ ΠΈΠ·ΡƒΡ‡ΠΈΡ‚ΡŒ, ΠΊΠ°ΠΊ ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ API для Π²Ρ‹Π±ΠΎΡ€Π° / поля со списком, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ выглядСл Π² ΠΌΠΈΡ€Π΅ Π²Π΅Π±-ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ².

ОписаниС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

Π’Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ ΠΏΠΎΠ»Π΅ со списком ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ΄Π½ΠΈΠΌ ΠΈ Ρ‚Π΅ΠΌ ΠΆΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠΌ, Π½ΠΎ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΌΡ‹ Π·Π°Ρ…ΠΎΡ‚ΠΈΠΌ Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΈΡ…. Пока Π΅Ρ‰Π΅ ΠΎΡ‡Π΅Π½ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ Π½Π΅Ρ€Π΅ΡˆΠ΅Π½Π½Ρ‹Ρ….

Π‘Ρ€Π°Π²Π½ΠΈΡ‚Π΅ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Ρ‹ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² / систСмы проСктирования ΠΊ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρƒ combobox / select ΠΈ ΠΏΡ€ΠΈΠ΄ΡƒΠΌΠ°ΠΉΡ‚Π΅ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ API, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ.

НСкоторыС ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ рСсурсы:

Π˜ΠΌΠ΅ΠΉΡ‚Π΅ Π² Π²ΠΈΠ΄Ρƒ, Ρ‡Ρ‚ΠΎ виртуализация ΠΎΠΏΡ†ΠΈΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΉ. Π­Ρ‚ΠΎ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ Π²Π΅Π±-ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ², ΠΈΠ»ΠΈ это Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ наши ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ Π½Π° ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΌ ΡƒΡ€ΠΎΠ²Π½Π΅ инфраструктуры.
ВСстируйтС ΠΈ исслСдуйтС, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Ρ… Π²Ρ‹ΡˆΠ΅ Π²Π΅Π±-ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² Π² настройкС Angular, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΡƒΡŽ ΠΏΡ€ΠΎΠΊΡ€ΡƒΡ‚ΠΊΡƒ для Π²Ρ‹Π±ΠΎΡ€Π°.
ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π΅Π°ΠΊΡ†ΠΈΡŽ ΠΈ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ с Π²Π΅Π±-ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠΌ.

Если ΠΌΡ‹ Ρ€Π΅ΡˆΠΈΠΌ ΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒΡΡ с этим ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ - Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ шаблонов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ устанавливаСт контСкст для ΠΎΠ΄Π½Π°ΠΆΠ΄Ρ‹ созданной ΠΎΠΏΡ†ΠΈΠΈ.

НСкоторыС рСсурсы ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ Π΄ΠΎΡΡ‚ΠΈΡ‡ΡŒ Ρ‡Π΅Π³ΠΎ-Ρ‚ΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ³ΠΎ, ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ microsoft-graph-toolkit.

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΡ‚Π°Ρ‚ΡŒ ΠΎΠ±Π·ΠΎΡ€ Π½Π°ΡˆΠΈΡ… возмоТностСй ΠΈ плюсов / минусов, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΌΡ‹ ΠΌΠΎΠ³Π»ΠΈ ΠΏΡ€ΠΈΠ½ΡΡ‚ΡŒ обоснованноС Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ Π΄Π²ΠΈΠ³Π°Ρ‚ΡŒΡΡ дальшС.

Basic select mock

feature has-pr next

Π‘Π°ΠΌΡ‹ΠΉ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

ВрСбования

  • Π’ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Π°Ρ ΠΏΡ€ΠΎΠΊΡ€ΡƒΡ‚ΠΊΠ°: Π½Π° самом Π΄Π΅Π»Π΅ Π΄ΠΎΠ»ΠΆΠ½Π° ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Π°ΡΡ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ с ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ.
  • ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ шаблон: ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ шаблон, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ².
  • Π€ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΡ: ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π²Π²ΠΎΠ΄ΠΈΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ для Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ списка элСмСнтов; Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΡ Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ с использованиСм Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ, прСдоставлСнной ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ
  • Π˜Π½Π΄ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΏΡ€ΠΎΠΊΡ€ΡƒΡ‚ΠΊΠΈ: всСгда Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ, Π΅ΡΡ‚ΡŒ Π»ΠΈ Π΅Ρ‰Π΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ -> ΠΏΠΎΠΊΠ° Π΅ΡΡ‚ΡŒ большС Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ², Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ Π²ΠΈΠ΄Π½Π° ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Π° ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ послСднСй Π²ΠΈΠ΄ΠΈΠΌΠΎΠΉ ΠΎΠΏΡ†ΠΈΠΈ (ΠΈΠ»ΠΈ максимум x пиксСлСй), Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ‡Π΅Ρ‚ΠΊΠΎ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠΊΡ€ΡƒΡ‡ΠΈΠ²Π°Ρ‚ΡŒ .

ВрСбования ΠΊ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ шагам

  • БостояниС Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ: Π² Π½Π°Π»ΠΎΠΆΠ΅Π½ΠΈΠΈ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒΡΡ счСтчик Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ, ΠΏΠΎΠΊΠ° Π½Π΅Ρ‚ доступных элСмСнтов. ToDo Π“Π΄Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒΡΡ счСтчик Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ?
  • ΠœΠ½ΠΎΠΆΠ΅ΡΡ‚Π²Π΅Π½Π½Ρ‹ΠΉ Π²Ρ‹Π±ΠΎΡ€: ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π²Ρ‹Π±ΠΈΡ€Π°Ρ‚ΡŒ нСсколько Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ².
  • Π“Ρ€ΡƒΠΏΠΏΡ‹ ΠΎΠΏΡ†ΠΈΠΉ: Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΡ†ΠΈΠΈ

Π”ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ

ΠŸΡ€ΠΈ фокусировкС ΠΏΠΎΠ»Π΅ со списком Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Ρ‚ΡŒΡΡ ΠΏΡ€ΠΈ Π½Π°ΠΆΠ°Ρ‚ΠΈΠΈ клавиши Enter , ArrowUp ΠΈΠ»ΠΈ ArrowDown ΠΈΠ»ΠΈ ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ Π²Π²ΠΎΠ΄ΠΈΡ‚ΡŒ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ Π² ΠΏΠΎΠ»Π΅ Π²Π²ΠΎΠ΄Π°.

ΠŸΡ€ΠΈ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ»Π°Π²ΠΈΡˆΡƒ ArrowUp / ArrowDown для Π²Ρ‹Π±ΠΎΡ€Π° ΠΈΠ· ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ². Ѐокус для Π²Π²ΠΎΠ΄Π° Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π° Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΡΡ‚Π°Π²Π°Ρ‚ΡŒΡΡ Π² ΠΏΠΎΠ»Π΅ Π²Π²ΠΎΠ΄Π°, ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π²ΠΊΠ»Π°Π΄ΠΊΠΈ. БостояниС Π²Ρ‹Π±ΠΎΡ€Π° ΠΎΠΏΡ†ΠΈΠΉ слСдуСт ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° aria-selected .

Π’Ρ‹Π±ΠΎΡ€ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‚ΠΏΡ€Π°Π²Π»Π΅Π½ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ клавиши Enter .

НаТатиС клавиши Tab ΠΈΠ»ΠΈ Escape Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ Π½Π°Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ Π²Ρ‹Π±Ρ€Π°Π½Π½Ρ‹ΠΉ элСмСнт.

ΠŸΡ€ΠΈ Π²Π²ΠΎΠ΄Π΅ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π° ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ Π²Ρ‹Ρ…ΠΎΠ΄Π΅ ΠΈΠ· поля Π²Π²ΠΎΠ΄Π° Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΡΠ±Ρ€ΠΎΡˆΠ΅Π½ ΠΈ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒΡΡ Ρ€Π°Π½Π΅Π΅ Π²Ρ‹Π±Ρ€Π°Π½Π½Ρ‹ΠΉ элСмСнт.

Бинтаксис настраиваСмого шаблона

ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ строку открытия ΠΈ закрытия частСй шаблона. Π­Ρ‚ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π»ΠΈΠ±ΠΎ Π½Π° глобальном, Π»ΠΈΠ±ΠΎ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² (Π΅Ρ‰Π΅ Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ).

По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ {{ ΠΈ }} .

ΠŸΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ API

_WIP_

ComboBox слСдуСт Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ Π½Π° основной ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ FluidComboBox ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ FluidComboBoxOptionsList ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ FluidComboBoxOption .

FluidComboBox

Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚ FluidComboBoxOptionsList , ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ, Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, содСрТит FluidComboBoxOption s.
УправляСт ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ΠΌ ΠΈ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ΠΌ налоТСния ΠΈ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ налоТСния.
ΠŸΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ шаблон ΠΊΠ°ΠΊ Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠΉ элСмСнт, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ base HTMLElement s.

ΠŸΡ€ΠΈ прСдоставлСнии шаблона Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΡƒΡŽ ΠΈ Π·Π°ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΡƒΡŽ строки, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для привязок шаблона.

Π’Ρ…ΠΎΠ΄Ρ‹

| Имя | ΠŸΠ»Π°Π½ΠΈΡ€ΡƒΠ΅Ρ‚ΡΡ Π½Π° | Π’ΠΈΠΏ | По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ | ОписаниС |
| -------------- | ----------- | -------- | ------- | -------------------------------------------------- ------------------------------ |
| Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ | MVP | Массив | [] | Массив ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² для отобраТСния Π² FluidComboBoxOptionsList |
| filterFn | MVP | (option: T) => boolean | null | Ѐункция, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠ°Ρ для Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ ΠΎΠΏΡ†ΠΈΠΉ |
| renderOptionFn | MVP | (option: T) => string | null | Ѐункция, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠ°Ρ для ΠΎΠΏΡ†ΠΈΠΉ Ρ€Π΅Π½Π΄Π΅Ρ€ΠΈΠ½Π³Π° Π½Π° ΠΏΠ°Π½Π΅Π»ΠΈ автозаполнСния |
| Π·Π°ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒ | MVP | строка | '' | Π—Π°ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒ для отобраТСния Π² ΠΏΠΎΠ»Π΅ Π²Π²ΠΎΠ΄Π°, ΠΊΠΎΠ³Π΄Π° Π½Π΅ Π²Ρ‹Π±Ρ€Π°Π½ Π½ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ |
| ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ | MVP | логичСскоС | лоТь | ЛогичСскоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΎ Π»ΠΈ ΠΏΠΎΠ»Π΅ со списком |
| Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° | MVP | логичСскоС | лоТь | ЛогичСскоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰Π΅Π΅, ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒ Π»ΠΈ ΠΈΠ½Π΄ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ |
| Π²Ρ‹Π±Ρ€Π°Π½ΠΎ | MVP | любой | null | ΠŸΡ€Π΅Π΄ΠΌΠ΅Ρ‚ для ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ Π²Ρ‹Π±ΠΎΡ€Π° |
| multiSelect | v2 | логичСскоС | лоТь | ЛогичСскоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰Π΅Π΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ Π²Ρ‹Π±ΠΎΡ€Π° Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΎΠΏΡ†ΠΈΠΉ |

Π’Ρ‹Ρ…ΠΎΠ΄Ρ‹

| Имя | ΠŸΠ»Π°Π½ΠΈΡ€ΡƒΠ΅Ρ‚ΡΡ Π½Π° | Π’ΠΈΠΏ | ОписаниС |
| ---------------- | ----------- | --------------------------------- | -------------------------------------------------- ---- |
| ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ | MVP | FluidComboBoxChangeEvent | Π‘ΠΎΠ±Ρ‹Ρ‚ΠΈΠ΅ срабатываСт ΠΏΡ€ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ значСния |
| Π·Π°ΠΌΠ΅Π½Π° Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π° | MVP | FluidComboBoxFilterChangeEvent | Π‘ΠΎΠ±Ρ‹Ρ‚ΠΈΠ΅ запускаСтся, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π²Π²ΠΎΠ΄ΠΈΡ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ для Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ |
| Π²Ρ‹Π±ΠΎΡ€-ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ | MVP | FluidComboBoxSelectionChangeEvent | Π‘ΠΎΠ±Ρ‹Ρ‚ΠΈΠ΅ срабатываСт ΠΏΡ€ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° |

FluidLoadingSpinner

Π’ качСствС ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ условия для FluidComboBox Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ сначала Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Π·Π°Π³Ρ€ΡƒΠ·ΠΎΡ‡Π½ΠΎΠ³ΠΎ счСтчика.
ToDo БпроситС UX ΠΎ L&F Π½ΠΎΠ²ΠΎΠ³ΠΎ Π·Π°Π³Ρ€ΡƒΠ·ΠΎΡ‡Π½ΠΎΠ³ΠΎ счСтчика (ΠΈΠ»ΠΈ ΠΎ Ρ‚ΠΎΠΌ, ΠΌΠΎΠΆΠ½ΠΎ Π»ΠΈ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ старый Π΄ΠΈΠ·Π°ΠΉΠ½).

FluidVirtualScroller

Π’ качСствС ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ условия для FluidComboBox Π½Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΠΉ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΡƒΡŽ ΠΏΡ€ΠΎΠΊΡ€ΡƒΡ‚ΠΊΡƒ.
Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ»Π΅ со списком с большим количСством элСмСнтов.

Π‘ΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅ Ρ‚Π°ΠΊΠΆΠ΅:
https://github.com/WICG/virtual-scroller/blob/master/README.md
https://www.sitepen.com/blog/next-generation-virtual-scrolling/
https://dev.to/adamklein/build-your-own-virtual-scroll-part-i-11ib
https://blog.logrocket.com/virtual-scrolling-core-principles-and-basic-implementation-in-react/

FluidPopover

Π’ качСствС ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ условия для FluidComboBox Π½Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎΡ€Π°Π·ΠΎΠ²Ρ‹ΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Π²ΡΠΏΠ»Ρ‹Π²Π°ΡŽΡ‰Π΅Π³ΠΎ ΠΎΠΊΠ½Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°Π·ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ
идСально ΠΏΠΎΠ΄ элСмСнтом Π²Π²ΠΎΠ΄Π° поля со списком.

Π­Ρ‚Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π΄ΠΎΠ»ΠΆΠ½Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ этого ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°:
https://popper.js.org/docs/v2/

ВсС 11 ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π‘ΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·ΠΈΡ€ΡƒΠΉΡ‚Π΅ с @heartdisease ΠΎΠ± идСях API для поля со списком. Он ΡƒΠ»ΡƒΡ‡ΡˆΠ°Π΅Ρ‚ Π½Π°ΡˆΡƒ Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ ΡΠΊΡΠΏΠ΅Ρ€ΠΈΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ для Angular

Π― протСстировал Microsoft-graph-toolkit TemplateHelper для создания элСмСнтов combobox с Π·Π°Π΄Π°Π½Π½Ρ‹ΠΌ контСкстом ΠΈ шаблоном, прСдоставлСнным Π² слотС. Π­Ρ‚ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ ΠΌΡ‹ ΠΈ надСялись, Ρ‚Π°ΠΊΠΆΠ΅ с Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΌΠΈ элСмСнтами Π² шаблонС.
Π― Π·Π°Π³Ρ€ΡƒΠ·ΠΈΠ» тСст Π² это Ρ€Π΅ΠΏΠΎ

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡƒΠΌΠ΅Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ список элСмСнтов ΠΈ (Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ) шаблон Π² ΠΏΠΎΠ»Π΅ со списком ΠΈ «просто» Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΏΠ΅Ρ€Π΅Π΄ фактичСским Ρ€Π΅Π½Π΄Π΅Ρ€ΠΈΠ½Π³ΠΎΠΌ элСмСнтов для Ρ€Π΅Π½Π΄Π΅Ρ€ΠΈΠ½Π³Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ x элСмСнтов, Π² зависимости ΠΎΡ‚ полоТСния ΠΏΡ€ΠΎΠΊΡ€ΡƒΡ‚ΠΊΠΈ ΠΈ высоты Π½Π°ΠΊΠ»Π°Π΄Π½ΠΎΠΉ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€.

Π’ настоящСС врСмя ΠΌΠ΅Ρ‚ΠΎΠ΄ TemplateHelper.renderTemplate() ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ HTMLElement Π² качСствС ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠ³ΠΎ ΡƒΠ·Π»Π°, шаблона ΠΈ контСкста (ΠΈ Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ контСкста). Он создаСт всС ΡƒΠ·Π»Ρ‹ Π² соотвСтствии с Π·Π°Π΄Π°Π½Π½Ρ‹ΠΌ шаблоном ΠΈ присоСдиняСт ΠΈΡ… ΠΊ ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠΌΡƒ ΡƒΠ·Π»Ρƒ.
Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π±Ρ‹Π»ΠΎ Π±Ρ‹ Π»ΡƒΡ‡ΡˆΠ΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ это ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΈ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π» Ρ‚ΠΎΠ»ΡŒΠΊΠΎ шаблон ΠΈ контСкст ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π» скомпилированный шаблон, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°Ρ‚Π΅ΠΌ ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π΅Π½Π½Ρ‹ΠΉ HTML нСпосрСдствСнно Π² освСщСнном шаблонС Π² ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π΅.
Π§Ρ‚ΠΎ Π²Ρ‹ Π΄ΡƒΠΌΠ°Π΅Ρ‚Π΅?

ВрСбования

  • Π’ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Π°Ρ ΠΏΡ€ΠΎΠΊΡ€ΡƒΡ‚ΠΊΠ°: Π½Π° самом Π΄Π΅Π»Π΅ Π΄ΠΎΠ»ΠΆΠ½Π° ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Π°ΡΡ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ с ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ.
  • ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ шаблон: ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ шаблон, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ².
  • Π€ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΡ: ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π²Π²ΠΎΠ΄ΠΈΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ для Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ списка элСмСнтов; Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΡ Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ с использованиСм Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ, прСдоставлСнной ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ
  • Π˜Π½Π΄ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΏΡ€ΠΎΠΊΡ€ΡƒΡ‚ΠΊΠΈ: всСгда Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ, Π΅ΡΡ‚ΡŒ Π»ΠΈ Π΅Ρ‰Π΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ -> ΠΏΠΎΠΊΠ° Π΅ΡΡ‚ΡŒ большС Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ², Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ Π²ΠΈΠ΄Π½Π° ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Π° ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ послСднСй Π²ΠΈΠ΄ΠΈΠΌΠΎΠΉ ΠΎΠΏΡ†ΠΈΠΈ (ΠΈΠ»ΠΈ максимум x пиксСлСй), Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ‡Π΅Ρ‚ΠΊΠΎ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠΊΡ€ΡƒΡ‡ΠΈΠ²Π°Ρ‚ΡŒ .

ВрСбования ΠΊ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ шагам

  • БостояниС Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ: Π² Π½Π°Π»ΠΎΠΆΠ΅Π½ΠΈΠΈ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒΡΡ счСтчик Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ, ΠΏΠΎΠΊΠ° Π½Π΅Ρ‚ доступных элСмСнтов. ToDo Π“Π΄Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒΡΡ счСтчик Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ?
  • ΠœΠ½ΠΎΠΆΠ΅ΡΡ‚Π²Π΅Π½Π½Ρ‹ΠΉ Π²Ρ‹Π±ΠΎΡ€: ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π²Ρ‹Π±ΠΈΡ€Π°Ρ‚ΡŒ нСсколько Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ².
  • Π“Ρ€ΡƒΠΏΠΏΡ‹ ΠΎΠΏΡ†ΠΈΠΉ: Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΡ†ΠΈΠΈ

Π”ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ

ΠŸΡ€ΠΈ фокусировкС ΠΏΠΎΠ»Π΅ со списком Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Ρ‚ΡŒΡΡ ΠΏΡ€ΠΈ Π½Π°ΠΆΠ°Ρ‚ΠΈΠΈ клавиши Enter , ArrowUp ΠΈΠ»ΠΈ ArrowDown ΠΈΠ»ΠΈ ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ Π²Π²ΠΎΠ΄ΠΈΡ‚ΡŒ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ Π² ΠΏΠΎΠ»Π΅ Π²Π²ΠΎΠ΄Π°.

ΠŸΡ€ΠΈ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ»Π°Π²ΠΈΡˆΡƒ ArrowUp / ArrowDown для Π²Ρ‹Π±ΠΎΡ€Π° ΠΈΠ· ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ². Ѐокус для Π²Π²ΠΎΠ΄Π° Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π° Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΡΡ‚Π°Π²Π°Ρ‚ΡŒΡΡ Π² ΠΏΠΎΠ»Π΅ Π²Π²ΠΎΠ΄Π°, ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π²ΠΊΠ»Π°Π΄ΠΊΠΈ. БостояниС Π²Ρ‹Π±ΠΎΡ€Π° ΠΎΠΏΡ†ΠΈΠΉ слСдуСт ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° aria-selected .

Π’Ρ‹Π±ΠΎΡ€ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‚ΠΏΡ€Π°Π²Π»Π΅Π½ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ клавиши Enter .

НаТатиС клавиши Tab ΠΈΠ»ΠΈ Escape Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ Π½Π°Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ Π²Ρ‹Π±Ρ€Π°Π½Π½Ρ‹ΠΉ элСмСнт.

ΠŸΡ€ΠΈ Π²Π²ΠΎΠ΄Π΅ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π° ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ Π²Ρ‹Ρ…ΠΎΠ΄Π΅ ΠΈΠ· поля Π²Π²ΠΎΠ΄Π° Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΡΠ±Ρ€ΠΎΡˆΠ΅Π½ ΠΈ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒΡΡ Ρ€Π°Π½Π΅Π΅ Π²Ρ‹Π±Ρ€Π°Π½Π½Ρ‹ΠΉ элСмСнт.

Бинтаксис настраиваСмого шаблона

ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ строку открытия ΠΈ закрытия частСй шаблона. Π­Ρ‚ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π»ΠΈΠ±ΠΎ Π½Π° глобальном, Π»ΠΈΠ±ΠΎ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² (Π΅Ρ‰Π΅ Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ).

По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ {{ ΠΈ }} .

ΠŸΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ API

_WIP_

ComboBox слСдуСт Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ Π½Π° основной ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ FluidComboBox ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ FluidComboBoxOptionsList ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ FluidComboBoxOption .

FluidComboBox

Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚ FluidComboBoxOptionsList , ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ, Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, содСрТит FluidComboBoxOption s.
УправляСт ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ΠΌ ΠΈ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ΠΌ налоТСния ΠΈ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ налоТСния.
ΠŸΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ шаблон ΠΊΠ°ΠΊ Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠΉ элСмСнт, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ base HTMLElement s.

ΠŸΡ€ΠΈ прСдоставлСнии шаблона Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΡƒΡŽ ΠΈ Π·Π°ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΡƒΡŽ строки, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для привязок шаблона.

Π’Ρ…ΠΎΠ΄Ρ‹

| Имя | ΠŸΠ»Π°Π½ΠΈΡ€ΡƒΠ΅Ρ‚ΡΡ Π½Π° | Π’ΠΈΠΏ | По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ | ОписаниС |
| -------------- | ----------- | -------- | ------- | -------------------------------------------------- ------------------------------ |
| Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ | MVP | Массив | [] | Массив ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² для отобраТСния Π² FluidComboBoxOptionsList |
| filterFn | MVP | (option: T) => boolean | null | Ѐункция, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠ°Ρ для Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ ΠΎΠΏΡ†ΠΈΠΉ |
| renderOptionFn | MVP | (option: T) => string | null | Ѐункция, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠ°Ρ для ΠΎΠΏΡ†ΠΈΠΉ Ρ€Π΅Π½Π΄Π΅Ρ€ΠΈΠ½Π³Π° Π½Π° ΠΏΠ°Π½Π΅Π»ΠΈ автозаполнСния |
| Π·Π°ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒ | MVP | строка | '' | Π—Π°ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒ для отобраТСния Π² ΠΏΠΎΠ»Π΅ Π²Π²ΠΎΠ΄Π°, ΠΊΠΎΠ³Π΄Π° Π½Π΅ Π²Ρ‹Π±Ρ€Π°Π½ Π½ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ |
| ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ | MVP | логичСскоС | лоТь | ЛогичСскоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΎ Π»ΠΈ ΠΏΠΎΠ»Π΅ со списком |
| Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° | MVP | логичСскоС | лоТь | ЛогичСскоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰Π΅Π΅, ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒ Π»ΠΈ ΠΈΠ½Π΄ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ |
| Π²Ρ‹Π±Ρ€Π°Π½ΠΎ | MVP | любой | null | ΠŸΡ€Π΅Π΄ΠΌΠ΅Ρ‚ для ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ Π²Ρ‹Π±ΠΎΡ€Π° |
| multiSelect | v2 | логичСскоС | лоТь | ЛогичСскоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰Π΅Π΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ Π²Ρ‹Π±ΠΎΡ€Π° Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΎΠΏΡ†ΠΈΠΉ |

Π’Ρ‹Ρ…ΠΎΠ΄Ρ‹

| Имя | ΠŸΠ»Π°Π½ΠΈΡ€ΡƒΠ΅Ρ‚ΡΡ Π½Π° | Π’ΠΈΠΏ | ОписаниС |
| ---------------- | ----------- | --------------------------------- | -------------------------------------------------- ---- |
| ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ | MVP | FluidComboBoxChangeEvent | Π‘ΠΎΠ±Ρ‹Ρ‚ΠΈΠ΅ срабатываСт ΠΏΡ€ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ значСния |
| Π·Π°ΠΌΠ΅Π½Π° Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π° | MVP | FluidComboBoxFilterChangeEvent | Π‘ΠΎΠ±Ρ‹Ρ‚ΠΈΠ΅ запускаСтся, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π²Π²ΠΎΠ΄ΠΈΡ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ для Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ |
| Π²Ρ‹Π±ΠΎΡ€-ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ | MVP | FluidComboBoxSelectionChangeEvent | Π‘ΠΎΠ±Ρ‹Ρ‚ΠΈΠ΅ срабатываСт ΠΏΡ€ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° |

FluidLoadingSpinner

Π’ качСствС ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ условия для FluidComboBox Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ сначала Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Π·Π°Π³Ρ€ΡƒΠ·ΠΎΡ‡Π½ΠΎΠ³ΠΎ счСтчика.
ToDo БпроситС UX ΠΎ L&F Π½ΠΎΠ²ΠΎΠ³ΠΎ Π·Π°Π³Ρ€ΡƒΠ·ΠΎΡ‡Π½ΠΎΠ³ΠΎ счСтчика (ΠΈΠ»ΠΈ ΠΎ Ρ‚ΠΎΠΌ, ΠΌΠΎΠΆΠ½ΠΎ Π»ΠΈ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ старый Π΄ΠΈΠ·Π°ΠΉΠ½).

FluidVirtualScroller

Π’ качСствС ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ условия для FluidComboBox Π½Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΠΉ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΡƒΡŽ ΠΏΡ€ΠΎΠΊΡ€ΡƒΡ‚ΠΊΡƒ.
Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ»Π΅ со списком с большим количСством элСмСнтов.

Π‘ΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅ Ρ‚Π°ΠΊΠΆΠ΅:
https://github.com/WICG/virtual-scroller/blob/master/README.md
https://www.sitepen.com/blog/next-generation-virtual-scrolling/
https://dev.to/adamklein/build-your-own-virtual-scroll-part-i-11ib
https://blog.logrocket.com/virtual-scrolling-core-principles-and-basic-implementation-in-react/

FluidPopover

Π’ качСствС ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ условия для FluidComboBox Π½Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎΡ€Π°Π·ΠΎΠ²Ρ‹ΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Π²ΡΠΏΠ»Ρ‹Π²Π°ΡŽΡ‰Π΅Π³ΠΎ ΠΎΠΊΠ½Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°Π·ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ
идСально ΠΏΠΎΠ΄ элСмСнтом Π²Π²ΠΎΠ΄Π° поля со списком.

Π­Ρ‚Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π΄ΠΎΠ»ΠΆΠ½Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ этого ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°:
https://popper.js.org/docs/v2/

Π§Ρ‚ΠΎ касаСтся шаблонов, Ρƒ мСня Π΅ΡΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ опасСния, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ Π³ΠΈΠ±ΠΊΠΎ ΠΈ слоТно ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π·Π°ΠΌΠ΅Π½Ρƒ тСкста. ΠŸΠΎΠ΄ΡƒΠΌΠ°ΠΉΡ‚Π΅ ΠΎ прСобразованиях тСкста с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈΠ»ΠΈ простых условий, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ссли это Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π½ΠΎ я ΡΡ‡ΠΈΡ‚Π°ΡŽ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ΠΌ.

Мой ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Π±Ρ‹Π» Π±Ρ‹ своСго Ρ€ΠΎΠ΄Π° написаниСм Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ строку HTML, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Π² DocumentFragment, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π·Π°Ρ‚Π΅ΠΌ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ.

Написав Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ ΠΏΠΎΠ»Π½ΡƒΡŽ Π³ΠΈΠ±ΠΊΠΎΡΡ‚ΡŒ прСобразования ΠΈΠ»ΠΈ условий.
Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ простой Π²Ρ‹Ρ…ΠΎΠ΄ для этого, ΠΌΡ‹ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ ΠΏΠΎΡ…ΠΎΠΆΠ΅Π΅ Π½Π° JSX htm, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΎ Π² строку, поэтому компиляция Π½Π΅ потрСбуСтся. Он Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΎΡ‡Π΅Π½ΡŒ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½ΡƒΡŽ Π·Π°Π½ΠΈΠΌΠ°Π΅ΠΌΡƒΡŽ ΠΏΠ»ΠΎΡ‰Π°Π΄ΡŒ, ΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΌΡ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ, ~ 700 Π±Π°ΠΉΡ‚.

Π·Π°Ρ‚Π΅ΠΌ Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ-Ρ‚ΠΎ Ρ‚Π°ΠΊ:

<script type="text/template">
html`
  <span>${text}</span>
   {count > 0
     <span>occurrences ${count}</span>
   }
   </div>
`;
</script>

import { render } from "preact-render-to-string";

const template = document.createElement('template');
template.innerHTML = render(option); // option is the script that can be passed via slot or input

const fragment = temp.content;

Π² качСствС Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Ρ‹ ΠΌΡ‹ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ с Ρ‚Π΅Π³Π°ΠΌΠΈ https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals#Tagged_templates.

Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, это Π±Ρ‹Π»ΠΎ Π±Ρ‹ Π±ΠΎΠ»Π΅Π΅ минимальноС Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅.

Π― ΠΏΡ€ΠΎΠ²Π΅Π» Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ тСстированиС, ΠΈ, ΠΊ соТалСнию, Angular удаляСт всС Ρ‚Π΅Π³ΠΈ скриптов ΠΈΠ· шаблона. Волько ΠΌΠΎΠΈ 2 Ρ†Π΅Π½Ρ‚Π° Π·Π° объявлСниС скрипта Π²Π½ΡƒΡ‚Ρ€ΠΈ шаблона.

Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π΄Π°Π²Π°ΠΉΡ‚Π΅ Π²Ρ‹Π±Π΅Ρ€Π΅ΠΌ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄, основанный Π½Π° функциях, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π² Combobox Π±Ρ‹Π»ΠΎ ΠΏΠΎΠ»Π΅ Π²Π²ΠΎΠ΄Π°, Π³Π΄Π΅ Π²Ρ‹ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ шаблон.

МоТно Π»ΠΈ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ LitElements ΠΊΠ°ΠΊ свойство? ΠŸΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Ρ‚ΠΎΠ³Π΄Π° я ΠΏΠ΅Ρ€Π΅Π΄Π°Π» Π±Ρ‹ Ρ€Π΅Π½Π΄Π΅Ρ€ΠΈΠ½Π³ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΡŽ, Π³Π΄Π΅ Ρƒ Π½Π΅Π³ΠΎ Π΅ΡΡ‚ΡŒ всС возмоТности javascript Π² этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Ѐункция ΠΈΠΌΠ΅Π΅Ρ‚ ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ (Π²Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ для шаблона) ΠΈ Π΄ΠΎΠ»ΠΆΠ½Π° Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ строку.

Π Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ‚Π°ΠΊ:

_defaultTemplate<T>(display: string, value: T): string {
   return `<option>${display}</option>`
}

Как ΠΎΠ±ΡΡƒΠΆΠ΄Π°Π»ΠΎΡΡŒ Π² β„–1513, Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ Π²ΡΠΏΠ»Ρ‹Π²Π°ΡŽΡ‰Π΅Π΅ ΠΎΠΊΠ½ΠΎ.

Π― Π½Π΅ ΡƒΠ²Π΅Ρ€Π΅Π½, Ρ‡Ρ‚ΠΎ это подходящСС мСсто для обсуТдСния Π²Π²ΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ являСтся Ρ‡Π°ΡΡ‚ΡŒΡŽ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° combobox - Π½ΠΎ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π²Π²ΠΎΠ΄ растСт Π² фокусС, я Π΄ΡƒΠΌΠ°ΡŽ, ΠΈΠΌΠ΅Π΅Ρ‚ смысл Ρ€Π°ΡΡˆΠΈΡ€ΠΈΡ‚ΡŒ ΠΏΠΎΠ»Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° Π²Π²ΠΎΠ΄Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°Π½ΡΡ‚ΡŒ пространство, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ наибольшСС состояниС ΠΈΠΌΠ΅Π΅Ρ‚.

Π’ настоящСС врСмя ΡˆΠΈΡ€ΠΈΠ½Π° Π²Π²ΠΎΠ΄Π° увСличиваСтся Π½Π° 16 пиксСлСй послС фокусировки. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ я Π±Ρ‹ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠΈΠ», Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΌΠ΅Ρ‚ΠΊΠ° + Π²Π²ΠΎΠ΄ пСрСмСщался с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ отступа 8. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π»ΠΎ Π±Ρ‹, Ρ‡Ρ‚ΠΎ Ссли нСсколько элСмСнтов управлСния (Π²Π²ΠΎΠ΄, Π²Ρ‹Π±ΠΎΡ€, ...) находятся Π² Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠΌ ΠΌΠ°ΠΊΠ΅Ρ‚Π΅ Ρ„ΠΎΡ€ΠΌΡ‹, всС ярлыки Π»ΡŽΠ±Ρ‹Ρ… элСмСнтов управлСния Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹Ρ€ΠΎΠ²Π½Π΅Π½. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΈΠΌΠ΅Π΅Ρ‚ смысл ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ элСмСнт управлСния Ρ„ΠΎΡ€ΠΌΠΎΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ заботится ΠΎΠ± ΡƒΠ½ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Π° для ΠΌΠ΅Ρ‚ΠΎΠΊ + Π²Ρ…ΠΎΠ΄ΠΎΠ².

Π― Ρ…ΠΎΡ‚Π΅Π» Π±Ρ‹ внСсти ΠΏΠΎΠΏΡ€Π°Π²ΠΊΠΈ Π² ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π΄ΠΎΠ±Π°Π²ΠΈΠ² Π½ΠΎΠ²Ρ‹ΠΉ Π²Π²ΠΎΠ΄ для Ρ€Π΅Π½Π΄Π΅Ρ€ΠΈΠ½Π³Π° ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅ΠΌΠΎΠΉ строки для Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° Π²Ρ‹Π±ΠΎΡ€Π°:

Π’Ρ…ΠΎΠ΄Ρ‹

| Имя | ΠŸΠ»Π°Π½ΠΈΡ€ΡƒΠ΅Ρ‚ΡΡ Π½Π° | Π’ΠΈΠΏ | По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ | ОписаниС |
| -------------- | ----------- | -------- | ------- | -------------------------------------------------- ------------------------------ |
| displayNameFn | MVP | (option: T) => string | (option) => `$ {option}` | Ѐункция, которая Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅ΠΌΡƒΡŽ строку (Π±Π΅Π· использования HTML) для Π·Π°Π΄Π°Π½Π½ΠΎΠΉ ΠΎΠΏΡ†ΠΈΠΈ. |

Π­Ρ‚ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ обСспСчило Π±Ρ‹ простоС Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹: # 1527

Π§Ρ‚ΠΎ-Ρ‚ΠΎ малСнькоС, Ρ‡Ρ‚ΠΎ я ΡΡ‡ΠΈΡ‚Π°ΡŽ Π²Π°ΠΆΠ½Ρ‹ΠΌ: Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ DtCombobox ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ value качСствС ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅ΠΌΠΎΠ³ΠΎ тСкста ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ для Β«Π²Ρ‹Π±Ρ€Π°Π½Π½Ρ‹Ρ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ²Β». Π― Π΄ΡƒΠΌΠ°ΡŽ, Ρ‡Ρ‚ΠΎ Π³ΠΎΡ€Π°Π·Π΄ΠΎ Ρ€Π°Π·ΡƒΠΌΠ½Π΅Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΡ†ΠΈΡŽ textContent .
1) textContent всСгда являСтся друТСствСнным ΠΊ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠΌΡƒ интСрфСйсу Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ ( value Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠ½ΠΎΠ³Π΄Π° являСтся друТСствСнным ΠΊ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠΌΡƒ интСрфСйсу Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ)
2) ИспользованиС textContent - это Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°ΡŽΡ‚ стандартныС select

ΠœΡ‹ Π·Π°ΠΊΡ€ΠΎΠ΅ΠΌ этот вопрос, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π²Π΅Π±-ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ - это Π½Π΅ Ρ‚ΠΎΡ‚ способ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Π² Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ, это связано со смСной ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ΠΎΠ² Π² ΠΊΠΎΠΌΠ°Π½Π΄Π΅.

Π‘Ρ‹Π»Π° Π»ΠΈ эта страница ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ?
0 / 5 - 0 Ρ€Π΅ΠΉΡ‚ΠΈΠ½Π³ΠΈ