@seliseblocks/mailcraft 0.1.0
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.
- package/DOCS.md +557 -0
- package/LICENSE +21 -0
- package/README.md +126 -0
- package/dist/mailcraft-editor.bundle.js +519 -0
- package/dist/mailcraft-editor.bundle.js.map +7 -0
- package/examples/templates/activate-your-account.html +54 -0
- package/examples/templates/back-in-stock.html +63 -0
- package/examples/templates/cart-left-behind.html +74 -0
- package/examples/templates/community-giveaway.html +81 -0
- package/examples/templates/frontend-futures-invite.html +69 -0
- package/examples/templates/give-25-get-25.html +69 -0
- package/examples/templates/invoice-paid.html +77 -0
- package/examples/templates/meet-nova-launch.html +69 -0
- package/examples/templates/mega-weekend-sale.html +57 -0
- package/examples/templates/order-confirmed.html +80 -0
- package/examples/templates/rate-your-headphones.html +71 -0
- package/examples/templates/reset-your-password.html +54 -0
- package/examples/templates/thankyou-promo-code.html +68 -0
- package/examples/templates/the-sunday-brief.html +47 -0
- package/examples/templates/welcome-to-your-workspace.html +62 -0
- package/examples/templates/your-order-shipped.html +74 -0
- package/examples/templates/your-password-was-changed.html +58 -0
- package/examples/templates/your-signin-code.html +58 -0
- package/examples/vanilla.html +1574 -0
- package/package.json +66 -0
- package/src/core/accent.js +194 -0
- package/src/core/assets.js +15 -0
- package/src/core/binder.js +119 -0
- package/src/core/blocks.js +256 -0
- package/src/core/css-cascade.js +117 -0
- package/src/core/editor-core.js +1492 -0
- package/src/core/export.js +58 -0
- package/src/core/footer.js +73 -0
- package/src/core/i18n/ar.js +177 -0
- package/src/core/i18n/bg.js +152 -0
- package/src/core/i18n/bn.js +176 -0
- package/src/core/i18n/ca.js +152 -0
- package/src/core/i18n/cs.js +152 -0
- package/src/core/i18n/da.js +152 -0
- package/src/core/i18n/de-CH.js +152 -0
- package/src/core/i18n/de.js +152 -0
- package/src/core/i18n/dz.js +179 -0
- package/src/core/i18n/el.js +152 -0
- package/src/core/i18n/en.js +269 -0
- package/src/core/i18n/es.js +152 -0
- package/src/core/i18n/et.js +152 -0
- package/src/core/i18n/fi.js +152 -0
- package/src/core/i18n/fr.js +152 -0
- package/src/core/i18n/hr.js +152 -0
- package/src/core/i18n/hu.js +152 -0
- package/src/core/i18n/index.js +83 -0
- package/src/core/i18n/it.js +152 -0
- package/src/core/i18n/lt.js +152 -0
- package/src/core/i18n/lv.js +152 -0
- package/src/core/i18n/nb.js +152 -0
- package/src/core/i18n/nl.js +152 -0
- package/src/core/i18n/pl.js +152 -0
- package/src/core/i18n/pt.js +152 -0
- package/src/core/i18n/ro.js +152 -0
- package/src/core/i18n/ru.js +152 -0
- package/src/core/i18n/sk.js +152 -0
- package/src/core/i18n/sl.js +152 -0
- package/src/core/i18n/sv.js +152 -0
- package/src/core/i18n/tables.js +50 -0
- package/src/core/i18n/tr.js +152 -0
- package/src/core/i18n/uk.js +152 -0
- package/src/core/icons.js +235 -0
- package/src/core/ids.js +1 -0
- package/src/core/import-html.js +959 -0
- package/src/core/layout-style.js +115 -0
- package/src/core/parse.js +10 -0
- package/src/core/placeholder.js +15 -0
- package/src/core/sanitize.js +141 -0
- package/src/core/storage-limits.js +184 -0
- package/src/core/storage.js +85 -0
- package/src/core/theme.js +1 -0
- package/src/core/toolbar.js +67 -0
- package/src/core/variables.js +11 -0
- package/src/create-editor.js +109 -0
- package/src/index.js +9 -0
- package/src/mailcraft-editor.js +1862 -0
- package/src/render/block-body.js +295 -0
- package/src/render/canvas.js +284 -0
- package/src/render/fields.js +609 -0
- package/src/render/focus-preserve.js +158 -0
- package/src/render/rte.js +212 -0
- package/src/render/screenshot.js +132 -0
- package/src/render/story.js +415 -0
- package/src/render/style.js +452 -0
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
/** Ukrainian (Українська) — `uk`. AI-drafted, not reviewed by a native speaker. Correctable one key at a time via `.messages` overrides. */
|
|
2
|
+
export const UK = {
|
|
3
|
+
'action.undoHint': 'Скасувати — ⌘Z',
|
|
4
|
+
'action.redoHint': 'Повторити — ⌘⇧Z',
|
|
5
|
+
'action.chromeToDark': 'Темна',
|
|
6
|
+
'action.chromeToLight': 'Світла',
|
|
7
|
+
'action.chromeHint': 'Тема редактора світла / темна',
|
|
8
|
+
'action.aiCopy': 'Текст',
|
|
9
|
+
'action.aiCopyHint': 'Скласти текст за допомогою ШІ',
|
|
10
|
+
'action.code': 'Код',
|
|
11
|
+
'action.codeHint': 'Редагувати вихідний HTML із живим переглядом',
|
|
12
|
+
'action.preview': 'Перегляд',
|
|
13
|
+
'action.export': 'Експорт',
|
|
14
|
+
'device.desktop': 'Комп’ютер',
|
|
15
|
+
'device.desktopHint': 'Ширина для комп’ютера',
|
|
16
|
+
'device.mobile': 'Телефон',
|
|
17
|
+
'device.mobileHint': 'Ширина для телефона',
|
|
18
|
+
'device.dark': 'Темна',
|
|
19
|
+
'device.darkHint': 'Темний режим вхідних',
|
|
20
|
+
'status.autosaveOn': 'автозбереження увімкнено',
|
|
21
|
+
'status.saved': 'збережено {time}',
|
|
22
|
+
'status.saveFailed': 'не збережено — сховище заповнено',
|
|
23
|
+
'canvas.meta': '{rows} рядків · {blocks} блоків · {width}px',
|
|
24
|
+
'tab.design': 'Стиль',
|
|
25
|
+
'tab.designHint': 'Оформити виділене',
|
|
26
|
+
'tab.blocks': 'Блоки',
|
|
27
|
+
'tab.blocksHint': 'Блоки вмісту та змінні',
|
|
28
|
+
'tab.rows': 'Секції',
|
|
29
|
+
'tab.rowsHint': 'Макети секцій і модель полотна',
|
|
30
|
+
'tab.files': 'Файли',
|
|
31
|
+
'tab.filesHint': 'Бібліотека файлів',
|
|
32
|
+
'tab.layers': 'Структура',
|
|
33
|
+
'tab.layersHint': 'Структура документа',
|
|
34
|
+
'tab.theme': 'Тема',
|
|
35
|
+
'tab.themeHint': 'Глобальні стилі',
|
|
36
|
+
'tab.data': 'Змін.',
|
|
37
|
+
'tab.dataHint': 'Змінні, надані вашим кодом',
|
|
38
|
+
'inspector.blockProperties': 'Властивості блока',
|
|
39
|
+
'inspector.sectionProperties': 'Властивості секції',
|
|
40
|
+
'inspector.title': 'Інспектор',
|
|
41
|
+
'inspector.sectionLabel': 'Секція',
|
|
42
|
+
'inspector.nothingSelected': 'Нічого не вибрано',
|
|
43
|
+
'action.duplicateHint': 'Дублювати — ⌘D',
|
|
44
|
+
'action.deleteHint': 'Видалити — ⌫',
|
|
45
|
+
'inspector.emptyBody':
|
|
46
|
+
'Виберіть рядок або блок на полотні, щоб оформити його тут. Перетягніть блоки з вкладки <strong style="color: var(--ed-text); font-weight: 600;">Блоки</strong>; двічі клацніть текст, щоб редагувати його на місці.',
|
|
47
|
+
'inspector.shortcuts': 'Гарячі клавіші',
|
|
48
|
+
'shortcut.undoRedo': '⌘Z / ⌘⇧Z — скасувати, повторити',
|
|
49
|
+
'shortcut.duplicate': '⌘D — дублювати виділене',
|
|
50
|
+
'shortcut.delete': '⌫ — видалити виділене',
|
|
51
|
+
'shortcut.export': '⌘E — експортувати HTML',
|
|
52
|
+
'shortcut.escape': 'ESC — зняти виділення, закрити',
|
|
53
|
+
'blocks.dragHint': 'Перетягніть на полотно',
|
|
54
|
+
'blocks.count': '{count} блоків',
|
|
55
|
+
'rows.sectionLayouts': 'Макети секцій',
|
|
56
|
+
'rows.customMarkup': 'Власна розмітка',
|
|
57
|
+
'rows.htmlRowHint': 'Перетягніть, щоб вставити, або клацніть, щоб додати — рядок на всю ширину, який ви заповнюєте вихідним HTML',
|
|
58
|
+
'rows.rawHtmlSection': 'Секція з вихідним HTML',
|
|
59
|
+
'rows.rawHtmlDesc': 'Секція на всю ширину, ваша власна розмітка, все ще перетягується',
|
|
60
|
+
'rows.canvasModel': 'Модель полотна',
|
|
61
|
+
'rows.modeRowBased': 'На основі рядків',
|
|
62
|
+
'rows.modeFreeStack': 'Вільний стек',
|
|
63
|
+
'rows.hintRows':
|
|
64
|
+
'На основі секцій: спочатку розмістіть макет, потім блоки в його колонках — кожна секція має власний фон, межу, налаштування flex або сітки.',
|
|
65
|
+
'rows.hintStack': 'Вільний стек: без макетів — кожен доданий блок стає власною секцією на всю ширину, укладеною по порядку.',
|
|
66
|
+
'files.libraryCount': 'Бібліотека — {count} файлів',
|
|
67
|
+
'files.openManager': 'Відкрити файловий менеджер',
|
|
68
|
+
'files.dragToCanvas': 'Перетягніть будь-який файл прямо на полотно, щоб розмістити його як блок зображення.',
|
|
69
|
+
'layers.structure': 'Структура',
|
|
70
|
+
'layers.sectionSingle': 'Секція',
|
|
71
|
+
'layers.sectionMulti': 'Секція · {count} кол.',
|
|
72
|
+
'layers.blockCount': '{count} бл.',
|
|
73
|
+
'theme.globalStyles': 'Глобальні стилі',
|
|
74
|
+
'vars.title': 'Змінні',
|
|
75
|
+
'vars.fromCode': '{count} з вашого коду',
|
|
76
|
+
'vars.declaredNote': 'Оголошені вашим застосунком — полотно завжди показує токен, ніколи значення.',
|
|
77
|
+
'vars.filterPlaceholder': 'Фільтр змінних…',
|
|
78
|
+
'vars.insertHint': 'Натисніть, щоб вставити у вибраний текст, заголовок або кнопку',
|
|
79
|
+
'vars.insert': 'вставити',
|
|
80
|
+
'vars.noMatch': 'Немає змінних, що відповідають цьому фільтру.',
|
|
81
|
+
'vars.noneDeclared': 'Ваш застосунок ще не оголосив жодних змінних.',
|
|
82
|
+
'vars.rteHint': 'Під час редагування тексту ви також можете вибрати змінну прямо з випадного списку вбудованої панелі інструментів.',
|
|
83
|
+
'modal.fileManager': 'Файловий менеджер',
|
|
84
|
+
'modal.assetsTitle': 'Файли',
|
|
85
|
+
'modal.replaceImage': 'Замінити зображення',
|
|
86
|
+
'library.searchPlaceholder': 'Пошук файлів…',
|
|
87
|
+
'action.upload': 'Завантажити',
|
|
88
|
+
'library.clickToPlace': 'Натисніть на файл, щоб розмістити · або перетягніть файл на полотно',
|
|
89
|
+
'library.clickToReplace': 'Натисніть на файл, щоб замінити вибране зображення',
|
|
90
|
+
'library.storageLabel': '{count} файлів · {size}',
|
|
91
|
+
'library.folders': 'Папки',
|
|
92
|
+
'library.dropHint': 'Перетягніть файли зображень сюди для завантаження — або скористайтеся кнопкою «Завантажити».',
|
|
93
|
+
'library.deleteFileHint': 'Видалити файл',
|
|
94
|
+
'library.del': 'ВИДАЛ',
|
|
95
|
+
'toast.assetDeleted': '{name} видалено',
|
|
96
|
+
'modal.export': 'Експорт',
|
|
97
|
+
'modal.exportTitle': 'HTML листа на основі таблиць',
|
|
98
|
+
'export.copy': 'Копіювати',
|
|
99
|
+
'export.copied': 'Скопійовано',
|
|
100
|
+
'action.download': 'Завантажити',
|
|
101
|
+
'export.meta': '{kb} КБ · таблиці + вбудовані стилі · ширини, безпечні для Outlook',
|
|
102
|
+
'modal.rawHtmlTitle': 'Вихідний HTML, живий перегляд',
|
|
103
|
+
'code.statusEdited': 'Перегляд коду — змінено — перегляд наживо, ще не застосовано',
|
|
104
|
+
'code.statusSynced': 'Перегляд коду — синхронізовано з полотном',
|
|
105
|
+
'action.reload': 'Оновити',
|
|
106
|
+
'action.reloadHint': 'Оновити джерело з полотна',
|
|
107
|
+
'action.applyToCanvas': 'Застосувати до полотна',
|
|
108
|
+
'action.applyToCanvasHint': 'Розібрати джерело назад у редаговані рядки',
|
|
109
|
+
'action.closeWithoutApplyingHint': 'Закрити без застосування',
|
|
110
|
+
'code.source': 'Джерело',
|
|
111
|
+
'code.livePreview': 'Живий перегляд',
|
|
112
|
+
'code.liveHtmlPreviewTitle': 'Живий перегляд HTML',
|
|
113
|
+
'code.applyNote':
|
|
114
|
+
'Застосування розбирає кожен рядок таблиці верхнього рівня в рядок полотна, який ви все ще можете вибирати, переупорядковувати та видаляти — розмітка, написана вручну, переживає цей процес.',
|
|
115
|
+
'code.meta': '{kb} КБ · {lines} рядків',
|
|
116
|
+
'toast.sourceReloaded': 'Джерело оновлено з полотна',
|
|
117
|
+
'toast.sourceAppliedOne': 'Джерело застосовано — 1 рядок на полотні',
|
|
118
|
+
'toast.sourceAppliedMany': 'Джерело застосовано — {rows} рядків на полотні',
|
|
119
|
+
'toast.parseError': 'Не вдалося розібрати цей HTML',
|
|
120
|
+
'modal.copyAssist': 'Помічник із текстом',
|
|
121
|
+
'modal.draftCopyTitle': 'Скласти текст для цієї кампанії',
|
|
122
|
+
'ai.goal': 'Мета',
|
|
123
|
+
'ai.tone': 'Тон',
|
|
124
|
+
'ai.briefLabel': 'Про що цей лист?',
|
|
125
|
+
'ai.briefPlaceholder': 'напр. Осіння колекція, 15% для підписників, безкоштовна доставка від 150$',
|
|
126
|
+
'ai.generate': 'Згенерувати текст',
|
|
127
|
+
'ai.writing': 'Пишемо…',
|
|
128
|
+
'ai.kindHeadline': 'Заголовок',
|
|
129
|
+
'ai.kindBody': 'Основний текст',
|
|
130
|
+
'ai.kindButton': 'Текст кнопки',
|
|
131
|
+
'ai.actionInsertHeading': 'Вставити як заголовок',
|
|
132
|
+
'ai.actionInsertText': 'Вставити як текстовий блок',
|
|
133
|
+
'ai.actionInsertButton': 'Вставити як кнопку',
|
|
134
|
+
'toast.headingAdded': 'Заголовок додано',
|
|
135
|
+
'toast.textBlockAdded': 'Текстовий блок додано',
|
|
136
|
+
'toast.buttonAdded': 'Кнопку додано',
|
|
137
|
+
'preview.kickerMobile': 'Перегляд — телефон 375px',
|
|
138
|
+
'preview.kickerDark': 'Перегляд — темні вхідні',
|
|
139
|
+
'preview.kickerDesktop': 'Перегляд — комп’ютер {width}px',
|
|
140
|
+
'action.close': 'Закрити',
|
|
141
|
+
'toast.duplicated': 'Продубльовано',
|
|
142
|
+
'toast.fileUploadedOne': 'Завантажено 1 файл',
|
|
143
|
+
'toast.fileUploadedMany': 'Завантажено файлів: {count}',
|
|
144
|
+
'toast.imageReplaced': 'Зображення замінено',
|
|
145
|
+
'toast.imageAdded': 'Зображення додано на полотно',
|
|
146
|
+
'toast.htmlCopied': 'HTML скопійовано в буфер обміну',
|
|
147
|
+
'toast.templateLoaded': '{name} завантажено',
|
|
148
|
+
'toast.snippetDefaultLabel': 'Фрагмент',
|
|
149
|
+
'toast.snippetInserted': '{name} вставлено',
|
|
150
|
+
'toast.snippetCopied': '{name} скопійовано — виберіть текстовий блок, щоб вставити',
|
|
151
|
+
};
|
|
152
|
+
|
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
/** Thin-stroke icon set (Lucide grammar, stroke 1.5), ported path-for-path from the original prototype. */
|
|
2
|
+
const ICONS = {
|
|
3
|
+
text: ['M4 6h16', 'M4 12h12', 'M4 18h9'],
|
|
4
|
+
image: [['rect', 3, 4, 18, 16], ['circle', 8.5, 9.5, 1.5], 'M3 17l5-5 4 4 3-3 6 6'],
|
|
5
|
+
folder: ['M3 7h7l2 2h9v10H3z', 'M3 7V5h7l2 2'],
|
|
6
|
+
button: [['rect', 3, 8, 18, 8], 'M8 12h8'],
|
|
7
|
+
divider: ['M3 12h18', 'M6 7h12', 'M6 17h12'],
|
|
8
|
+
spacer: ['M3 5h18', 'M3 19h18', 'M12 9v6', 'M9.5 11.5L12 9l2.5 2.5', 'M9.5 12.5L12 15l2.5-2.5'],
|
|
9
|
+
social: [['rect', 3, 9, 5, 6], ['rect', 9.5, 9, 5, 6], ['rect', 16, 9, 5, 6]],
|
|
10
|
+
video: [['rect', 3, 5, 18, 14], 'M10 9.5l5 2.5-5 2.5z'],
|
|
11
|
+
html: ['M9 8l-4 4 4 4', 'M15 8l4 4-4 4'],
|
|
12
|
+
product: [['rect', 3, 6, 18, 14], 'M3 11h18', 'M9 6v5'],
|
|
13
|
+
countdown: [['circle', 12, 13, 8], 'M12 9.5V13l2.5 1.5', 'M9 3h6'],
|
|
14
|
+
menu: [['rect', 3, 4, 18, 5], 'M6 14h5', 'M13 14h5', 'M6 18h12'],
|
|
15
|
+
grip: [['circle', 9, 7, 1], ['circle', 15, 7, 1], ['circle', 9, 12, 1], ['circle', 15, 12, 1], ['circle', 9, 17, 1], ['circle', 15, 17, 1]],
|
|
16
|
+
move: ['M12 3v18', 'M3 12h18', 'M9.5 5.5L12 3l2.5 2.5', 'M9.5 18.5L12 21l2.5-2.5', 'M5.5 9.5L3 12l2.5 2.5', 'M18.5 9.5L21 12l-2.5 2.5'],
|
|
17
|
+
sliders: ['M4 7h9', 'M19 7h1', ['circle', 16, 7, 2.2], 'M4 17h3', 'M13 17h7', ['circle', 10, 17, 2.2]],
|
|
18
|
+
footer: [['rect', 3, 4, 18, 16], 'M3 15h18', 'M7 19h6'],
|
|
19
|
+
up: ['M12 19V5', 'M6 11l6-6 6 6'],
|
|
20
|
+
down: ['M12 5v14', 'M6 13l6 6 6-6'],
|
|
21
|
+
copy: [['rect', 9, 9, 12, 12], 'M15 5H5a2 2 0 0 0-2 2v10'],
|
|
22
|
+
trash: ['M4 7h16', 'M9 7V5h6v2', 'M6 7l1 12h10l1-12'],
|
|
23
|
+
undo: ['M3 8h11a5 5 0 0 1 0 10H8', 'M7 4L3 8l4 4'],
|
|
24
|
+
redo: ['M21 8H10a5 5 0 0 0 0 10h6', 'M17 4l4 4-4 4'],
|
|
25
|
+
eye: ['M2 12s3.6-6 10-6 10 6 10 6-3.6 6-10 6-10-6-10-6z', ['circle', 12, 12, 3]],
|
|
26
|
+
monitor: [['rect', 3, 4, 18, 13], 'M8 21h8', 'M12 17v4'],
|
|
27
|
+
phone: [['rect', 7, 2, 10, 20], 'M10.5 5h3', 'M11.5 19h1'],
|
|
28
|
+
download: ['M12 4v11', 'M7.5 11L12 15.5 16.5 11', 'M4 20h16'],
|
|
29
|
+
upload: ['M12 20V9', 'M7.5 13.5L12 9l4.5 4.5', 'M4 4h16'],
|
|
30
|
+
moon: ['M20 14.5A8.5 8.5 0 1 1 9.5 4a7 7 0 0 0 10.5 10.5z'],
|
|
31
|
+
sun: [['circle', 12, 12, 4.2], 'M12 3v2', 'M12 19v2', 'M3 12h2', 'M19 12h2', 'M5.6 5.6l1.4 1.4', 'M17 17l1.4 1.4', 'M18.4 5.6L17 7', 'M7 17l-1.4 1.4'],
|
|
32
|
+
spark: ['M12 4l1.7 4.8L18.5 10.5l-4.8 1.7L12 17l-1.7-4.8L5.5 10.5l4.8-1.7z', 'M18 17l.8 2.2L21 20l-2.2.8L18 23l-.8-2.2L15 20l2.2-.8z'],
|
|
33
|
+
code: ['M8 7l-5 5 5 5', 'M16 7l5 5-5 5', 'M13 5l-2 14'],
|
|
34
|
+
bold: ['M7 5h6a3.5 3.5 0 0 1 0 7H7z', 'M7 12h7a3.5 3.5 0 0 1 0 7H7z'],
|
|
35
|
+
italic: ['M15 5h-4', 'M13 19H9', 'M14 5l-3 14'],
|
|
36
|
+
underline: ['M7 4v7a5 5 0 0 0 10 0V4', 'M6 20h12'],
|
|
37
|
+
strike: ['M4 12h16', 'M8 7a4 3 0 0 1 8 0', 'M8 16a4 3 0 0 0 8 0'],
|
|
38
|
+
link: ['M10 13a4 4 0 0 0 6 .5l2-2a4 4 0 0 0-5.5-5.5l-1 1', 'M14 11a4 4 0 0 0-6-.5l-2 2A4 4 0 0 0 11.5 18l1-1'],
|
|
39
|
+
list: ['M9 6h11', 'M9 12h11', 'M9 18h11', 'M4.5 6h.6', 'M4.5 12h.6', 'M4.5 18h.6'],
|
|
40
|
+
clear: ['M6 6l12 12', 'M18 6L6 18'],
|
|
41
|
+
tag: ['M4 8h4', 'M4 16h4', 'M20 8h-4', 'M20 16h-4', 'M10 5l4 14'],
|
|
42
|
+
play: ['M8 5.5l10 6.5-10 6.5z'],
|
|
43
|
+
pause: ['M9.5 5v14', 'M14.5 5v14'],
|
|
44
|
+
refresh: ['M20 11a8 8 0 1 0-2.3 6.3', 'M20 5v6h-6'],
|
|
45
|
+
check: ['M4 12.5l5 5L20 7'],
|
|
46
|
+
plus: ['M12 5v14', 'M5 12h14'],
|
|
47
|
+
minus: ['M5 12h14'],
|
|
48
|
+
superscript: ['M4 18 9 6l5 12', 'M6 14h6', 'M16 5h4l-4 5h4'],
|
|
49
|
+
subscript: ['M4 16 9 4l5 12', 'M6 12h6', 'M16 15h4l-4 5h4'],
|
|
50
|
+
typeColor: ['M5 18 11 5h2l6 13', 'M7.5 13h9', 'M4 21h16'],
|
|
51
|
+
highlighter: ['M7 15 16 6l3 3-9 9z', 'M5 17l2 2', 'M4 21h16'],
|
|
52
|
+
eraser: ['M4 16 13 7l5 5-8 8H6z', 'M12 20h8'],
|
|
53
|
+
formatClear: ['M5 18 11 5h2l4 9', 'M7.5 13h7', 'M16 17l5 5', 'M21 17l-5 5'],
|
|
54
|
+
chevronDown: ['M7 9l5 5 5-5'],
|
|
55
|
+
x: ['M4 4l16 16', 'M20 4L4 20'],
|
|
56
|
+
instagram: [['rect', 3, 3, 18, 18], ['circle', 12, 12, 4], ['circle', 17, 7, 0.9]],
|
|
57
|
+
linkedin: [['rect', 3, 3, 18, 18], 'M8 10v7', ['circle', 8, 7.2, 0.9], 'M12 17v-4a2.5 2.5 0 0 1 5 0v4'],
|
|
58
|
+
facebook: [['rect', 3, 3, 18, 18], 'M15 8h-1.5A2.5 2.5 0 0 0 11 10.5V21', 'M8.5 13h5'],
|
|
59
|
+
youtube: [['rect', 2.5, 6, 19, 12], 'M11 10l4 2-4 2z'],
|
|
60
|
+
mail: [['rect', 3, 5, 18, 14], 'M3 7l9 6 9-6'],
|
|
61
|
+
mailSpark: [['rect', 3, 6, 16, 12], 'M4 8l7 5 7-5', 'M21 3v4', 'M19 5h4'],
|
|
62
|
+
globe: [['circle', 12, 12, 9], 'M3 12h18', 'M12 3a15 15 0 0 1 0 18', 'M12 3a15 15 0 0 0 0 18'],
|
|
63
|
+
heading: ['M6 5v14', 'M18 5v14', 'M6 12h12'],
|
|
64
|
+
quote: [['rect', 4, 6, 5, 5], ['rect', 15, 6, 5, 5], 'M9 11c0 4-1.7 5.7-5 6.4', 'M20 11c0 4-1.7 5.7-5 6.4'],
|
|
65
|
+
table: [['rect', 3, 4, 18, 16], 'M3 9h18', 'M3 14.5h18', 'M9 9v11', 'M15 9v11'],
|
|
66
|
+
card: [['rect', 3, 4, 18, 16], 'M3 12h18', 'M7 16h8'],
|
|
67
|
+
hero: [['rect', 3, 4, 18, 16], 'M6 11h12', 'M6 15h6', ['rect', 14.5, 13.5, 4, 3]],
|
|
68
|
+
stats: ['M5 19v-7', 'M12 19V5', 'M19 19v-4', 'M3 19h18'],
|
|
69
|
+
gallery: [['rect', 3, 4, 7.5, 7.5], ['rect', 13.5, 4, 7.5, 7.5], ['rect', 3, 12.5, 7.5, 7.5], ['rect', 13.5, 12.5, 7.5, 7.5]],
|
|
70
|
+
embed: [['rect', 2.5, 5, 19, 14], 'M2.5 9h19', 'M10.5 11.5l3.5 2-3.5 2z'],
|
|
71
|
+
css: ['M5 4h14l-1.5 15L12 21l-5.5-2z', 'M8.5 9h7', 'M9 13h5'],
|
|
72
|
+
codeblock: [['rect', 3, 4, 18, 16], 'M9.5 10l-2 2 2 2', 'M14.5 10l2 2-2 2'],
|
|
73
|
+
data: ['M4 6c0-1.7 3.6-3 8-3s8 1.3 8 3-3.6 3-8 3-8-1.3-8-3z', 'M4 6v12c0 1.7 3.6 3 8 3s8-1.3 8-3V6', 'M4 12c0 1.7 3.6 3 8 3s8-1.3 8-3'],
|
|
74
|
+
box: [['rect', 3, 4, 18, 16], ['rect', 7, 8, 10, 8]],
|
|
75
|
+
grid: [['rect', 3, 5, 8, 14], ['rect', 13, 5, 8, 14]],
|
|
76
|
+
svg: ['M4 19L10 5l4 9 2-3 4 8z', ['circle', 7.5, 7.5, 2]],
|
|
77
|
+
form: [['rect', 3, 5, 18, 5], ['rect', 3, 13, 11, 5], 'M17 15.5h4'],
|
|
78
|
+
script: ['M9 5H6a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h3', 'M15 5h3a1 1 0 0 1 1 1v12a1 1 0 0 1-1 1h-3', 'M13 8l-2 8'],
|
|
79
|
+
anchor: [['circle', 12, 6, 2.5], 'M12 8.5V20', 'M5 14a7 7 0 0 0 14 0'],
|
|
80
|
+
paint: ['M5 11V6a1 1 0 0 1 1-1h11a1 1 0 0 1 1 1v5H5z', 'M5 11h13', 'M11 11v4', 'M9 15h4v5H9z'],
|
|
81
|
+
alignLeft: ['M4 6h16', 'M4 12h10', 'M4 18h13'],
|
|
82
|
+
alignCenter: ['M4 6h16', 'M7 12h10', 'M6 18h12'],
|
|
83
|
+
alignRight: ['M4 6h16', 'M10 12h10', 'M7 18h13'],
|
|
84
|
+
alignJustify: ['M4 6h16', 'M4 12h16', 'M4 18h16'],
|
|
85
|
+
listOrdered: ['M9 6h11', 'M9 12h11', 'M9 18h11', 'M4 5.5h1.5V9', 'M4 15h2v3H4'],
|
|
86
|
+
indent: ['M11 6h9', 'M11 12h9', 'M11 18h9', 'M4 9l3 3-3 3'],
|
|
87
|
+
outdent: ['M11 6h9', 'M11 12h9', 'M11 18h9', 'M7 9l-3 3 3 3'],
|
|
88
|
+
unlink: ['M10 13a4 4 0 0 0 4.6 1.4', 'M14 11a4 4 0 0 0-4.6-1.4', 'M4 4l16 16'],
|
|
89
|
+
inlineCode: ['M8.5 9l-3 3 3 3', 'M15.5 9l3 3-3 3'],
|
|
90
|
+
tiktok: [['circle', 9, 16, 3], 'M12 16V4', 'M12 6c1.5 1.5 3 2 5 2v2'],
|
|
91
|
+
pinterest: [['circle', 12, 12, 9], 'M9 16c1-2 1.5-4 2-7a2.2 2.2 0 1 1 4.4 0.3c-0.2 2-1.4 3.7-3.4 3.7'],
|
|
92
|
+
snapchat: ['M12 4c3 0 5 2.2 5 5.2 0 1 0.2 2 0.8 2.6 0.6 0.6 1.2 0.8 1.2 1.4 0 0.8-1 1-1.8 1.2-0.2 1 0.4 1.6 1.4 1.8-0.2 0.8-1.4 1-2.2 1-0.6 1.6-2 2.6-4.4 2.6s-3.8-1-4.4-2.6c-0.8 0-2-0.2-2.2-1 1-0.2 1.6-0.8 1.4-1.8-0.8-0.2-1.8-0.4-1.8-1.2 0-0.6 0.6-0.8 1.2-1.4 0.6-0.6 0.8-1.6 0.8-2.6C7 6.2 9 4 12 4z'],
|
|
93
|
+
whatsapp: [['circle', 12, 12, 9], 'M8.5 15.5l0.8-2.8a5 5 0 1 1 2.9 2.6z'],
|
|
94
|
+
threads: ['M8 8c-2 1-3 3-3 5.5 0 3.5 2.5 5.5 6 5.5 3 0 5-1.5 5-4 0-1.8-1.2-3-3-3.3 1.3-0.3 2.2-1.2 2.2-2.5 0-1.8-1.7-3-4-3-2 0-3.3 0.8-4 2'],
|
|
95
|
+
discord: ['M7 8c3-1.3 7-1.3 10 0', 'M6 9c-1.5 3-2 6-1.5 8.5 1.8 1.3 3.5 2 3.5 2l1-1.7c-0.6-0.2-1.2-0.5-1.7-0.8', 'M18 9c1.5 3 2 6 1.5 8.5-1.8 1.3-3.5 2-3.5 2l-1-1.7c0.6-0.2 1.2-0.5 1.7-0.8', ['circle', 9, 13, 1.1], ['circle', 15, 13, 1.1]],
|
|
96
|
+
telegram: [['circle', 12, 12, 9], 'M7.5 12.3l9-4.3-3 9-2.3-3.2-2 1.7-0.2-2.7z'],
|
|
97
|
+
reddit: [['circle', 12, 14, 6], 'M12 8V5', ['circle', 12, 4.3, 0.9], ['circle', 9.5, 14, 1], ['circle', 14.5, 14, 1], 'M9 17c1 1 5 1 6 0'],
|
|
98
|
+
spotify: [['circle', 12, 12, 9], 'M7.5 10c3-1 6-1 9 0', 'M7.8 13c2.5-0.8 5-0.8 7.5 0', 'M8.2 16c2-0.6 4-0.6 6 0'],
|
|
99
|
+
behance: ['M4 7h6a2.5 2.5 0 0 1 0 5H4z', 'M4 12h6.5a2.7 2.7 0 0 1 0 5.4H4z', 'M14 12a4 4 0 0 1 8 0', 'M14 14h8', 'M15.5 9h5'],
|
|
100
|
+
dribbble: [['circle', 12, 12, 9], 'M4 10c4 1.2 12 1.2 16.5 0', 'M8.5 4.5c2.5 3 5 8.5 5 14.5', 'M9 20c2-4 7-6 11.5-5'],
|
|
101
|
+
};
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
* Official brand glyphs (Simple Icons, CC0), rendered as filled paths --
|
|
105
|
+
* the hand-drawn stroke approximations they replace read as amateur at
|
|
106
|
+
* social-strip sizes. Kept separate from ICONS because these render
|
|
107
|
+
* fill-based (icon() is a stroke builder) and because the key 'x' must not
|
|
108
|
+
* shadow the ✕ close icon; resolve through brandIcon(), never icon().
|
|
109
|
+
*/
|
|
110
|
+
const BRAND_GLYPHS = {
|
|
111
|
+
behance: 'M16.969 16.927a2.561 2.561 0 0 0 1.901.677 2.501 2.501 0 0 0 1.531-.475c.362-.235.636-.584.779-.99h2.585a5.091 5.091 0 0 1-1.9 2.896 5.292 5.292 0 0 1-3.091.88 5.839 5.839 0 0 1-2.284-.433 4.871 4.871 0 0 1-1.723-1.211 5.657 5.657 0 0 1-1.08-1.874 7.057 7.057 0 0 1-.383-2.393c-.005-.8.129-1.595.396-2.349a5.313 5.313 0 0 1 5.088-3.604 4.87 4.87 0 0 1 2.376.563c.661.362 1.231.87 1.668 1.485a6.2 6.2 0 0 1 .943 2.133c.194.821.263 1.666.205 2.508h-7.699c-.063.79.184 1.574.688 2.187ZM6.947 4.084a8.065 8.065 0 0 1 1.928.198 4.29 4.29 0 0 1 1.49.638c.418.303.748.711.958 1.182.241.579.357 1.203.341 1.83a3.506 3.506 0 0 1-.506 1.961 3.726 3.726 0 0 1-1.503 1.287 3.588 3.588 0 0 1 2.027 1.437c.464.747.697 1.615.67 2.494a4.593 4.593 0 0 1-.423 2.032 3.945 3.945 0 0 1-1.163 1.413 5.114 5.114 0 0 1-1.683.807 7.135 7.135 0 0 1-1.928.259H0V4.084h6.947Zm-.235 12.9c.308.004.616-.029.916-.099a2.18 2.18 0 0 0 .766-.332c.228-.158.411-.371.534-.619.142-.317.208-.663.191-1.009a2.08 2.08 0 0 0-.642-1.715 2.618 2.618 0 0 0-1.696-.505h-3.54v4.279h3.471Zm13.635-5.967a2.13 2.13 0 0 0-1.654-.619 2.336 2.336 0 0 0-1.163.259 2.474 2.474 0 0 0-.738.62 2.359 2.359 0 0 0-.396.792c-.074.239-.12.485-.137.734h4.769a3.239 3.239 0 0 0-.679-1.785l-.002-.001Zm-13.813-.648a2.254 2.254 0 0 0 1.423-.433c.399-.355.607-.88.56-1.413a1.916 1.916 0 0 0-.178-.891 1.298 1.298 0 0 0-.495-.533 1.851 1.851 0 0 0-.711-.274 3.966 3.966 0 0 0-.835-.073H3.241v3.631h3.293v-.014ZM21.62 5.122h-5.976v1.527h5.976V5.122Z',
|
|
112
|
+
discord: 'M20.317 4.3698a19.7913 19.7913 0 00-4.8851-1.5152.0741.0741 0 00-.0785.0371c-.211.3753-.4447.8648-.6083 1.2495-1.8447-.2762-3.68-.2762-5.4868 0-.1636-.3933-.4058-.8742-.6177-1.2495a.077.077 0 00-.0785-.037 19.7363 19.7363 0 00-4.8852 1.515.0699.0699 0 00-.0321.0277C.5334 9.0458-.319 13.5799.0992 18.0578a.0824.0824 0 00.0312.0561c2.0528 1.5076 4.0413 2.4228 5.9929 3.0294a.0777.0777 0 00.0842-.0276c.4616-.6304.8731-1.2952 1.226-1.9942a.076.076 0 00-.0416-.1057c-.6528-.2476-1.2743-.5495-1.8722-.8923a.077.077 0 01-.0076-.1277c.1258-.0943.2517-.1923.3718-.2914a.0743.0743 0 01.0776-.0105c3.9278 1.7933 8.18 1.7933 12.0614 0a.0739.0739 0 01.0785.0095c.1202.099.246.1981.3728.2924a.077.077 0 01-.0066.1276 12.2986 12.2986 0 01-1.873.8914.0766.0766 0 00-.0407.1067c.3604.698.7719 1.3628 1.225 1.9932a.076.076 0 00.0842.0286c1.961-.6067 3.9495-1.5219 6.0023-3.0294a.077.077 0 00.0313-.0552c.5004-5.177-.8382-9.6739-3.5485-13.6604a.061.061 0 00-.0312-.0286zM8.02 15.3312c-1.1825 0-2.1569-1.0857-2.1569-2.419 0-1.3332.9555-2.4189 2.157-2.4189 1.2108 0 2.1757 1.0952 2.1568 2.419 0 1.3332-.9555 2.4189-2.1569 2.4189zm7.9748 0c-1.1825 0-2.1569-1.0857-2.1569-2.419 0-1.3332.9554-2.4189 2.1569-2.4189 1.2108 0 2.1757 1.0952 2.1568 2.419 0 1.3332-.946 2.4189-2.1568 2.4189Z',
|
|
113
|
+
dribbble: 'M12 24C5.385 24 0 18.615 0 12S5.385 0 12 0s12 5.385 12 12-5.385 12-12 12zm10.12-10.358c-.35-.11-3.17-.953-6.384-.438 1.34 3.684 1.887 6.684 1.992 7.308 2.3-1.555 3.936-4.02 4.395-6.87zm-6.115 7.808c-.153-.9-.75-4.032-2.19-7.77l-.066.02c-5.79 2.015-7.86 6.025-8.04 6.4 1.73 1.358 3.92 2.166 6.29 2.166 1.42 0 2.77-.29 4-.814zm-11.62-2.58c.232-.4 3.045-5.055 8.332-6.765.135-.045.27-.084.405-.12-.26-.585-.54-1.167-.832-1.74C7.17 11.775 2.206 11.71 1.756 11.7l-.004.312c0 2.633.998 5.037 2.634 6.855zm-2.42-8.955c.46.008 4.683.026 9.477-1.248-1.698-3.018-3.53-5.558-3.8-5.928-2.868 1.35-5.01 3.99-5.676 7.17zM9.6 2.052c.282.38 2.145 2.914 3.822 6 3.645-1.365 5.19-3.44 5.373-3.702-1.81-1.61-4.19-2.586-6.795-2.586-.825 0-1.63.1-2.4.285zm10.335 3.483c-.218.29-1.935 2.493-5.724 4.04.24.49.47.985.68 1.486.08.18.15.36.22.53 3.41-.43 6.8.26 7.14.33-.02-2.42-.88-4.64-2.31-6.38z',
|
|
114
|
+
facebook: 'M9.101 23.691v-7.98H6.627v-3.667h2.474v-1.58c0-4.085 1.848-5.978 5.858-5.978.401 0 .955.042 1.468.103a8.68 8.68 0 0 1 1.141.195v3.325a8.623 8.623 0 0 0-.653-.036 26.805 26.805 0 0 0-.733-.009c-.707 0-1.259.096-1.675.309a1.686 1.686 0 0 0-.679.622c-.258.42-.374.995-.374 1.752v1.297h3.919l-.386 2.103-.287 1.564h-3.246v8.245C19.396 23.238 24 18.179 24 12.044c0-6.627-5.373-12-12-12s-12 5.373-12 12c0 5.628 3.874 10.35 9.101 11.647Z',
|
|
115
|
+
instagram: 'M7.0301.084c-1.2768.0602-2.1487.264-2.911.5634-.7888.3075-1.4575.72-2.1228 1.3877-.6652.6677-1.075 1.3368-1.3802 2.127-.2954.7638-.4956 1.6365-.552 2.914-.0564 1.2775-.0689 1.6882-.0626 4.947.0062 3.2586.0206 3.6671.0825 4.9473.061 1.2765.264 2.1482.5635 2.9107.308.7889.72 1.4573 1.388 2.1228.6679.6655 1.3365 1.0743 2.1285 1.38.7632.295 1.6361.4961 2.9134.552 1.2773.056 1.6884.069 4.9462.0627 3.2578-.0062 3.668-.0207 4.9478-.0814 1.28-.0607 2.147-.2652 2.9098-.5633.7889-.3086 1.4578-.72 2.1228-1.3881.665-.6682 1.0745-1.3378 1.3795-2.1284.2957-.7632.4966-1.636.552-2.9124.056-1.2809.0692-1.6898.063-4.948-.0063-3.2583-.021-3.6668-.0817-4.9465-.0607-1.2797-.264-2.1487-.5633-2.9117-.3084-.7889-.72-1.4568-1.3876-2.1228C21.2982 1.33 20.628.9208 19.8378.6165 19.074.321 18.2017.1197 16.9244.0645 15.6471.0093 15.236-.005 11.977.0014 8.718.0076 8.31.0215 7.0301.0839m.1402 21.6932c-1.17-.0509-1.8053-.2453-2.2287-.408-.5606-.216-.96-.4771-1.3819-.895-.422-.4178-.6811-.8186-.9-1.378-.1644-.4234-.3624-1.058-.4171-2.228-.0595-1.2645-.072-1.6442-.079-4.848-.007-3.2037.0053-3.583.0607-4.848.05-1.169.2456-1.805.408-2.2282.216-.5613.4762-.96.895-1.3816.4188-.4217.8184-.6814 1.3783-.9003.423-.1651 1.0575-.3614 2.227-.4171 1.2655-.06 1.6447-.072 4.848-.079 3.2033-.007 3.5835.005 4.8495.0608 1.169.0508 1.8053.2445 2.228.408.5608.216.96.4754 1.3816.895.4217.4194.6816.8176.9005 1.3787.1653.4217.3617 1.056.4169 2.2263.0602 1.2655.0739 1.645.0796 4.848.0058 3.203-.0055 3.5834-.061 4.848-.051 1.17-.245 1.8055-.408 2.2294-.216.5604-.4763.96-.8954 1.3814-.419.4215-.8181.6811-1.3783.9-.4224.1649-1.0577.3617-2.2262.4174-1.2656.0595-1.6448.072-4.8493.079-3.2045.007-3.5825-.006-4.848-.0608M16.953 5.5864A1.44 1.44 0 1 0 18.39 4.144a1.44 1.44 0 0 0-1.437 1.4424M5.8385 12.012c.0067 3.4032 2.7706 6.1557 6.173 6.1493 3.4026-.0065 6.157-2.7701 6.1506-6.1733-.0065-3.4032-2.771-6.1565-6.174-6.1498-3.403.0067-6.156 2.771-6.1496 6.1738M8 12.0077a4 4 0 1 1 4.008 3.9921A3.9996 3.9996 0 0 1 8 12.0077',
|
|
116
|
+
linkedin: 'M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433c-1.144 0-2.063-.926-2.063-2.065 0-1.138.92-2.063 2.063-2.063 1.14 0 2.064.925 2.064 2.063 0 1.139-.925 2.065-2.064 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z',
|
|
117
|
+
pinterest: 'M12.017 0C5.396 0 .029 5.367.029 11.987c0 5.079 3.158 9.417 7.618 11.162-.105-.949-.199-2.403.041-3.439.219-.937 1.406-5.957 1.406-5.957s-.359-.72-.359-1.781c0-1.663.967-2.911 2.168-2.911 1.024 0 1.518.769 1.518 1.688 0 1.029-.653 2.567-.992 3.992-.285 1.193.6 2.165 1.775 2.165 2.128 0 3.768-2.245 3.768-5.487 0-2.861-2.063-4.869-5.008-4.869-3.41 0-5.409 2.562-5.409 5.199 0 1.033.394 2.143.889 2.741.099.12.112.225.085.345-.09.375-.293 1.199-.334 1.363-.053.225-.172.271-.401.165-1.495-.69-2.433-2.878-2.433-4.646 0-3.776 2.748-7.252 7.92-7.252 4.158 0 7.392 2.967 7.392 6.923 0 4.135-2.607 7.462-6.233 7.462-1.214 0-2.354-.629-2.758-1.379l-.749 2.848c-.269 1.045-1.004 2.352-1.498 3.146 1.123.345 2.306.535 3.55.535 6.607 0 11.985-5.365 11.985-11.987C23.97 5.39 18.592.026 11.985.026L12.017 0z',
|
|
118
|
+
reddit: 'M12 0C5.373 0 0 5.373 0 12c0 3.314 1.343 6.314 3.515 8.485l-2.286 2.286C.775 23.225 1.097 24 1.738 24H12c6.627 0 12-5.373 12-12S18.627 0 12 0Zm4.388 3.199c1.104 0 1.999.895 1.999 1.999 0 1.105-.895 2-1.999 2-.946 0-1.739-.657-1.947-1.539v.002c-1.147.162-2.032 1.15-2.032 2.341v.007c1.776.067 3.4.567 4.686 1.363.473-.363 1.064-.58 1.707-.58 1.547 0 2.802 1.254 2.802 2.802 0 1.117-.655 2.081-1.601 2.531-.088 3.256-3.637 5.876-7.997 5.876-4.361 0-7.905-2.617-7.998-5.87-.954-.447-1.614-1.415-1.614-2.538 0-1.548 1.255-2.802 2.803-2.802.645 0 1.239.218 1.712.585 1.275-.79 2.881-1.291 4.64-1.365v-.01c0-1.663 1.263-3.034 2.88-3.207.188-.911.993-1.595 1.959-1.595Zm-8.085 8.376c-.784 0-1.459.78-1.506 1.797-.047 1.016.64 1.429 1.426 1.429.786 0 1.371-.369 1.418-1.385.047-1.017-.553-1.841-1.338-1.841Zm7.406 0c-.786 0-1.385.824-1.338 1.841.047 1.017.634 1.385 1.418 1.385.785 0 1.473-.413 1.426-1.429-.046-1.017-.721-1.797-1.506-1.797Zm-3.703 4.013c-.974 0-1.907.048-2.77.135-.147.015-.241.168-.183.305.483 1.154 1.622 1.964 2.953 1.964 1.33 0 2.47-.81 2.953-1.964.057-.137-.037-.29-.184-.305-.863-.087-1.795-.135-2.769-.135Z',
|
|
119
|
+
snapchat: 'M12.206.793c.99 0 4.347.276 5.93 3.821.529 1.193.403 3.219.299 4.847l-.003.06c-.012.18-.022.345-.03.51.075.045.203.09.401.09.3-.016.659-.12 1.033-.301.165-.088.344-.104.464-.104.182 0 .359.029.509.09.45.149.734.479.734.838.015.449-.39.839-1.213 1.168-.089.029-.209.075-.344.119-.45.135-1.139.36-1.333.81-.09.224-.061.524.12.868l.015.015c.06.136 1.526 3.475 4.791 4.014.255.044.435.27.42.509 0 .075-.015.149-.045.225-.24.569-1.273.988-3.146 1.271-.059.091-.12.375-.164.57-.029.179-.074.36-.134.553-.076.271-.27.405-.555.405h-.03c-.135 0-.313-.031-.538-.074-.36-.075-.765-.135-1.273-.135-.3 0-.599.015-.913.074-.6.104-1.123.464-1.723.884-.853.599-1.826 1.288-3.294 1.288-.06 0-.119-.015-.18-.015h-.149c-1.468 0-2.427-.675-3.279-1.288-.599-.42-1.107-.779-1.707-.884-.314-.045-.629-.074-.928-.074-.54 0-.958.089-1.272.149-.211.043-.391.074-.54.074-.374 0-.523-.224-.583-.42-.061-.192-.09-.389-.135-.567-.046-.181-.105-.494-.166-.57-1.918-.222-2.95-.642-3.189-1.226-.031-.063-.052-.15-.055-.225-.015-.243.165-.465.42-.509 3.264-.54 4.73-3.879 4.791-4.02l.016-.029c.18-.345.224-.645.119-.869-.195-.434-.884-.658-1.332-.809-.121-.029-.24-.074-.346-.119-1.107-.435-1.257-.93-1.197-1.273.09-.479.674-.793 1.168-.793.146 0 .27.029.383.074.42.194.789.3 1.104.3.234 0 .384-.06.465-.105l-.046-.569c-.098-1.626-.225-3.651.307-4.837C7.392 1.077 10.739.807 11.727.807l.419-.015h.06z',
|
|
120
|
+
spotify: 'M12 0C5.4 0 0 5.4 0 12s5.4 12 12 12 12-5.4 12-12S18.66 0 12 0zm5.521 17.34c-.24.359-.66.48-1.021.24-2.82-1.74-6.36-2.101-10.561-1.141-.418.122-.779-.179-.899-.539-.12-.421.18-.78.54-.9 4.56-1.021 8.52-.6 11.64 1.32.42.18.479.659.301 1.02zm1.44-3.3c-.301.42-.841.6-1.262.3-3.239-1.98-8.159-2.58-11.939-1.38-.479.12-1.02-.12-1.14-.6-.12-.48.12-1.021.6-1.141C9.6 9.9 15 10.561 18.72 12.84c.361.181.54.78.241 1.2zm.12-3.36C15.24 8.4 8.82 8.16 5.16 9.301c-.6.179-1.2-.181-1.38-.721-.18-.601.18-1.2.72-1.381 4.26-1.26 11.28-1.02 15.721 1.621.539.3.719 1.02.419 1.56-.299.421-1.02.599-1.559.3z',
|
|
121
|
+
telegram: 'M11.944 0A12 12 0 0 0 0 12a12 12 0 0 0 12 12 12 12 0 0 0 12-12A12 12 0 0 0 12 0a12 12 0 0 0-.056 0zm4.962 7.224c.1-.002.321.023.465.14a.506.506 0 0 1 .171.325c.016.093.036.306.02.472-.18 1.898-.962 6.502-1.36 8.627-.168.9-.499 1.201-.82 1.23-.696.065-1.225-.46-1.9-.902-1.056-.693-1.653-1.124-2.678-1.8-1.185-.78-.417-1.21.258-1.91.177-.184 3.247-2.977 3.307-3.23.007-.032.014-.15-.056-.212s-.174-.041-.249-.024c-.106.024-1.793 1.14-5.061 3.345-.48.33-.913.49-1.302.48-.428-.008-1.252-.241-1.865-.44-.752-.245-1.349-.374-1.297-.789.027-.216.325-.437.893-.663 3.498-1.524 5.83-2.529 6.998-3.014 3.332-1.386 4.025-1.627 4.476-1.635z',
|
|
122
|
+
threads: 'M12.186 24h-.007c-3.581-.024-6.334-1.205-8.184-3.509C2.35 18.44 1.5 15.586 1.472 12.01v-.017c.03-3.579.879-6.43 2.525-8.482C5.845 1.205 8.6.024 12.18 0h.014c2.746.02 5.043.725 6.826 2.098 1.677 1.29 2.858 3.13 3.509 5.467l-2.04.569c-1.104-3.96-3.898-5.984-8.304-6.015-2.91.022-5.11.936-6.54 2.717C4.307 6.504 3.616 8.914 3.589 12c.027 3.086.718 5.496 2.057 7.164 1.43 1.783 3.631 2.698 6.54 2.717 2.623-.02 4.358-.631 5.8-2.045 1.647-1.613 1.618-3.593 1.09-4.798-.31-.71-.873-1.3-1.634-1.75-.192 1.352-.622 2.446-1.284 3.272-.886 1.102-2.14 1.704-3.73 1.79-1.202.065-2.361-.218-3.259-.801-1.063-.689-1.685-1.74-1.752-2.964-.065-1.19.408-2.285 1.33-3.082.88-.76 2.119-1.207 3.583-1.291a13.853 13.853 0 0 1 3.02.142c-.126-.742-.375-1.332-.75-1.757-.513-.586-1.308-.883-2.359-.89h-.029c-.844 0-1.992.232-2.721 1.32L7.734 7.847c.98-1.454 2.568-2.256 4.478-2.256h.044c3.194.02 5.097 1.975 5.287 5.388.108.046.216.094.321.142 1.49.7 2.58 1.761 3.154 3.07.797 1.82.871 4.79-1.548 7.158-1.85 1.81-4.094 2.628-7.277 2.65Zm1.003-11.69c-.242 0-.487.007-.739.021-1.836.103-2.98.946-2.916 2.143.067 1.256 1.452 1.839 2.784 1.767 1.224-.065 2.818-.543 3.086-3.71a10.5 10.5 0 0 0-2.215-.221z',
|
|
123
|
+
tiktok: 'M12.525.02c1.31-.02 2.61-.01 3.91-.02.08 1.53.63 3.09 1.75 4.17 1.12 1.11 2.7 1.62 4.24 1.79v4.03c-1.44-.05-2.89-.35-4.2-.97-.57-.26-1.1-.59-1.62-.93-.01 2.92.01 5.84-.02 8.75-.08 1.4-.54 2.79-1.35 3.94-1.31 1.92-3.58 3.17-5.91 3.21-1.43.08-2.86-.31-4.08-1.03-2.02-1.19-3.44-3.37-3.65-5.71-.02-.5-.03-1-.01-1.49.18-1.9 1.12-3.72 2.58-4.96 1.66-1.44 3.98-2.13 6.15-1.72.02 1.48-.04 2.96-.04 4.44-.99-.32-2.15-.23-3.02.37-.63.41-1.11 1.04-1.36 1.75-.21.51-.15 1.07-.14 1.61.24 1.64 1.82 3.02 3.5 2.87 1.12-.01 2.19-.66 2.77-1.61.19-.33.4-.67.41-1.06.1-1.79.06-3.57.07-5.36.01-4.03-.01-8.05.02-12.07z',
|
|
124
|
+
whatsapp: 'M17.472 14.382c-.297-.149-1.758-.867-2.03-.967-.273-.099-.471-.148-.67.15-.197.297-.767.966-.94 1.164-.173.199-.347.223-.644.075-.297-.15-1.255-.463-2.39-1.475-.883-.788-1.48-1.761-1.653-2.059-.173-.297-.018-.458.13-.606.134-.133.298-.347.446-.52.149-.174.198-.298.298-.497.099-.198.05-.371-.025-.52-.075-.149-.669-1.612-.916-2.207-.242-.579-.487-.5-.669-.51-.173-.008-.371-.01-.57-.01-.198 0-.52.074-.792.372-.272.297-1.04 1.016-1.04 2.479 0 1.462 1.065 2.875 1.213 3.074.149.198 2.096 3.2 5.077 4.487.709.306 1.262.489 1.694.625.712.227 1.36.195 1.871.118.571-.085 1.758-.719 2.006-1.413.248-.694.248-1.289.173-1.413-.074-.124-.272-.198-.57-.347m-5.421 7.403h-.004a9.87 9.87 0 01-5.031-1.378l-.361-.214-3.741.982.998-3.648-.235-.374a9.86 9.86 0 01-1.51-5.26c.001-5.45 4.436-9.884 9.888-9.884 2.64 0 5.122 1.03 6.988 2.898a9.825 9.825 0 012.893 6.994c-.003 5.45-4.437 9.884-9.885 9.884m8.413-18.297A11.815 11.815 0 0012.05 0C5.495 0 .16 5.335.157 11.892c0 2.096.547 4.142 1.588 5.945L.057 24l6.305-1.654a11.882 11.882 0 005.683 1.448h.005c6.554 0 11.89-5.335 11.893-11.893a11.821 11.821 0 00-3.48-8.413Z',
|
|
125
|
+
x: 'M18.901 1.153h3.68l-8.04 9.19L24 22.846h-7.406l-5.8-7.584-6.638 7.584H.474l8.6-9.83L0 1.154h7.594l5.243 6.932ZM17.61 20.644h2.039L6.486 3.24H4.298Z',
|
|
126
|
+
youtube: 'M23.498 6.186a3.016 3.016 0 0 0-2.122-2.136C19.505 3.545 12 3.545 12 3.545s-7.505 0-9.377.505A3.017 3.017 0 0 0 .502 6.186C0 8.07 0 12 0 12s0 3.93.502 5.814a3.016 3.016 0 0 0 2.122 2.136c1.871.505 9.376.505 9.376.505s7.505 0 9.377-.505a3.015 3.015 0 0 0 2.122-2.136C24 15.93 24 12 24 12s0-3.93-.502-5.814zM9.545 15.568V8.432L15.818 12l-6.273 3.568z',
|
|
127
|
+
};
|
|
128
|
+
|
|
129
|
+
/** One representative brand hex per platform, for the social block's "Brand" palette mode. Flat approximations, not exact brand-guideline swatches. */
|
|
130
|
+
export const SOCIAL_BRAND = {
|
|
131
|
+
instagram: '#E1306C', facebook: '#1877F2', linkedin: '#0A66C2', youtube: '#FF0000',
|
|
132
|
+
x: '#0F1419', mail: '#6B6F73', globe: '#6B6F73',
|
|
133
|
+
tiktok: '#111111', pinterest: '#E60023', snapchat: '#FFFC00', whatsapp: '#25D366',
|
|
134
|
+
threads: '#101010', discord: '#5865F2', telegram: '#26A5E4', reddit: '#FF4500',
|
|
135
|
+
spotify: '#1DB954', behance: '#1769FF', dribbble: '#EA4C89',
|
|
136
|
+
};
|
|
137
|
+
|
|
138
|
+
/** Perceived-luminance black/white pick for text or an icon drawn on top of a `hex` fill -- keeps brand-colored badges (some of which are very light, e.g. Snapchat yellow) legible without a per-platform ink override table. */
|
|
139
|
+
export function contrastInk(hex) {
|
|
140
|
+
const h = String(hex || '').replace('#', '');
|
|
141
|
+
const n = h.length === 3 ? h.split('').map((c) => c + c).join('') : h.padEnd(6, '0');
|
|
142
|
+
const r = parseInt(n.slice(0, 2), 16) || 0;
|
|
143
|
+
const g = parseInt(n.slice(2, 4), 16) || 0;
|
|
144
|
+
const b = parseInt(n.slice(4, 6), 16) || 0;
|
|
145
|
+
const luma = (0.299 * r + 0.587 * g + 0.114 * b) / 255;
|
|
146
|
+
return luma > 0.6 ? '#14171a' : '#ffffff';
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
const SVG_NS = 'http://www.w3.org/2000/svg';
|
|
150
|
+
|
|
151
|
+
/** Builds an SVG element for `name` at `size` (default 18), matching the original's stroke-1.5 style. */
|
|
152
|
+
export function icon(name, size) {
|
|
153
|
+
const shapes = ICONS[name] || ICONS.globe;
|
|
154
|
+
const svg = document.createElementNS(SVG_NS, 'svg');
|
|
155
|
+
svg.setAttribute('width', String(size || 18));
|
|
156
|
+
svg.setAttribute('height', String(size || 18));
|
|
157
|
+
svg.setAttribute('viewBox', '0 0 24 24');
|
|
158
|
+
svg.setAttribute('fill', 'none');
|
|
159
|
+
svg.setAttribute('stroke', 'currentColor');
|
|
160
|
+
svg.setAttribute('stroke-width', '1.5');
|
|
161
|
+
svg.setAttribute('stroke-linecap', 'round');
|
|
162
|
+
svg.setAttribute('stroke-linejoin', 'round');
|
|
163
|
+
svg.style.display = 'block';
|
|
164
|
+
svg.style.flex = 'none';
|
|
165
|
+
shapes.forEach((shape) => svg.appendChild(shapeNode(shape)));
|
|
166
|
+
return svg;
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
/**
|
|
170
|
+
* Social-platform icon: the official filled brand glyph when we have one,
|
|
171
|
+
* falling back to the stroke set (mail, globe, link, unknown labels).
|
|
172
|
+
* Fill inherits currentColor exactly like the stroke icons, so the social
|
|
173
|
+
* block's palette/contrast logic and the export round-trip are unchanged.
|
|
174
|
+
*/
|
|
175
|
+
export function brandIcon(name, size) {
|
|
176
|
+
const d = BRAND_GLYPHS[name];
|
|
177
|
+
if (!d) return icon(name, size);
|
|
178
|
+
const svg = document.createElementNS(SVG_NS, 'svg');
|
|
179
|
+
svg.setAttribute('width', String(size || 18));
|
|
180
|
+
svg.setAttribute('height', String(size || 18));
|
|
181
|
+
svg.setAttribute('viewBox', '0 0 24 24');
|
|
182
|
+
svg.setAttribute('fill', 'currentColor');
|
|
183
|
+
svg.style.display = 'block';
|
|
184
|
+
svg.style.flex = 'none';
|
|
185
|
+
const p = document.createElementNS(SVG_NS, 'path');
|
|
186
|
+
p.setAttribute('d', d);
|
|
187
|
+
svg.appendChild(p);
|
|
188
|
+
return svg;
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
function shapeNode(shape) {
|
|
192
|
+
if (typeof shape === 'string') {
|
|
193
|
+
const p = document.createElementNS(SVG_NS, 'path');
|
|
194
|
+
p.setAttribute('d', shape);
|
|
195
|
+
return p;
|
|
196
|
+
}
|
|
197
|
+
const [kind, ...args] = shape;
|
|
198
|
+
if (kind === 'rect') {
|
|
199
|
+
const [x, y, w, h] = args;
|
|
200
|
+
const r = document.createElementNS(SVG_NS, 'rect');
|
|
201
|
+
r.setAttribute('x', String(x));
|
|
202
|
+
r.setAttribute('y', String(y));
|
|
203
|
+
r.setAttribute('width', String(w));
|
|
204
|
+
r.setAttribute('height', String(h));
|
|
205
|
+
return r;
|
|
206
|
+
}
|
|
207
|
+
const [cx, cy, cr] = args;
|
|
208
|
+
const c = document.createElementNS(SVG_NS, 'circle');
|
|
209
|
+
c.setAttribute('cx', String(cx));
|
|
210
|
+
c.setAttribute('cy', String(cy));
|
|
211
|
+
c.setAttribute('r', String(cr));
|
|
212
|
+
return c;
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
export function socialKey(label) {
|
|
216
|
+
const l = String(label || '').toLowerCase();
|
|
217
|
+
if (l.includes('insta')) return 'instagram';
|
|
218
|
+
if (l.includes('linked')) return 'linkedin';
|
|
219
|
+
if (l.includes('face')) return 'facebook';
|
|
220
|
+
if (l.includes('you') || l.includes('tube')) return 'youtube';
|
|
221
|
+
if (l === 'x' || l.includes('twitter')) return 'x';
|
|
222
|
+
if (l.includes('tiktok') || l.includes('tik tok')) return 'tiktok';
|
|
223
|
+
if (l.includes('pinterest')) return 'pinterest';
|
|
224
|
+
if (l.includes('snap')) return 'snapchat';
|
|
225
|
+
if (l.includes('whatsapp')) return 'whatsapp';
|
|
226
|
+
if (l.includes('thread')) return 'threads';
|
|
227
|
+
if (l.includes('discord')) return 'discord';
|
|
228
|
+
if (l.includes('telegram')) return 'telegram';
|
|
229
|
+
if (l.includes('reddit')) return 'reddit';
|
|
230
|
+
if (l.includes('spotify')) return 'spotify';
|
|
231
|
+
if (l.includes('behance')) return 'behance';
|
|
232
|
+
if (l.includes('dribbble') || l.includes('dribble')) return 'dribbble';
|
|
233
|
+
if (l.includes('mail') || l.includes('email')) return 'mail';
|
|
234
|
+
return 'globe';
|
|
235
|
+
}
|
package/src/core/ids.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export const uid = () => Math.random().toString(36).slice(2, 9);
|