@brandup/ui-textbox 1.0.43 → 1.0.44

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/README.md +27 -13
  2. package/package.json +4 -4
package/README.md CHANGED
@@ -54,17 +54,17 @@ textbox.on(CHANGE_EVENT, (data: ChangeEventData) => {
54
54
  | `data-allow-empty-strings` | Разрешает значение из одних пробелов |
55
55
  | `data-readonly` | Альтернативный способ задать режим только для чтения |
56
56
  | `data-format` | Включает форматирование текста (только для `type="text"`) |
57
- | `data-format-tools` | Состав инструментов форматирования через пробел (по умолчанию все): `bold italic strike underline` |
57
+ | `data-format-tools` | Состав инструментов форматирования через пробел (по умолчанию все): `bold italic strike underline spoiler code` |
58
58
  | `data-editor-actions` | Кнопки действий в панели через пробел (по умолчанию нет): `erase undo redo` |
59
+ | `data-blocks` | Типы блоков многострочного поля через пробел (по умолчанию все): `quote code`; пустое значение оставляет только обычный текст |
59
60
  | `data-format-storage` | Формат хранения значения: `html` (по умолчанию) или `markdown` |
60
- | `data-format-md-bold` | Markdown-маркер для жирного (по умолчанию `**`) |
61
- | `data-format-md-italic` | Markdown-маркер для курсива (по умолчанию `*`) |
62
- | `data-format-md-strike` | Markdown-маркер для зачёркивания (по умолчанию `~~`) |
63
- | `data-format-md-underline` | Markdown-маркер для подчёркивания (по умолчанию `++`) |
61
+ | `data-format-md-<tool>` | Markdown-маркер инструмента: `bold` `**`, `italic` — `_`, `strike` — `~`, `underline` — `__`, `spoiler` — `\|\|`, `code` — `` ` `` |
64
62
 
65
63
  ## Форматирование текста
66
64
 
67
- Атрибут `data-format` включает панель форматирования с инструментами: жирный, курсив, зачёркивание, подчёркивание. Панель всплывает над контролом, пока он в фокусе (класс состояния `focused`). Работает поверх существующего `contenteditable`-редактора, поэтому доступно только для текстового ввода (`type="text"` и `<textarea>`).
65
+ Атрибут `data-format` включает панель форматирования с инструментами: жирный, курсив, зачёркивание, подчёркивание, спойлер, моноширинный. Панель всплывает над контролом, пока он в фокусе (класс состояния `focused`). Работает поверх существующего `contenteditable`-редактора, поэтому доступно только для текстового ввода (`type="text"` и `<textarea>`).
66
+
67
+ Кнопка спойлера в панели временно скрыта (см. [`@brandup/ui-richeditor`](../brandup-ui-richeditor)): сам инструмент работает — значение разбирается, показывается и сохраняется.
68
68
 
69
69
  ```html
70
70
  <!-- все инструменты, хранение в HTML -->
@@ -82,21 +82,32 @@ textbox.on(CHANGE_EVENT, (data: ChangeEventData) => {
82
82
 
83
83
  ### Состав инструментов — `data-format-tools`
84
84
 
85
- Список через пробел из значений `bold`, `italic`, `strike`, `underline`. Неизвестные значения игнорируются. Если атрибут не задан — включаются все инструменты.
85
+ Список через пробел из значений `bold`, `italic`, `strike`, `underline`, `spoiler`, `code`. Неизвестные значения игнорируются. Если атрибут не задан — включаются все инструменты.
86
86
 
87
87
  ### Кнопки действий — `data-editor-actions`
88
88
 
89
- Список через пробел из значений `erase` (очистить форматирование), `undo` (отменить), `redo` (повторить). В отличие от инструментов, действия подключаются явно: без атрибута кнопок действий нет. Они добавляются в панель после инструментов форматирования, отделяются разделителем и блокируются, когда действие недоступно (нечего отменять или очищать).
89
+ Список через пробел из значений `erase` (очистить форматирование), `undo` (отменить), `redo` (повторить). В отличие от инструментов, действия подключаются явно: без атрибута кнопок действий нет. Они добавляются в панель после инструментов форматирования, в один ряд с ними — всё это правка оформления, — и блокируются, когда действие недоступно (нечего отменять или очищать).
90
90
 
91
91
  `erase` снимает все форматы с выделения, а без выделения — со слова под кареткой. Чтобы очистить всё поле, выделите текст целиком (`Ctrl+A`) и нажмите кнопку.
92
92
 
93
+ ### Блоки — `data-blocks`
94
+
95
+ В многострочном поле (`<textarea>`) верхний уровень состоит из блоков. Обычный текст доступен всегда, цитата (`quote`) и блок кода (`code`) — тоже; набор ограничивают списком через пробел:
96
+
97
+ ```html
98
+ <textarea data-content-script="textbox" data-format data-blocks="quote"></textarea>
99
+ ```
100
+
101
+ **Enter** внутри блока заканчивает его, **Shift+Enter** переносит строку внутри, **Backspace** в начале блока возвращает обычный текст. Разбор, хранение и правку блоков описывает [`@brandup/ui-richeditor`](../brandup-ui-richeditor).
102
+
93
103
  ### Применение формата
94
104
 
95
105
  - Формат — **переключатель** (toggle): повторное применение к уже отформатированному тексту снимает его.
96
106
  - Форматирование применяется **к слову целиком**: если курсор стоит внутри слова без выделения или выделена лишь его часть — формат охватывает всё слово. При выделении части нескольких слов каждая граница доводится до целого слова. Исходное выделение/каретка после применения сохраняются (слово не выделяется автоматически).
97
107
  - **Режим набора**: если под кареткой нет слова (курсор между пробелами или поле пустое), кнопка/хоткей не форматируют текст, а включают «ожидающий» формат — он подсветится активным и применится к следующему введённому тексту. Режим сбрасывается при перемещении каретки, клике или потере фокуса.
98
108
  - Кнопка инструмента подсвечивается (`active`), когда выделение целиком отформатировано этим инструментом или активен режим набора.
99
- - Реализация работает на стандартном Selection/Range API без устаревшего `document.execCommand`, поэтому разметка всегда семантическая (`<b>`, `<i>`, `<s>`, `<u>`) и предсказуема между браузерами.
109
+ - Внутри моноширинного разметки нет: значение берёт оттуда голый текст, поэтому остальные инструменты там недоступны, а попавшее внутрь форматирование снимается.
110
+ - Реализация работает на стандартном Selection/Range API — без устаревшего `document.execCommand`, поэтому разметка всегда семантическая (`<b>`, `<i>`, `<s>`, `<u>`, `<spoiler>`, `<code>`) и предсказуема между браузерами.
100
111
 
101
112
  ### Хоткеи
102
113
 
@@ -108,8 +119,8 @@ textbox.on(CHANGE_EVENT, (data: ChangeEventData) => {
108
119
 
109
120
  | Значение | Хранение | Поддерживаемые теги/маркеры |
110
121
  | --- | --- | --- |
111
- | `html` (по умолчанию) | Санитизированный HTML | `<b>`, `<i>`, `<s>`, `<u>`, переводы строк через `<br>` |
112
- | `markdown` | Лёгкая разметка | `**жирный**`, `*курсив*`, `~~зачёркнутый~~`, `++подчёркнутый++` |
122
+ | `html` (по умолчанию) | Санитизированный HTML | `<b>`, `<i>`, `<s>`, `<u>`, `<spoiler>`, `<code>`, переводы строк через `<br>` |
123
+ | `markdown` | Лёгкая разметка | `**жирный**`, `_курсив_`, `~зачёркнутый~`, `__подчёркнутый__`, `\|\|спойлер\|\|`, `` `моноширинный` `` |
113
124
 
114
125
  Маркеры для каждого инструмента настраиваются атрибутами `data-format-md-<tool>` (актуально только при `data-format-storage="markdown"`):
115
126
 
@@ -123,9 +134,11 @@ textbox.on(CHANGE_EVENT, (data: ChangeEventData) => {
123
134
  ></textarea>
124
135
  ```
125
136
 
126
- При разборе маркеры применяются по убыванию длины, поэтому более длинный маркер (`__`) корректно срабатывает раньше короткого-префикса (`_`). Маркеры разных инструментов должны различаться.
137
+ При разборе маркеры применяются по убыванию длины, поэтому более длинный маркер (`__`) срабатывает раньше короткого-префикса (`_`). Маркеры разных инструментов должны различаться.
138
+
139
+ Разметку чужих диалектов редактор понимает наравне со своей и возвращает в значение такой же, какой она пришла: `*жирный*` из WhatsApp остаётся `*жирный*`, а настроенный маркер ставится только на то, что отформатировали в поле.
127
140
 
128
- > Markdown-режим не имеет стандартного маркера для подчёркивания — по умолчанию используется `++текст++`. Глубоко вложенные комбинации форматов (например, жирный внутри курсива) гарантированно сохраняются только в режиме `html`.
141
+ > Глубоко вложенные комбинации форматов (например, жирный внутри курсива) гарантированно сохраняются только в режиме `html`.
129
142
 
130
143
  ## API
131
144
 
@@ -154,6 +167,7 @@ textbox.on(CHANGE_EVENT, (data: ChangeEventData) => {
154
167
  | `formatStorage` | `FormatStorage` | Формат хранения: `"html"` \| `"markdown"` |
155
168
  | `formatTools` | `FormatTool[]` | Включённые инструменты форматирования |
156
169
  | `formatMarkers` | `FormatMarkers` | Markdown-маркеры по инструментам (с учётом переопределений) |
170
+ | `editor` | `RichEditor` | Встроенный редактор: выделение, вставка текста, блоки |
157
171
 
158
172
  ### Событие textbox-change
159
173
 
package/package.json CHANGED
@@ -24,15 +24,15 @@
24
24
  "email": "it@brandup.online"
25
25
  },
26
26
  "license": "Apache-2.0",
27
- "version": "1.0.43",
27
+ "version": "1.0.44",
28
28
  "main": "source/index.ts",
29
29
  "types": "source/index.ts",
30
30
  "dependencies": {
31
31
  "@brandup/ui": "^2.0.7",
32
32
  "@brandup/ui-helpers": "^2.0.7",
33
- "@brandup/ui-input": "^1.0.43",
34
- "@brandup/ui-kit": "^1.0.43",
35
- "@brandup/ui-richeditor": "^1.0.43"
33
+ "@brandup/ui-input": "^1.0.44",
34
+ "@brandup/ui-kit": "^1.0.44",
35
+ "@brandup/ui-richeditor": "^1.0.44"
36
36
  },
37
37
  "files": [
38
38
  "source",