purgetss 7.4.0 → 7.5.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/README.md +184 -61
- package/assets/fonts/FontAwesome7Brands-Regular.ttf +0 -0
- package/assets/fonts/FontAwesome7Free-Regular.ttf +0 -0
- package/assets/fonts/FontAwesome7Free-Solid.ttf +0 -0
- package/dist/fontawesome.js +55 -1
- package/dist/fontawesome.tss +55 -1
- package/dist/purgetss.ui.js +495 -26
- package/dist/utilities.tss +79 -68
- package/experimental/completions2.js +27 -12
- package/lib/templates/fontawesome/free-template.js.cjs +1 -1
- package/lib/templates/fontawesome/free-template.tss +1 -1
- package/lib/templates/purgetss.ui.js.cjs +487 -18
- package/package.json +2 -2
- package/src/core/builders/tailwind-builder.js +1 -0
- package/src/core/builders/tailwind-helpers.js +19 -9
- package/src/fonts/Font Awesome 7 Brands-Regular-400.otf +0 -0
- package/src/fonts/Font Awesome 7 Free-Regular-400.otf +0 -0
- package/src/fonts/Font Awesome 7 Free-Solid-900.otf +0 -0
- package/src/shared/helpers/animation.js +22 -0
- package/src/shared/helpers/utils.js +65 -6
package/README.md
CHANGED
|
@@ -10,62 +10,18 @@
|
|
|
10
10
|
|
|
11
11
|
</div>
|
|
12
12
|
|
|
13
|
-
**PurgeTSS** is a toolkit for building mobile apps with the [Titanium framework](https://titaniumsdk.com). It
|
|
14
|
-
|
|
15
|
-
It includes utility classes, icon font support, an Animation module, a simple grid system, and the `shades` command for generating custom colors.
|
|
16
|
-
|
|
17
|
-
If you build UI-heavy screens, PurgeTSS helps you move faster without hand-writing long TSS files.
|
|
13
|
+
**PurgeTSS** is a toolkit for building mobile apps with the [Titanium framework](https://titaniumsdk.com). It provides utility classes, icon font support, an Animation module, a grid system, and the `shades` command for generating custom colors.
|
|
18
14
|
|
|
19
15
|
---
|
|
20
16
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
-
|
|
28
|
-
|
|
29
|
-
- Distribution file: `dist/utilities.tss` (was `dist/tailwind.tss`)
|
|
30
|
-
|
|
31
|
-
### Major improvements
|
|
32
|
-
|
|
33
|
-
- **XML syntax validation**: Catches common Alloy XML malformations before processing
|
|
34
|
-
- Detects missing opening `<` brackets (e.g., `Label id=` instead of `<Label id=`)
|
|
35
|
-
- Shows detailed error messages with line numbers, context preview, and fix suggestions
|
|
36
|
-
- Saves debugging time by catching errors early in the build process
|
|
37
|
-
|
|
38
|
-
- **Classic Titanium compatibility**: `deviceInfo()` function now works in both Alloy and Classic projects
|
|
39
|
-
- Removed dependency on `Alloy.isTablet`/`Alloy.isHandheld`
|
|
40
|
-
- Uses platform-based detection instead
|
|
41
|
-
|
|
42
|
-
### Migration guide
|
|
43
|
-
|
|
44
|
-
If you have references to `tailwind.tss` in your project, update them to `utilities.tss`:
|
|
45
|
-
|
|
46
|
-
```bash
|
|
47
|
-
# Update any custom scripts or paths
|
|
48
|
-
# From: purgetss/styles/tailwind.tss
|
|
49
|
-
# To: purgetss/styles/utilities.tss
|
|
50
|
-
```
|
|
51
|
-
|
|
52
|
-
For most users, upgrading is straightforward:
|
|
53
|
-
```bash
|
|
54
|
-
npm install -g purgetss@latest
|
|
55
|
-
```
|
|
56
|
-
|
|
57
|
-
---
|
|
58
|
-
|
|
59
|
-
Here are its main functionalities:
|
|
60
|
-
|
|
61
|
-
- **Utility-First Classes**: PurgeTSS ships with 21,000+ utility classes, so you get a lot of styling options out of the box.
|
|
62
|
-
- **Efficient style management**: It parses all XML files to create a clean `app.tss` containing only the classes used in your project, reducing size and improving performance.
|
|
63
|
-
- **Customization and JIT classes**: You can customize default classes via a config file and use JIT classes for arbitrary values inside views.
|
|
64
|
-
- **Icon fonts integration**: Use icon fonts such as Font Awesome, Material Icons, Material Symbols, and Framework7-Icons in Buttons and Labels.
|
|
65
|
-
- **`fonts.tss` generation**: The `build-fonts` command creates a `fonts.tss` file with class definitions and fontFamily selectors for regular and icon fonts, with simplified options for filenames and icon prefixes.
|
|
66
|
-
- **`shades` command**: Generate custom color shades from a hex color without external tools.
|
|
67
|
-
- **Animation module**: Apply basic 2D matrix animations or transformations to elements or arrays of elements.
|
|
68
|
-
- **Grid system**: A two-dimensional grid system to align and distribute elements within views.
|
|
17
|
+
- 21,000+ utility classes for styling Titanium views
|
|
18
|
+
- Parses XML files to generate a clean `app.tss` with only the classes your project uses
|
|
19
|
+
- Customizable defaults via `config.cjs`, with JIT classes for arbitrary values
|
|
20
|
+
- Icon font support: Font Awesome, Material Icons, Material Symbols, Framework7-Icons
|
|
21
|
+
- `build-fonts` command generates `fonts.tss` with class definitions and fontFamily selectors
|
|
22
|
+
- `shades` command generates color shades from any hex color
|
|
23
|
+
- Animation module for 2D matrix animations on views or arrays of views
|
|
24
|
+
- Grid system for aligning and distributing elements within views
|
|
69
25
|
|
|
70
26
|
---
|
|
71
27
|
|
|
@@ -83,13 +39,22 @@ You can use any position, size, color, opacity, or transformation class from `ut
|
|
|
83
39
|
|
|
84
40
|
### Available methods
|
|
85
41
|
|
|
86
|
-
| Method
|
|
87
|
-
|
|
|
88
|
-
| `play(views, cb)` / `toggle(views, cb)`
|
|
89
|
-
| `open(views, cb)`
|
|
90
|
-
| `close(views, cb)`
|
|
91
|
-
| `apply(views, cb)`
|
|
92
|
-
| `draggable(views)`
|
|
42
|
+
| Method | Description |
|
|
43
|
+
| ----------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
44
|
+
| `play(views, cb)` / `toggle(views, cb)` | Animate views from current state to the animation state. Toggles `open`/`close` on each call. |
|
|
45
|
+
| `open(views, cb)` | Explicitly run the `open` state animation. |
|
|
46
|
+
| `close(views, cb)` | Explicitly run the `close` state animation. |
|
|
47
|
+
| `apply(views, cb)` | Apply properties instantly without animation. |
|
|
48
|
+
| `draggable(views)` | Make a view or array of views draggable inside their parent. |
|
|
49
|
+
| `undraggable(views)` | Remove draggable behavior and clean up all listeners. |
|
|
50
|
+
| `detectCollisions(views, dragCB, dropCB)` | Enable collision detection on draggable views with hover and drop callbacks. |
|
|
51
|
+
| `swap(view1, view2)` | Animate two views exchanging positions. Auto-normalizes position from margins/right/center via `view.rect`. Inherits `duration`, `delay`, `curve`; fallback: 200ms. |
|
|
52
|
+
| `sequence(views, cb)` | Animate views one after another. Callback fires after the last view. |
|
|
53
|
+
| `shake(view, intensity)` | Bidirectional shake animation for error feedback. Inherits `duration`, `delay`; fallback: 400ms. Default intensity: 10px. |
|
|
54
|
+
| `pulse(view, count)` | Scale-up-and-back pulse animation. Scale from Animation object (default 1.2x). Count: number of pulses (default 1). |
|
|
55
|
+
| `snapTo(view, targets)` | Snap a view to the nearest target by center distance. Auto-normalizes target position. Inherits `duration`, `delay`, `curve`; fallback: 200ms. |
|
|
56
|
+
| `reorder(views, newOrder)` | Animate views to new positions based on index mapping. Auto-normalizes positions. Inherits `duration`, `delay`, `curve`; fallback: 200ms. |
|
|
57
|
+
| `transition(views, layouts)` | Multi-view layout transitions using `Matrix2D.translate().rotate().scale()`. Layout properties: `translation`, `rotate`, `scale`, `zIndex`. Compatible with TiDesigner presets. Views without a layout entry fade out; returning views fade in. |
|
|
93
58
|
|
|
94
59
|
### Callback event object
|
|
95
60
|
|
|
@@ -144,6 +109,114 @@ $.myAnimation.draggable([$.card1, $.card2])
|
|
|
144
109
|
|
|
145
110
|
Use `bounds` to restrict movement, and `drag`/`drop` modifiers for drag-state animations. Use `vertical-constraint` or `horizontal-constraint` classes to limit the drag axis.
|
|
146
111
|
|
|
112
|
+
### Collision detection
|
|
113
|
+
|
|
114
|
+
After calling `draggable()`, you can enable collision detection to know when a dragged view overlaps another:
|
|
115
|
+
|
|
116
|
+
```js
|
|
117
|
+
$.myAnimation.draggable(views)
|
|
118
|
+
$.myAnimation.detectCollisions(views, onHover, onDrop)
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
**`dragCB(source, target)`** is called during drag:
|
|
122
|
+
- `target` is the view under the drag center, or `null` when leaving all targets
|
|
123
|
+
- Use this to show visual feedback (highlights, borders, scaling)
|
|
124
|
+
|
|
125
|
+
**`dropCB(source, target)`** is called on drop:
|
|
126
|
+
- `target` is the view where the source was released
|
|
127
|
+
- If no target is found, the source automatically snaps back to its original position with a 200ms animation
|
|
128
|
+
|
|
129
|
+
### Swap animation
|
|
130
|
+
|
|
131
|
+
Animate two views exchanging positions:
|
|
132
|
+
|
|
133
|
+
```js
|
|
134
|
+
$.myAnimation.swap(view1, view2)
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
- Inherits `duration`, `delay`, and `curve` from the Animation object's classes
|
|
138
|
+
- Falls back to 200ms duration, 0ms delay, and ease-in-out curve if not set
|
|
139
|
+
- Handles iOS transform reset automatically
|
|
140
|
+
- Temporarily raises z-index so views animate above siblings
|
|
141
|
+
- Updates internal `_originLeft`/`_originTop` for subsequent drag operations
|
|
142
|
+
|
|
143
|
+
### Sequence animation
|
|
144
|
+
|
|
145
|
+
Animate views one after another (unlike `play(array)` which runs them in parallel):
|
|
146
|
+
|
|
147
|
+
```js
|
|
148
|
+
$.fadeIn.sequence([$.title, $.subtitle, $.button], () => {
|
|
149
|
+
console.log('All views animated')
|
|
150
|
+
})
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
- Each view fully completes before the next starts
|
|
154
|
+
- Callback fires once after the last view
|
|
155
|
+
- Respects `open`/`close` state (set once for the entire sequence)
|
|
156
|
+
|
|
157
|
+
### Shake animation
|
|
158
|
+
|
|
159
|
+
Quick horizontal shake for error feedback, using native `autoreverse` + `repeat` for smooth performance:
|
|
160
|
+
|
|
161
|
+
```js
|
|
162
|
+
$.myAnimation.shake($.loginButton) // default intensity: 10px
|
|
163
|
+
$.myAnimation.shake($.input, 6) // subtle: 6px
|
|
164
|
+
$.myAnimation.shake($.errorLabel, 20) // strong: 20px
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
### Snap to nearest target
|
|
168
|
+
|
|
169
|
+
After dragging, snap a view to the closest target by center-to-center distance:
|
|
170
|
+
|
|
171
|
+
```js
|
|
172
|
+
const matched = $.myAnimation.snapTo(draggedView, slotViews)
|
|
173
|
+
if (matched) {
|
|
174
|
+
console.log('Snapped to:', matched.id)
|
|
175
|
+
}
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
### Reorder animation
|
|
179
|
+
|
|
180
|
+
Animate an array of views to new positions based on index mapping:
|
|
181
|
+
|
|
182
|
+
```js
|
|
183
|
+
// Reverse order: view[0] goes to position of view[2], view[2] to position of view[0]
|
|
184
|
+
$.myAnimation.reorder(cardViews, [2, 1, 0])
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
- All views animate simultaneously
|
|
188
|
+
- Captures positions before animating to avoid conflicts
|
|
189
|
+
|
|
190
|
+
### Removing draggable behavior
|
|
191
|
+
|
|
192
|
+
Remove draggable behavior and clean up all event listeners:
|
|
193
|
+
|
|
194
|
+
```js
|
|
195
|
+
$.myAnimation.undraggable(cardViews)
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
### Property inheritance
|
|
199
|
+
|
|
200
|
+
The `swap`, `reorder`, `snapTo`, and `shake` methods inherit animation properties from the `<Animation>` object's classes. This means you can configure behavior declaratively in XML:
|
|
201
|
+
|
|
202
|
+
```xml
|
|
203
|
+
<Animation id="myAnim" module="purgetss.ui" class="curve-animation-ease-out delay-100 duration-150" />
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
| Property | `play`/`toggle`/`open`/`close`/`sequence` | `swap`/`reorder`/`snapTo` | `shake` |
|
|
207
|
+
| ------------- | :---------------------------------------: | :-----------------------: | :-----------------: |
|
|
208
|
+
| `duration` | ✅ | ✅ | ✅ (÷6) |
|
|
209
|
+
| `delay` | ✅ | ✅ | ✅ |
|
|
210
|
+
| `curve` | ✅ | ✅ | fixed `EASE_IN_OUT` |
|
|
211
|
+
| `autoreverse` | ✅ | — | fixed `true` |
|
|
212
|
+
| `repeat` | ✅ | — | fixed `3` |
|
|
213
|
+
|
|
214
|
+
Fallback defaults when not set: `swap`/`reorder`/`snapTo` → 200ms; `shake` → 400ms. All animation timing is controlled declaratively via the `<Animation>` object's classes.
|
|
215
|
+
|
|
216
|
+
- Removes touch and orientation listeners
|
|
217
|
+
- Removes views from collision detection registry
|
|
218
|
+
- Cleans up internal tracking properties
|
|
219
|
+
|
|
147
220
|
### Utility classes for animations
|
|
148
221
|
|
|
149
222
|
| Class pattern | Description |
|
|
@@ -167,7 +240,57 @@ Use `bounds` to restrict movement, and `drag`/`drop` modifiers for drag-state an
|
|
|
167
240
|
|
|
168
241
|
See the full documentation at [purgetss.com/docs/animation-module/introduction](https://purgetss.com/docs/animation-module/introduction).
|
|
169
242
|
|
|
170
|
-
|
|
243
|
+
---
|
|
244
|
+
|
|
245
|
+
## Customizing default components
|
|
246
|
+
|
|
247
|
+
PurgeTSS sets defaults for three components out of the box:
|
|
248
|
+
|
|
249
|
+
| Component | Default |
|
|
250
|
+
| ----------- | --------------------------------------- |
|
|
251
|
+
| `Window` | `backgroundColor: '#FFFFFF'` |
|
|
252
|
+
| `View` | `width: Ti.UI.SIZE, height: Ti.UI.SIZE` |
|
|
253
|
+
| `ImageView` | `hires: true` (iOS only) |
|
|
254
|
+
|
|
255
|
+
Override or extend them in `config.cjs` with `theme.extend`:
|
|
256
|
+
|
|
257
|
+
```js
|
|
258
|
+
module.exports = {
|
|
259
|
+
theme: {
|
|
260
|
+
extend: {
|
|
261
|
+
Window: {
|
|
262
|
+
apply: 'exit-on-close-false bg-surface'
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
```
|
|
268
|
+
|
|
269
|
+
If an applied class sets a property that already exists in the defaults (e.g., `bg-surface` vs `backgroundColor: '#FFFFFF'`), the applied value wins. Array-type properties like `extendEdges` and `orientationModes` use bracket notation (`[ ]`) in the generated output.
|
|
270
|
+
|
|
271
|
+
### Shorthand and explicit forms
|
|
272
|
+
|
|
273
|
+
Both are equivalent:
|
|
274
|
+
|
|
275
|
+
```js
|
|
276
|
+
// Shorthand
|
|
277
|
+
Window: { apply: 'exit-on-close-false' }
|
|
278
|
+
|
|
279
|
+
// Explicit
|
|
280
|
+
Window: { default: { apply: 'exit-on-close-false' } }
|
|
281
|
+
```
|
|
282
|
+
|
|
283
|
+
Use the explicit form when you need platform-specific variants:
|
|
284
|
+
|
|
285
|
+
```js
|
|
286
|
+
Button: {
|
|
287
|
+
default: { apply: 'text-xl' },
|
|
288
|
+
ios: { apply: 'font-bold' },
|
|
289
|
+
android: { apply: 'text-2xl font-semibold', color: 'red' }
|
|
290
|
+
}
|
|
291
|
+
```
|
|
292
|
+
|
|
293
|
+
---
|
|
171
294
|
|
|
172
295
|
### Visit the official documentation site at [purgetss.com](https://purgetss.com) to learn more.
|
|
173
296
|
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
package/dist/fontawesome.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Font Awesome Free 7.
|
|
2
|
+
* Font Awesome Free 7.2.0 by @fontawesome - https://fontawesome.com
|
|
3
3
|
* License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
|
|
4
4
|
*/
|
|
5
5
|
|
|
@@ -169,6 +169,7 @@ const icons = {
|
|
|
169
169
|
'chartColumn': '\ue0e3',
|
|
170
170
|
'chartGantt': '\ue0e4',
|
|
171
171
|
'clapperboard': '\ue131',
|
|
172
|
+
'closedCaptioningSlash': '\ue135',
|
|
172
173
|
'clover': '\ue139',
|
|
173
174
|
'codeCompare': '\ue13a',
|
|
174
175
|
'codeFork': '\ue13b',
|
|
@@ -489,12 +490,25 @@ const icons = {
|
|
|
489
490
|
'pentagon': '\ue790',
|
|
490
491
|
'nonBinary': '\ue807',
|
|
491
492
|
'spiral': '\ue80a',
|
|
493
|
+
'pictureInPicture': '\ue80b',
|
|
492
494
|
'mobileVibrate': '\ue816',
|
|
493
495
|
'singleQuoteLeft': '\ue81b',
|
|
494
496
|
'singleQuoteRight': '\ue81c',
|
|
495
497
|
'busSide': '\ue81d',
|
|
496
498
|
'septagon': '\ue820',
|
|
497
499
|
'heptagon': '\ue820',
|
|
500
|
+
'aquarius': '\ue845',
|
|
501
|
+
'aries': '\ue846',
|
|
502
|
+
'cancer': '\ue847',
|
|
503
|
+
'capricorn': '\ue848',
|
|
504
|
+
'gemini': '\ue849',
|
|
505
|
+
'leo': '\ue84a',
|
|
506
|
+
'libra': '\ue84b',
|
|
507
|
+
'pisces': '\ue84c',
|
|
508
|
+
'sagittarius': '\ue84d',
|
|
509
|
+
'scorpio': '\ue84e',
|
|
510
|
+
'taurus': '\ue84f',
|
|
511
|
+
'virgo': '\ue850',
|
|
498
512
|
'martiniGlassEmpty': '\uf000',
|
|
499
513
|
'glassMartini': '\uf000',
|
|
500
514
|
'music': '\uf001',
|
|
@@ -1820,6 +1834,8 @@ const icons = {
|
|
|
1820
1834
|
'torah': '\uf6a0',
|
|
1821
1835
|
'toriiGate': '\uf6a1',
|
|
1822
1836
|
'vihara': '\uf6a7',
|
|
1837
|
+
'volume': '\uf6a8',
|
|
1838
|
+
'volumeMedium': '\uf6a8',
|
|
1823
1839
|
'volumeXmark': '\uf6a9',
|
|
1824
1840
|
'volumeMute': '\uf6a9',
|
|
1825
1841
|
'volumeTimes': '\uf6a9',
|
|
@@ -2138,6 +2154,44 @@ const icons = {
|
|
|
2138
2154
|
'squareFigma': '\ue7e4',
|
|
2139
2155
|
'tex': '\ue7ff',
|
|
2140
2156
|
'duolingo': '\ue812',
|
|
2157
|
+
'supportnow': '\ue833',
|
|
2158
|
+
'torBrowser': '\ue838',
|
|
2159
|
+
'typescript': '\ue840',
|
|
2160
|
+
'squareDeskpro': '\ue844',
|
|
2161
|
+
'circleZulip': '\ue851',
|
|
2162
|
+
'julia': '\ue852',
|
|
2163
|
+
'zulip': '\ue853',
|
|
2164
|
+
'unison': '\ue854',
|
|
2165
|
+
'boardGameGeek': '\ue855',
|
|
2166
|
+
'bgg': '\ue855',
|
|
2167
|
+
'koFi': '\ue856',
|
|
2168
|
+
'kubernetes': '\ue857',
|
|
2169
|
+
'postgresql': '\ue858',
|
|
2170
|
+
'scaleway': '\ue859',
|
|
2171
|
+
'venmo': '\ue85a',
|
|
2172
|
+
'venmoV': '\ue85b',
|
|
2173
|
+
'unrealEngine': '\ue85c',
|
|
2174
|
+
'globaleaks': '\ue85d',
|
|
2175
|
+
'solana': '\ue85e',
|
|
2176
|
+
'threema': '\ue85f',
|
|
2177
|
+
'forgejo': '\ue860',
|
|
2178
|
+
'claude': '\ue861',
|
|
2179
|
+
'gitee': '\ue863',
|
|
2180
|
+
'xmpp': '\ue864',
|
|
2181
|
+
'fediverse': '\ue865',
|
|
2182
|
+
'tailwindCss': '\ue866',
|
|
2183
|
+
'archLinux': '\ue867',
|
|
2184
|
+
'svelte': '\ue868',
|
|
2185
|
+
'huggingFace': '\ue869',
|
|
2186
|
+
'leetcode': '\ue86a',
|
|
2187
|
+
'openstreetmap': '\ue86b',
|
|
2188
|
+
'ultralytics': '\ue86d',
|
|
2189
|
+
'ultralyticsHub': '\ue86e',
|
|
2190
|
+
'ultralyticsYolo': '\ue86f',
|
|
2191
|
+
'obsidian': '\ue879',
|
|
2192
|
+
'zoom': '\ue87b',
|
|
2193
|
+
'vim': '\ue88a',
|
|
2194
|
+
'symfonycasts': '\ue8ab',
|
|
2141
2195
|
'squareTwitter': '\uf081',
|
|
2142
2196
|
'twitterSquare': '\uf081',
|
|
2143
2197
|
'squareFacebook': '\uf082',
|
package/dist/fontawesome.tss
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// Font Awesome Free 7.
|
|
1
|
+
// Font Awesome Free 7.2.0 by @fontawesome - https://fontawesome.com
|
|
2
2
|
// License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
|
|
3
3
|
|
|
4
4
|
// Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen readers do not read off random characters that represent icons
|
|
@@ -145,6 +145,7 @@
|
|
|
145
145
|
'.fa-chart-column': { text: '\ue0e3', title: '\ue0e3' }
|
|
146
146
|
'.fa-chart-gantt': { text: '\ue0e4', title: '\ue0e4' }
|
|
147
147
|
'.fa-clapperboard': { text: '\ue131', title: '\ue131' }
|
|
148
|
+
'.fa-closed-captioning-slash': { text: '\ue135', title: '\ue135' }
|
|
148
149
|
'.fa-clover': { text: '\ue139', title: '\ue139' }
|
|
149
150
|
'.fa-code-compare': { text: '\ue13a', title: '\ue13a' }
|
|
150
151
|
'.fa-code-fork': { text: '\ue13b', title: '\ue13b' }
|
|
@@ -465,12 +466,25 @@
|
|
|
465
466
|
'.fa-pentagon': { text: '\ue790', title: '\ue790' }
|
|
466
467
|
'.fa-non-binary': { text: '\ue807', title: '\ue807' }
|
|
467
468
|
'.fa-spiral': { text: '\ue80a', title: '\ue80a' }
|
|
469
|
+
'.fa-picture-in-picture': { text: '\ue80b', title: '\ue80b' }
|
|
468
470
|
'.fa-mobile-vibrate': { text: '\ue816', title: '\ue816' }
|
|
469
471
|
'.fa-single-quote-left': { text: '\ue81b', title: '\ue81b' }
|
|
470
472
|
'.fa-single-quote-right': { text: '\ue81c', title: '\ue81c' }
|
|
471
473
|
'.fa-bus-side': { text: '\ue81d', title: '\ue81d' }
|
|
472
474
|
'.fa-septagon': { text: '\ue820', title: '\ue820' }
|
|
473
475
|
'.fa-heptagon': { text: '\ue820', title: '\ue820' }
|
|
476
|
+
'.fa-aquarius': { text: '\ue845', title: '\ue845' }
|
|
477
|
+
'.fa-aries': { text: '\ue846', title: '\ue846' }
|
|
478
|
+
'.fa-cancer': { text: '\ue847', title: '\ue847' }
|
|
479
|
+
'.fa-capricorn': { text: '\ue848', title: '\ue848' }
|
|
480
|
+
'.fa-gemini': { text: '\ue849', title: '\ue849' }
|
|
481
|
+
'.fa-leo': { text: '\ue84a', title: '\ue84a' }
|
|
482
|
+
'.fa-libra': { text: '\ue84b', title: '\ue84b' }
|
|
483
|
+
'.fa-pisces': { text: '\ue84c', title: '\ue84c' }
|
|
484
|
+
'.fa-sagittarius': { text: '\ue84d', title: '\ue84d' }
|
|
485
|
+
'.fa-scorpio': { text: '\ue84e', title: '\ue84e' }
|
|
486
|
+
'.fa-taurus': { text: '\ue84f', title: '\ue84f' }
|
|
487
|
+
'.fa-virgo': { text: '\ue850', title: '\ue850' }
|
|
474
488
|
'.fa-martini-glass-empty': { text: '\uf000', title: '\uf000' }
|
|
475
489
|
'.fa-glass-martini': { text: '\uf000', title: '\uf000' }
|
|
476
490
|
'.fa-music': { text: '\uf001', title: '\uf001' }
|
|
@@ -1796,6 +1810,8 @@
|
|
|
1796
1810
|
'.fa-torah': { text: '\uf6a0', title: '\uf6a0' }
|
|
1797
1811
|
'.fa-torii-gate': { text: '\uf6a1', title: '\uf6a1' }
|
|
1798
1812
|
'.fa-vihara': { text: '\uf6a7', title: '\uf6a7' }
|
|
1813
|
+
'.fa-volume': { text: '\uf6a8', title: '\uf6a8' }
|
|
1814
|
+
'.fa-volume-medium': { text: '\uf6a8', title: '\uf6a8' }
|
|
1799
1815
|
'.fa-volume-xmark': { text: '\uf6a9', title: '\uf6a9' }
|
|
1800
1816
|
'.fa-volume-mute': { text: '\uf6a9', title: '\uf6a9' }
|
|
1801
1817
|
'.fa-volume-times': { text: '\uf6a9', title: '\uf6a9' }
|
|
@@ -2114,6 +2130,44 @@
|
|
|
2114
2130
|
'.fa-square-figma': { text: '\ue7e4', title: '\ue7e4' }
|
|
2115
2131
|
'.fa-tex': { text: '\ue7ff', title: '\ue7ff' }
|
|
2116
2132
|
'.fa-duolingo': { text: '\ue812', title: '\ue812' }
|
|
2133
|
+
'.fa-supportnow': { text: '\ue833', title: '\ue833' }
|
|
2134
|
+
'.fa-tor-browser': { text: '\ue838', title: '\ue838' }
|
|
2135
|
+
'.fa-typescript': { text: '\ue840', title: '\ue840' }
|
|
2136
|
+
'.fa-square-deskpro': { text: '\ue844', title: '\ue844' }
|
|
2137
|
+
'.fa-circle-zulip': { text: '\ue851', title: '\ue851' }
|
|
2138
|
+
'.fa-julia': { text: '\ue852', title: '\ue852' }
|
|
2139
|
+
'.fa-zulip': { text: '\ue853', title: '\ue853' }
|
|
2140
|
+
'.fa-unison': { text: '\ue854', title: '\ue854' }
|
|
2141
|
+
'.fa-board-game-geek': { text: '\ue855', title: '\ue855' }
|
|
2142
|
+
'.fa-bgg': { text: '\ue855', title: '\ue855' }
|
|
2143
|
+
'.fa-ko-fi': { text: '\ue856', title: '\ue856' }
|
|
2144
|
+
'.fa-kubernetes': { text: '\ue857', title: '\ue857' }
|
|
2145
|
+
'.fa-postgresql': { text: '\ue858', title: '\ue858' }
|
|
2146
|
+
'.fa-scaleway': { text: '\ue859', title: '\ue859' }
|
|
2147
|
+
'.fa-venmo': { text: '\ue85a', title: '\ue85a' }
|
|
2148
|
+
'.fa-venmo-v': { text: '\ue85b', title: '\ue85b' }
|
|
2149
|
+
'.fa-unreal-engine': { text: '\ue85c', title: '\ue85c' }
|
|
2150
|
+
'.fa-globaleaks': { text: '\ue85d', title: '\ue85d' }
|
|
2151
|
+
'.fa-solana': { text: '\ue85e', title: '\ue85e' }
|
|
2152
|
+
'.fa-threema': { text: '\ue85f', title: '\ue85f' }
|
|
2153
|
+
'.fa-forgejo': { text: '\ue860', title: '\ue860' }
|
|
2154
|
+
'.fa-claude': { text: '\ue861', title: '\ue861' }
|
|
2155
|
+
'.fa-gitee': { text: '\ue863', title: '\ue863' }
|
|
2156
|
+
'.fa-xmpp': { text: '\ue864', title: '\ue864' }
|
|
2157
|
+
'.fa-fediverse': { text: '\ue865', title: '\ue865' }
|
|
2158
|
+
'.fa-tailwind-css': { text: '\ue866', title: '\ue866' }
|
|
2159
|
+
'.fa-arch-linux': { text: '\ue867', title: '\ue867' }
|
|
2160
|
+
'.fa-svelte': { text: '\ue868', title: '\ue868' }
|
|
2161
|
+
'.fa-hugging-face': { text: '\ue869', title: '\ue869' }
|
|
2162
|
+
'.fa-leetcode': { text: '\ue86a', title: '\ue86a' }
|
|
2163
|
+
'.fa-openstreetmap': { text: '\ue86b', title: '\ue86b' }
|
|
2164
|
+
'.fa-ultralytics': { text: '\ue86d', title: '\ue86d' }
|
|
2165
|
+
'.fa-ultralytics-hub': { text: '\ue86e', title: '\ue86e' }
|
|
2166
|
+
'.fa-ultralytics-yolo': { text: '\ue86f', title: '\ue86f' }
|
|
2167
|
+
'.fa-obsidian': { text: '\ue879', title: '\ue879' }
|
|
2168
|
+
'.fa-zoom': { text: '\ue87b', title: '\ue87b' }
|
|
2169
|
+
'.fa-vim': { text: '\ue88a', title: '\ue88a' }
|
|
2170
|
+
'.fa-symfonycasts': { text: '\ue8ab', title: '\ue8ab' }
|
|
2117
2171
|
'.fa-square-twitter': { text: '\uf081', title: '\uf081' }
|
|
2118
2172
|
'.fa-twitter-square': { text: '\uf081', title: '\uf081' }
|
|
2119
2173
|
'.fa-square-facebook': { text: '\uf082', title: '\uf082' }
|