@chaitrabhairappa/react-native-rich-text-editor 1.0.6 → 1.0.7
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/android/.gradle/8.9/checksums/checksums.lock +0 -0
- package/android/.gradle/8.9/checksums/md5-checksums.bin +0 -0
- package/android/.gradle/8.9/checksums/sha1-checksums.bin +0 -0
- package/android/.gradle/8.9/dependencies-accessors/gc.properties +0 -0
- package/android/.gradle/8.9/executionHistory/executionHistory.lock +0 -0
- package/android/.gradle/8.9/fileChanges/last-build.bin +0 -0
- package/android/.gradle/8.9/fileHashes/fileHashes.lock +0 -0
- package/android/.gradle/8.9/gc.properties +0 -0
- package/android/.gradle/buildOutputCleanup/buildOutputCleanup.lock +0 -0
- package/android/.gradle/buildOutputCleanup/cache.properties +2 -0
- package/android/.gradle/vcs-1/gc.properties +0 -0
- package/android/src/main/java/com/richtext/editor/FloatingToolbar.kt +69 -121
- package/android/src/main/java/com/richtext/editor/RichTextEditorView.kt +16 -5
- package/android/src/main/res/drawable/ic_format_align_center.xml +9 -0
- package/android/src/main/res/drawable/ic_format_align_left.xml +9 -0
- package/android/src/main/res/drawable/ic_format_align_right.xml +9 -0
- package/android/src/main/res/drawable/ic_format_bold.xml +9 -0
- package/android/src/main/res/drawable/ic_format_checklist.xml +9 -0
- package/android/src/main/res/drawable/ic_format_clear.xml +9 -0
- package/android/src/main/res/drawable/ic_format_code.xml +9 -0
- package/android/src/main/res/drawable/ic_format_heading.xml +9 -0
- package/android/src/main/res/drawable/ic_format_highlight.xml +9 -0
- package/android/src/main/res/drawable/ic_format_indent.xml +9 -0
- package/android/src/main/res/drawable/ic_format_italic.xml +9 -0
- package/android/src/main/res/drawable/ic_format_link.xml +9 -0
- package/android/src/main/res/drawable/ic_format_list_bulleted.xml +9 -0
- package/android/src/main/res/drawable/ic_format_list_numbered.xml +9 -0
- package/android/src/main/res/drawable/ic_format_outdent.xml +9 -0
- package/android/src/main/res/drawable/ic_format_quote.xml +9 -0
- package/android/src/main/res/drawable/ic_format_redo.xml +9 -0
- package/android/src/main/res/drawable/ic_format_strikethrough.xml +9 -0
- package/android/src/main/res/drawable/ic_format_underline.xml +9 -0
- package/android/src/main/res/drawable/ic_format_undo.xml +9 -0
- package/ios/RichTextEditorView.swift +299 -26
- package/ios/ToolbarIcons.swift +736 -0
- package/package.json +1 -1
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
File without changes
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
File without changes
|
|
Binary file
|
|
File without changes
|
|
@@ -2,11 +2,14 @@ package com.richtext.editor
|
|
|
2
2
|
|
|
3
3
|
import android.content.Context
|
|
4
4
|
import android.graphics.Color
|
|
5
|
+
import android.graphics.PorterDuff
|
|
6
|
+
import android.graphics.PorterDuffColorFilter
|
|
5
7
|
import android.graphics.drawable.GradientDrawable
|
|
6
8
|
import android.view.Gravity
|
|
7
9
|
import android.view.View
|
|
8
10
|
import android.view.ViewGroup
|
|
9
11
|
import android.widget.HorizontalScrollView
|
|
12
|
+
import android.widget.ImageView
|
|
10
13
|
import android.widget.LinearLayout
|
|
11
14
|
import android.widget.TextView
|
|
12
15
|
import android.graphics.Typeface
|
|
@@ -15,6 +18,7 @@ import android.text.Spanned
|
|
|
15
18
|
import android.text.style.StrikethroughSpan
|
|
16
19
|
import android.text.style.UnderlineSpan
|
|
17
20
|
import android.text.style.BackgroundColorSpan
|
|
21
|
+
import androidx.core.content.ContextCompat
|
|
18
22
|
|
|
19
23
|
class FloatingToolbar(context: Context) : LinearLayout(context) {
|
|
20
24
|
|
|
@@ -52,7 +56,7 @@ class FloatingToolbar(context: Context) : LinearLayout(context) {
|
|
|
52
56
|
private val activeColor = Color.parseColor("#5082C8")
|
|
53
57
|
private val inactiveColor = Color.WHITE
|
|
54
58
|
|
|
55
|
-
private val buttons = mutableMapOf<String,
|
|
59
|
+
private val buttons = mutableMapOf<String, ImageView>()
|
|
56
60
|
private val buttonContainer: LinearLayout
|
|
57
61
|
private val scrollView: HorizontalScrollView
|
|
58
62
|
|
|
@@ -159,10 +163,42 @@ class FloatingToolbar(context: Context) : LinearLayout(context) {
|
|
|
159
163
|
}
|
|
160
164
|
}
|
|
161
165
|
|
|
162
|
-
private fun
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
+
private fun getDrawableResId(option: String): Int {
|
|
167
|
+
return when (option) {
|
|
168
|
+
"bold" -> R.drawable.ic_format_bold
|
|
169
|
+
"italic" -> R.drawable.ic_format_italic
|
|
170
|
+
"underline" -> R.drawable.ic_format_underline
|
|
171
|
+
"strikethrough" -> R.drawable.ic_format_strikethrough
|
|
172
|
+
"code" -> R.drawable.ic_format_code
|
|
173
|
+
"highlight" -> R.drawable.ic_format_highlight
|
|
174
|
+
"heading" -> R.drawable.ic_format_heading
|
|
175
|
+
"bullet" -> R.drawable.ic_format_list_bulleted
|
|
176
|
+
"numbered" -> R.drawable.ic_format_list_numbered
|
|
177
|
+
"quote" -> R.drawable.ic_format_quote
|
|
178
|
+
"checklist" -> R.drawable.ic_format_checklist
|
|
179
|
+
"link" -> R.drawable.ic_format_link
|
|
180
|
+
"undo" -> R.drawable.ic_format_undo
|
|
181
|
+
"redo" -> R.drawable.ic_format_redo
|
|
182
|
+
"clearFormatting" -> R.drawable.ic_format_clear
|
|
183
|
+
"indent" -> R.drawable.ic_format_indent
|
|
184
|
+
"outdent" -> R.drawable.ic_format_outdent
|
|
185
|
+
"alignLeft" -> R.drawable.ic_format_align_left
|
|
186
|
+
"alignCenter" -> R.drawable.ic_format_align_center
|
|
187
|
+
"alignRight" -> R.drawable.ic_format_align_right
|
|
188
|
+
else -> 0
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
private val iconSize = (20 * density).toInt()
|
|
193
|
+
private val iconPadding = (8 * density).toInt()
|
|
194
|
+
|
|
195
|
+
private fun createButton(option: String): ImageView? {
|
|
196
|
+
val drawableResId = getDrawableResId(option)
|
|
197
|
+
if (drawableResId == 0) return null
|
|
198
|
+
|
|
199
|
+
val button = ImageView(context).apply {
|
|
200
|
+
scaleType = ImageView.ScaleType.FIT_CENTER
|
|
201
|
+
setPadding(iconPadding, iconPadding, iconPadding, iconPadding)
|
|
166
202
|
|
|
167
203
|
val bg = GradientDrawable().apply {
|
|
168
204
|
cornerRadius = 6 * density
|
|
@@ -173,124 +209,33 @@ class FloatingToolbar(context: Context) : LinearLayout(context) {
|
|
|
173
209
|
val params = LayoutParams(buttonSize, buttonSize)
|
|
174
210
|
params.marginEnd = buttonSpacing
|
|
175
211
|
layoutParams = params
|
|
212
|
+
|
|
213
|
+
// Set the icon - drawable will scale to fit within padding
|
|
214
|
+
setImageResource(drawableResId)
|
|
215
|
+
colorFilter = PorterDuffColorFilter(inactiveColor, PorterDuff.Mode.SRC_IN)
|
|
176
216
|
}
|
|
177
217
|
|
|
178
218
|
when (option) {
|
|
179
|
-
"bold" -> {
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
}
|
|
185
|
-
"
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
}
|
|
191
|
-
"
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
}
|
|
198
|
-
"
|
|
199
|
-
val spannable = SpannableString("S")
|
|
200
|
-
spannable.setSpan(StrikethroughSpan(), 0, 1, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
|
|
201
|
-
button.text = spannable
|
|
202
|
-
button.textSize = 18f
|
|
203
|
-
button.setOnClickListener { listener?.onStrikethroughClick() }
|
|
204
|
-
}
|
|
205
|
-
"code" -> {
|
|
206
|
-
button.text = "</>"
|
|
207
|
-
button.textSize = 12f
|
|
208
|
-
button.setTypeface(Typeface.MONOSPACE, Typeface.NORMAL)
|
|
209
|
-
button.setOnClickListener { listener?.onCodeClick() }
|
|
210
|
-
}
|
|
211
|
-
"highlight" -> {
|
|
212
|
-
// Use marker/highlighter icon representation
|
|
213
|
-
button.text = "✎"
|
|
214
|
-
button.textSize = 18f
|
|
215
|
-
button.setOnClickListener { listener?.onHighlightClick() }
|
|
216
|
-
}
|
|
217
|
-
"heading" -> {
|
|
218
|
-
button.text = "H1"
|
|
219
|
-
button.textSize = 14f
|
|
220
|
-
button.setTypeface(null, Typeface.BOLD)
|
|
221
|
-
button.setOnClickListener { listener?.onHeadingClick() }
|
|
222
|
-
}
|
|
223
|
-
"bullet" -> {
|
|
224
|
-
button.text = "•≡"
|
|
225
|
-
button.textSize = 14f
|
|
226
|
-
button.setOnClickListener { listener?.onBulletListClick() }
|
|
227
|
-
}
|
|
228
|
-
"numbered" -> {
|
|
229
|
-
button.text = "1."
|
|
230
|
-
button.textSize = 14f
|
|
231
|
-
button.setOnClickListener { listener?.onNumberedListClick() }
|
|
232
|
-
}
|
|
233
|
-
"quote" -> {
|
|
234
|
-
button.text = "❞"
|
|
235
|
-
button.textSize = 18f
|
|
236
|
-
button.setOnClickListener { listener?.onQuoteClick() }
|
|
237
|
-
}
|
|
238
|
-
"checklist" -> {
|
|
239
|
-
button.text = "☑"
|
|
240
|
-
button.textSize = 18f
|
|
241
|
-
button.setOnClickListener { listener?.onChecklistClick() }
|
|
242
|
-
}
|
|
243
|
-
"link" -> {
|
|
244
|
-
button.text = "🔗"
|
|
245
|
-
button.textSize = 14f
|
|
246
|
-
button.setOnClickListener { listener?.onLinkClick() }
|
|
247
|
-
}
|
|
248
|
-
"undo" -> {
|
|
249
|
-
button.text = "↩"
|
|
250
|
-
button.textSize = 18f
|
|
251
|
-
button.setOnClickListener { listener?.onUndoClick() }
|
|
252
|
-
}
|
|
253
|
-
"redo" -> {
|
|
254
|
-
button.text = "↪"
|
|
255
|
-
button.textSize = 18f
|
|
256
|
-
button.setOnClickListener { listener?.onRedoClick() }
|
|
257
|
-
}
|
|
258
|
-
"clearFormatting" -> {
|
|
259
|
-
val spannable = SpannableString("Tx")
|
|
260
|
-
spannable.setSpan(StrikethroughSpan(), 0, 2, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
|
|
261
|
-
button.text = spannable
|
|
262
|
-
button.textSize = 14f
|
|
263
|
-
button.setOnClickListener { listener?.onClearFormattingClick() }
|
|
264
|
-
}
|
|
265
|
-
"indent" -> {
|
|
266
|
-
button.text = "→⊢"
|
|
267
|
-
button.textSize = 12f
|
|
268
|
-
button.setOnClickListener { listener?.onIndentClick() }
|
|
269
|
-
}
|
|
270
|
-
"outdent" -> {
|
|
271
|
-
button.text = "⊣←"
|
|
272
|
-
button.textSize = 12f
|
|
273
|
-
button.setOnClickListener { listener?.onOutdentClick() }
|
|
274
|
-
}
|
|
275
|
-
"alignLeft" -> {
|
|
276
|
-
button.text = "≡"
|
|
277
|
-
button.textSize = 18f
|
|
278
|
-
button.gravity = Gravity.START or Gravity.CENTER_VERTICAL
|
|
279
|
-
button.setOnClickListener { listener?.onAlignLeftClick() }
|
|
280
|
-
}
|
|
281
|
-
"alignCenter" -> {
|
|
282
|
-
button.text = "≡"
|
|
283
|
-
button.textSize = 18f
|
|
284
|
-
button.gravity = Gravity.CENTER
|
|
285
|
-
button.setOnClickListener { listener?.onAlignCenterClick() }
|
|
286
|
-
}
|
|
287
|
-
"alignRight" -> {
|
|
288
|
-
button.text = "≡"
|
|
289
|
-
button.textSize = 18f
|
|
290
|
-
button.gravity = Gravity.END or Gravity.CENTER_VERTICAL
|
|
291
|
-
button.setOnClickListener { listener?.onAlignRightClick() }
|
|
292
|
-
}
|
|
293
|
-
else -> return null
|
|
219
|
+
"bold" -> button.setOnClickListener { listener?.onBoldClick() }
|
|
220
|
+
"italic" -> button.setOnClickListener { listener?.onItalicClick() }
|
|
221
|
+
"underline" -> button.setOnClickListener { listener?.onUnderlineClick() }
|
|
222
|
+
"strikethrough" -> button.setOnClickListener { listener?.onStrikethroughClick() }
|
|
223
|
+
"code" -> button.setOnClickListener { listener?.onCodeClick() }
|
|
224
|
+
"highlight" -> button.setOnClickListener { listener?.onHighlightClick() }
|
|
225
|
+
"heading" -> button.setOnClickListener { listener?.onHeadingClick() }
|
|
226
|
+
"bullet" -> button.setOnClickListener { listener?.onBulletListClick() }
|
|
227
|
+
"numbered" -> button.setOnClickListener { listener?.onNumberedListClick() }
|
|
228
|
+
"quote" -> button.setOnClickListener { listener?.onQuoteClick() }
|
|
229
|
+
"checklist" -> button.setOnClickListener { listener?.onChecklistClick() }
|
|
230
|
+
"link" -> button.setOnClickListener { listener?.onLinkClick() }
|
|
231
|
+
"undo" -> button.setOnClickListener { listener?.onUndoClick() }
|
|
232
|
+
"redo" -> button.setOnClickListener { listener?.onRedoClick() }
|
|
233
|
+
"clearFormatting" -> button.setOnClickListener { listener?.onClearFormattingClick() }
|
|
234
|
+
"indent" -> button.setOnClickListener { listener?.onIndentClick() }
|
|
235
|
+
"outdent" -> button.setOnClickListener { listener?.onOutdentClick() }
|
|
236
|
+
"alignLeft" -> button.setOnClickListener { listener?.onAlignLeftClick() }
|
|
237
|
+
"alignCenter" -> button.setOnClickListener { listener?.onAlignCenterClick() }
|
|
238
|
+
"alignRight" -> button.setOnClickListener { listener?.onAlignRightClick() }
|
|
294
239
|
}
|
|
295
240
|
|
|
296
241
|
return button
|
|
@@ -331,7 +276,10 @@ class FloatingToolbar(context: Context) : LinearLayout(context) {
|
|
|
331
276
|
|
|
332
277
|
for ((option, button) in buttons) {
|
|
333
278
|
val isActive = states[option] ?: false
|
|
334
|
-
button.
|
|
279
|
+
button.colorFilter = PorterDuffColorFilter(
|
|
280
|
+
if (isActive) activeColor else inactiveColor,
|
|
281
|
+
PorterDuff.Mode.SRC_IN
|
|
282
|
+
)
|
|
335
283
|
(button.background as? GradientDrawable)?.setColor(
|
|
336
284
|
if (isActive) Color.parseColor("#40FFFFFF") else Color.TRANSPARENT
|
|
337
285
|
)
|
|
@@ -91,6 +91,7 @@ class RichTextEditorView(context: Context) : androidx.appcompat.widget.AppCompat
|
|
|
91
91
|
|
|
92
92
|
setPadding(paddingHorizontal, paddingVertical, paddingHorizontal, paddingVertical)
|
|
93
93
|
textSize = 16f
|
|
94
|
+
setLineSpacing(0f, 1.3f) // Consistent line height multiplier
|
|
94
95
|
setTextColor(Color.BLACK)
|
|
95
96
|
setHintTextColor(Color.parseColor("#9E9E9E"))
|
|
96
97
|
gravity = Gravity.TOP or Gravity.START
|
|
@@ -584,7 +585,7 @@ class RichTextEditorView(context: Context) : androidx.appcompat.widget.AppCompat
|
|
|
584
585
|
private fun sendContentChange() {
|
|
585
586
|
try {
|
|
586
587
|
val map = Arguments.createMap()
|
|
587
|
-
map.putString("text", text
|
|
588
|
+
map.putString("text", text?.toString() ?: "")
|
|
588
589
|
map.putArray("blocks", getBlocksArray())
|
|
589
590
|
sendEvent("onContentChange", map)
|
|
590
591
|
} catch (e: Exception) {
|
|
@@ -718,7 +719,10 @@ class RichTextEditorView(context: Context) : androidx.appcompat.widget.AppCompat
|
|
|
718
719
|
|
|
719
720
|
fun getBlocksArray(): WritableArray {
|
|
720
721
|
val blocks = Arguments.createArray()
|
|
721
|
-
val textContent = text
|
|
722
|
+
val textContent = text?.toString() ?: ""
|
|
723
|
+
if (textContent.isEmpty()) {
|
|
724
|
+
return blocks
|
|
725
|
+
}
|
|
722
726
|
val lines = textContent.split("\n")
|
|
723
727
|
lines.forEach { line ->
|
|
724
728
|
val block = Arguments.createMap()
|
|
@@ -1171,12 +1175,18 @@ class RichTextEditorView(context: Context) : androidx.appcompat.widget.AppCompat
|
|
|
1171
1175
|
}
|
|
1172
1176
|
|
|
1173
1177
|
fun clearFormatting() {
|
|
1174
|
-
|
|
1175
|
-
|
|
1178
|
+
// Use saved selection if current selection is empty
|
|
1179
|
+
var start = selectionStart
|
|
1180
|
+
var end = selectionEnd
|
|
1181
|
+
|
|
1182
|
+
if (start >= end && savedSelectionStart < savedSelectionEnd) {
|
|
1183
|
+
start = savedSelectionStart
|
|
1184
|
+
end = savedSelectionEnd
|
|
1185
|
+
}
|
|
1186
|
+
|
|
1176
1187
|
if (start >= end) return
|
|
1177
1188
|
|
|
1178
1189
|
val spannable = text as? Editable ?: return
|
|
1179
|
-
val plainText = spannable.subSequence(start, end).toString()
|
|
1180
1190
|
|
|
1181
1191
|
isInternalChange = true
|
|
1182
1192
|
// Remove all spans in selection
|
|
@@ -1187,6 +1197,7 @@ class RichTextEditorView(context: Context) : androidx.appcompat.widget.AppCompat
|
|
|
1187
1197
|
spannable.removeSpan(span)
|
|
1188
1198
|
}
|
|
1189
1199
|
}
|
|
1200
|
+
setSelection(start, end)
|
|
1190
1201
|
isInternalChange = false
|
|
1191
1202
|
sendContentChange()
|
|
1192
1203
|
updateToolbarButtonStates()
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
|
2
|
+
android:width="24dp"
|
|
3
|
+
android:height="24dp"
|
|
4
|
+
android:viewportWidth="24"
|
|
5
|
+
android:viewportHeight="24">
|
|
6
|
+
<path
|
|
7
|
+
android:fillColor="#FFFFFF"
|
|
8
|
+
android:pathData="M7,15v2h10v-2H7zM3,21h18v-2H3v2zM3,13h18v-2H3v2zM7,7v2h10V7H7zM3,3v2h18V3H3z"/>
|
|
9
|
+
</vector>
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
|
2
|
+
android:width="24dp"
|
|
3
|
+
android:height="24dp"
|
|
4
|
+
android:viewportWidth="24"
|
|
5
|
+
android:viewportHeight="24">
|
|
6
|
+
<path
|
|
7
|
+
android:fillColor="#FFFFFF"
|
|
8
|
+
android:pathData="M15,15H3v2h12v-2zM15,7H3v2h12V7zM3,13h18v-2H3v2zM3,21h18v-2H3v2zM3,3v2h18V3H3z"/>
|
|
9
|
+
</vector>
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
|
2
|
+
android:width="24dp"
|
|
3
|
+
android:height="24dp"
|
|
4
|
+
android:viewportWidth="24"
|
|
5
|
+
android:viewportHeight="24">
|
|
6
|
+
<path
|
|
7
|
+
android:fillColor="#FFFFFF"
|
|
8
|
+
android:pathData="M3,21h18v-2H3v2zM9,17h12v-2H9v2zM3,13h18v-2H3v2zM9,9h12V7H9v2zM3,3v2h18V3H3z"/>
|
|
9
|
+
</vector>
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
|
2
|
+
android:width="24dp"
|
|
3
|
+
android:height="24dp"
|
|
4
|
+
android:viewportWidth="24"
|
|
5
|
+
android:viewportHeight="24">
|
|
6
|
+
<path
|
|
7
|
+
android:fillColor="#FFFFFF"
|
|
8
|
+
android:pathData="M15.6,10.79c0.97,-0.67 1.65,-1.77 1.65,-2.79 0,-2.26 -1.75,-4 -4,-4H7v14h7.04c2.09,0 3.71,-1.7 3.71,-3.79 0,-1.52 -0.86,-2.82 -2.15,-3.42zM10,6.5h3c0.83,0 1.5,0.67 1.5,1.5s-0.67,1.5 -1.5,1.5h-3v-3zM13.5,15.5H10v-3h3.5c0.83,0 1.5,0.67 1.5,1.5s-0.67,1.5 -1.5,1.5z"/>
|
|
9
|
+
</vector>
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
|
2
|
+
android:width="24dp"
|
|
3
|
+
android:height="24dp"
|
|
4
|
+
android:viewportWidth="24"
|
|
5
|
+
android:viewportHeight="24">
|
|
6
|
+
<path
|
|
7
|
+
android:fillColor="#FFFFFF"
|
|
8
|
+
android:pathData="M22,7h-9v2h9V7zM22,15h-9v2h9v-2zM5.54,11L2,7.46l1.41,-1.41 2.12,2.12 4.24,-4.24 1.41,1.41L5.54,11zM5.54,19L2,15.46l1.41,-1.41 2.12,2.12 4.24,-4.24 1.41,1.41L5.54,19z"/>
|
|
9
|
+
</vector>
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
|
2
|
+
android:width="24dp"
|
|
3
|
+
android:height="24dp"
|
|
4
|
+
android:viewportWidth="24"
|
|
5
|
+
android:viewportHeight="24">
|
|
6
|
+
<path
|
|
7
|
+
android:fillColor="#FFFFFF"
|
|
8
|
+
android:pathData="M3.27,5L2,6.27l6.97,6.97L6.5,19h3l1.57,-3.66L16.73,21 18,19.73 3.55,5.27 3.27,5zM6,5v0.18L8.82,8h2.4l-0.72,1.68 2.1,2.1L14.21,8H20V5H6z"/>
|
|
9
|
+
</vector>
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
|
2
|
+
android:width="24dp"
|
|
3
|
+
android:height="24dp"
|
|
4
|
+
android:viewportWidth="24"
|
|
5
|
+
android:viewportHeight="24">
|
|
6
|
+
<path
|
|
7
|
+
android:fillColor="#FFFFFF"
|
|
8
|
+
android:pathData="M9.4,16.6L4.8,12l4.6,-4.6L8,6l-6,6 6,6 1.4,-1.4zM14.6,16.6l4.6,-4.6 -4.6,-4.6L16,6l6,6 -6,6 -1.4,-1.4z"/>
|
|
9
|
+
</vector>
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
|
2
|
+
android:width="24dp"
|
|
3
|
+
android:height="24dp"
|
|
4
|
+
android:viewportWidth="24"
|
|
5
|
+
android:viewportHeight="24">
|
|
6
|
+
<path
|
|
7
|
+
android:fillColor="#FFFFFF"
|
|
8
|
+
android:pathData="M5,4v3h5.5v12h3V7H19V4H5z"/>
|
|
9
|
+
</vector>
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
|
2
|
+
android:width="24dp"
|
|
3
|
+
android:height="24dp"
|
|
4
|
+
android:viewportWidth="24"
|
|
5
|
+
android:viewportHeight="24">
|
|
6
|
+
<path
|
|
7
|
+
android:fillColor="#FFFFFF"
|
|
8
|
+
android:pathData="M6,14l3,3v5h6v-5l3,-3V9H6V14zM11,2h2v3h-2V2zM3.5,5.88l1.41,-1.41 2.12,2.12L5.62,8 3.5,5.88zM16.96,6.59l2.12,-2.12 1.41,1.41 -2.12,2.12 -1.41,-1.41z"/>
|
|
9
|
+
</vector>
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
|
2
|
+
android:width="24dp"
|
|
3
|
+
android:height="24dp"
|
|
4
|
+
android:viewportWidth="24"
|
|
5
|
+
android:viewportHeight="24">
|
|
6
|
+
<path
|
|
7
|
+
android:fillColor="#FFFFFF"
|
|
8
|
+
android:pathData="M3,21h18v-2H3v2zM3,8v8l4,-4 -4,-4zM11,17h10v-2H11v2zM3,3v2h18V3H3zM11,9h10V7H11v2zM11,13h10v-2H11v2z"/>
|
|
9
|
+
</vector>
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
|
2
|
+
android:width="24dp"
|
|
3
|
+
android:height="24dp"
|
|
4
|
+
android:viewportWidth="24"
|
|
5
|
+
android:viewportHeight="24">
|
|
6
|
+
<path
|
|
7
|
+
android:fillColor="#FFFFFF"
|
|
8
|
+
android:pathData="M10,4v3h2.21l-3.42,8H6v3h8v-3h-2.21l3.42,-8H18V4z"/>
|
|
9
|
+
</vector>
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
|
2
|
+
android:width="24dp"
|
|
3
|
+
android:height="24dp"
|
|
4
|
+
android:viewportWidth="24"
|
|
5
|
+
android:viewportHeight="24">
|
|
6
|
+
<path
|
|
7
|
+
android:fillColor="#FFFFFF"
|
|
8
|
+
android:pathData="M3.9,12c0,-1.71 1.39,-3.1 3.1,-3.1h4V7H7c-2.76,0 -5,2.24 -5,5s2.24,5 5,5h4v-1.9H7c-1.71,0 -3.1,-1.39 -3.1,-3.1zM8,13h8v-2H8v2zM17,7h-4v1.9h4c1.71,0 3.1,1.39 3.1,3.1s-1.39,3.1 -3.1,3.1h-4V17h4c2.76,0 5,-2.24 5,-5s-2.24,-5 -5,-5z"/>
|
|
9
|
+
</vector>
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
|
2
|
+
android:width="24dp"
|
|
3
|
+
android:height="24dp"
|
|
4
|
+
android:viewportWidth="24"
|
|
5
|
+
android:viewportHeight="24">
|
|
6
|
+
<path
|
|
7
|
+
android:fillColor="#FFFFFF"
|
|
8
|
+
android:pathData="M4,10.5c-0.83,0 -1.5,0.67 -1.5,1.5s0.67,1.5 1.5,1.5 1.5,-0.67 1.5,-1.5 -0.67,-1.5 -1.5,-1.5zM4,4.5c-0.83,0 -1.5,0.67 -1.5,1.5S3.17,7.5 4,7.5 5.5,6.83 5.5,6 4.83,4.5 4,4.5zM4,16.5c-0.83,0 -1.5,0.68 -1.5,1.5s0.68,1.5 1.5,1.5 1.5,-0.68 1.5,-1.5 -0.67,-1.5 -1.5,-1.5zM7,19h14v-2H7v2zM7,13h14v-2H7v2zM7,5v2h14V5H7z"/>
|
|
9
|
+
</vector>
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
|
2
|
+
android:width="24dp"
|
|
3
|
+
android:height="24dp"
|
|
4
|
+
android:viewportWidth="24"
|
|
5
|
+
android:viewportHeight="24">
|
|
6
|
+
<path
|
|
7
|
+
android:fillColor="#FFFFFF"
|
|
8
|
+
android:pathData="M2,17h2v0.5H3v1h1v0.5H2v1h3v-4H2v1zM3,8h1V4H2v1h1v3zM2,11h1.8L2,13.1v0.9h3v-1H3.2L5,10.9V10H2v1zM7,5v2h14V5H7zM7,19h14v-2H7v2zM7,13h14v-2H7v2z"/>
|
|
9
|
+
</vector>
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
|
2
|
+
android:width="24dp"
|
|
3
|
+
android:height="24dp"
|
|
4
|
+
android:viewportWidth="24"
|
|
5
|
+
android:viewportHeight="24">
|
|
6
|
+
<path
|
|
7
|
+
android:fillColor="#FFFFFF"
|
|
8
|
+
android:pathData="M11,17h10v-2H11v2zM3,12l4,4V8l-4,4zM3,21h18v-2H3v2zM3,3v2h18V3H3zM11,9h10V7H11v2zM11,13h10v-2H11v2z"/>
|
|
9
|
+
</vector>
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
|
2
|
+
android:width="24dp"
|
|
3
|
+
android:height="24dp"
|
|
4
|
+
android:viewportWidth="24"
|
|
5
|
+
android:viewportHeight="24">
|
|
6
|
+
<path
|
|
7
|
+
android:fillColor="#FFFFFF"
|
|
8
|
+
android:pathData="M6,17h3l2,-4V7H5v6h3zM14,17h3l2,-4V7h-6v6h3z"/>
|
|
9
|
+
</vector>
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
|
2
|
+
android:width="24dp"
|
|
3
|
+
android:height="24dp"
|
|
4
|
+
android:viewportWidth="24"
|
|
5
|
+
android:viewportHeight="24">
|
|
6
|
+
<path
|
|
7
|
+
android:fillColor="#FFFFFF"
|
|
8
|
+
android:pathData="M18.4,10.6C16.55,8.99 14.15,8 11.5,8c-4.65,0 -8.58,3.03 -9.96,7.22L3.9,16c1.05,-3.19 4.05,-5.5 7.6,-5.5 1.95,0 3.73,0.72 5.12,1.88L13,16h9V7l-3.6,3.6z"/>
|
|
9
|
+
</vector>
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
|
2
|
+
android:width="24dp"
|
|
3
|
+
android:height="24dp"
|
|
4
|
+
android:viewportWidth="24"
|
|
5
|
+
android:viewportHeight="24">
|
|
6
|
+
<path
|
|
7
|
+
android:fillColor="#FFFFFF"
|
|
8
|
+
android:pathData="M10,19h4v-3h-4v3zM5,4v3h5v3h4V7h5V4H5zM3,14h18v-2H3v2z"/>
|
|
9
|
+
</vector>
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
|
2
|
+
android:width="24dp"
|
|
3
|
+
android:height="24dp"
|
|
4
|
+
android:viewportWidth="24"
|
|
5
|
+
android:viewportHeight="24">
|
|
6
|
+
<path
|
|
7
|
+
android:fillColor="#FFFFFF"
|
|
8
|
+
android:pathData="M12,17c3.31,0 6,-2.69 6,-6V3h-2.5v8c0,1.93 -1.57,3.5 -3.5,3.5S8.5,12.93 8.5,11V3H6v8c0,3.31 2.69,6 6,6zM5,19v2h14v-2H5z"/>
|
|
9
|
+
</vector>
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
|
2
|
+
android:width="24dp"
|
|
3
|
+
android:height="24dp"
|
|
4
|
+
android:viewportWidth="24"
|
|
5
|
+
android:viewportHeight="24">
|
|
6
|
+
<path
|
|
7
|
+
android:fillColor="#FFFFFF"
|
|
8
|
+
android:pathData="M12.5,8c-2.65,0 -5.05,1.04 -6.83,2.73L3,8v9h9l-2.81,-2.81c1.36,-1.21 3.14,-1.94 5.06,-1.94 3.52,0 6.44,2.61 6.89,6H23c-0.46,-4.51 -4.3,-8 -8.75,-8z"/>
|
|
9
|
+
</vector>
|