@oxy.so/bloom 4.34.3 → 4.34.5
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/ai-chat.mdx +4 -0
- package/docs/app-shell.mdx +2 -0
- package/lib/commonjs/ai-chat/AiChatContainer.js +40 -25
- package/lib/commonjs/ai-chat/AiChatContainer.js.map +1 -1
- package/lib/commonjs/ai-chat/AiChatShell.js +219 -195
- package/lib/commonjs/ai-chat/AiChatShell.js.map +1 -1
- package/lib/commonjs/app-shell/AppShellSplit.js +29 -10
- package/lib/commonjs/app-shell/AppShellSplit.js.map +1 -1
- package/lib/commonjs/icons/remix/RiFormatClear.js +12 -0
- package/lib/commonjs/icons/remix/RiFormatClear.js.map +1 -0
- package/lib/commonjs/icons/remix/RiListOrdered.js +12 -0
- package/lib/commonjs/icons/remix/RiListOrdered.js.map +1 -0
- package/lib/commonjs/icons/remix/RiStrikethrough.js +12 -0
- package/lib/commonjs/icons/remix/RiStrikethrough.js.map +1 -0
- package/lib/commonjs/icons/remix/RiUnderline.js +12 -0
- package/lib/commonjs/icons/remix/RiUnderline.js.map +1 -0
- package/lib/commonjs/icons/remix/index.js +28 -0
- package/lib/commonjs/icons/remix/index.js.map +1 -1
- package/lib/module/ai-chat/AiChatContainer.js +41 -26
- package/lib/module/ai-chat/AiChatContainer.js.map +1 -1
- package/lib/module/ai-chat/AiChatShell.js +220 -196
- package/lib/module/ai-chat/AiChatShell.js.map +1 -1
- package/lib/module/app-shell/AppShellSplit.js +29 -10
- package/lib/module/app-shell/AppShellSplit.js.map +1 -1
- package/lib/module/icons/remix/RiFormatClear.js +9 -0
- package/lib/module/icons/remix/RiFormatClear.js.map +1 -0
- package/lib/module/icons/remix/RiListOrdered.js +9 -0
- package/lib/module/icons/remix/RiListOrdered.js.map +1 -0
- package/lib/module/icons/remix/RiStrikethrough.js +9 -0
- package/lib/module/icons/remix/RiStrikethrough.js.map +1 -0
- package/lib/module/icons/remix/RiUnderline.js +9 -0
- package/lib/module/icons/remix/RiUnderline.js.map +1 -0
- package/lib/module/icons/remix/index.js +4 -0
- package/lib/module/icons/remix/index.js.map +1 -1
- package/lib/typescript/commonjs/ai-chat/AiChatContainer.d.ts.map +1 -1
- package/lib/typescript/commonjs/ai-chat/AiChatShell.d.ts +1 -1
- package/lib/typescript/commonjs/ai-chat/AiChatShell.d.ts.map +1 -1
- package/lib/typescript/commonjs/ai-chat/types.d.ts +7 -0
- package/lib/typescript/commonjs/ai-chat/types.d.ts.map +1 -1
- package/lib/typescript/commonjs/app-shell/AppShellSplit.d.ts.map +1 -1
- package/lib/typescript/commonjs/app-shell/types.d.ts +2 -0
- package/lib/typescript/commonjs/app-shell/types.d.ts.map +1 -1
- package/lib/typescript/commonjs/icons/remix/RiFormatClear.d.ts +8 -0
- package/lib/typescript/commonjs/icons/remix/RiFormatClear.d.ts.map +1 -0
- package/lib/typescript/commonjs/icons/remix/RiListOrdered.d.ts +8 -0
- package/lib/typescript/commonjs/icons/remix/RiListOrdered.d.ts.map +1 -0
- package/lib/typescript/commonjs/icons/remix/RiStrikethrough.d.ts +8 -0
- package/lib/typescript/commonjs/icons/remix/RiStrikethrough.d.ts.map +1 -0
- package/lib/typescript/commonjs/icons/remix/RiUnderline.d.ts +8 -0
- package/lib/typescript/commonjs/icons/remix/RiUnderline.d.ts.map +1 -0
- package/lib/typescript/commonjs/icons/remix/index.d.ts +4 -0
- package/lib/typescript/commonjs/icons/remix/index.d.ts.map +1 -1
- package/lib/typescript/module/ai-chat/AiChatContainer.d.ts.map +1 -1
- package/lib/typescript/module/ai-chat/AiChatShell.d.ts +1 -1
- package/lib/typescript/module/ai-chat/AiChatShell.d.ts.map +1 -1
- package/lib/typescript/module/ai-chat/types.d.ts +7 -0
- package/lib/typescript/module/ai-chat/types.d.ts.map +1 -1
- package/lib/typescript/module/app-shell/AppShellSplit.d.ts.map +1 -1
- package/lib/typescript/module/app-shell/types.d.ts +2 -0
- package/lib/typescript/module/app-shell/types.d.ts.map +1 -1
- package/lib/typescript/module/icons/remix/RiFormatClear.d.ts +8 -0
- package/lib/typescript/module/icons/remix/RiFormatClear.d.ts.map +1 -0
- package/lib/typescript/module/icons/remix/RiListOrdered.d.ts +8 -0
- package/lib/typescript/module/icons/remix/RiListOrdered.d.ts.map +1 -0
- package/lib/typescript/module/icons/remix/RiStrikethrough.d.ts +8 -0
- package/lib/typescript/module/icons/remix/RiStrikethrough.d.ts.map +1 -0
- package/lib/typescript/module/icons/remix/RiUnderline.d.ts +8 -0
- package/lib/typescript/module/icons/remix/RiUnderline.d.ts.map +1 -0
- package/lib/typescript/module/icons/remix/index.d.ts +4 -0
- package/lib/typescript/module/icons/remix/index.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/ai-chat/AiChatContainer.tsx +13 -0
- package/src/ai-chat/AiChatShell.tsx +23 -4
- package/src/ai-chat/types.ts +7 -0
- package/src/app-shell/AppShellSplit.tsx +21 -11
- package/src/app-shell/types.ts +2 -0
- package/src/icons/remix/RiFormatClear.tsx +6 -0
- package/src/icons/remix/RiListOrdered.tsx +6 -0
- package/src/icons/remix/RiStrikethrough.tsx +6 -0
- package/src/icons/remix/RiUnderline.tsx +6 -0
- package/src/icons/remix/index.ts +4 -0
|
@@ -21,6 +21,7 @@ import {
|
|
|
21
21
|
} from 'react-native';
|
|
22
22
|
import Animated, { useAnimatedStyle, useSharedValue } from 'react-native-reanimated';
|
|
23
23
|
|
|
24
|
+
import { SurfaceLevelProvider, surfaceFillVars, useSurfaceFill, useSurfaceLevelValue } from '../styles/surface-levels';
|
|
24
25
|
import { AgentThinking } from '../agent-thinking';
|
|
25
26
|
import { Breadcrumb, BreadcrumbItem } from '../breadcrumb';
|
|
26
27
|
import { RiFolderLine } from '../icons/remix/RiFolderLine';
|
|
@@ -138,6 +139,13 @@ export function AiChatContainerBase({
|
|
|
138
139
|
const l = useMemo(() => ({ ...DEFAULT_LABELS, ...labels }), [labels]);
|
|
139
140
|
const documentScroll = useAiChatShell()?.documentScroll ?? false;
|
|
140
141
|
const gutterColor = useContext(AiChatDocumentGutterContext);
|
|
142
|
+
const parentFill = useSurfaceFill();
|
|
143
|
+
const parentLevel = useSurfaceLevelValue();
|
|
144
|
+
const styleFill = StyleSheet.flatten(style)?.backgroundColor;
|
|
145
|
+
const ownFill = typeof styleFill === 'string' && styleFill !== 'transparent'
|
|
146
|
+
? styleFill
|
|
147
|
+
: surface && styleFill !== 'transparent' ? palette.secondary : parentFill;
|
|
148
|
+
const surfaceLevel = surface ? 1 : parentLevel;
|
|
141
149
|
|
|
142
150
|
const hasCrumbRow = title != null || project != null || onShare || onMore || actions != null;
|
|
143
151
|
const crumbRow = hasCrumbRow ? (
|
|
@@ -194,6 +202,7 @@ export function AiChatContainerBase({
|
|
|
194
202
|
overflow: 'hidden',
|
|
195
203
|
borderRadius: CONTAINER_RADIUS,
|
|
196
204
|
backgroundColor: surface ? palette.secondary : 'transparent',
|
|
205
|
+
...surfaceFillVars(ownFill),
|
|
197
206
|
},
|
|
198
207
|
style,
|
|
199
208
|
];
|
|
@@ -224,6 +233,7 @@ export function AiChatContainerBase({
|
|
|
224
233
|
|
|
225
234
|
if (floatingChrome) {
|
|
226
235
|
return (
|
|
236
|
+
<SurfaceLevelProvider level={surfaceLevel} fill={ownFill}>
|
|
227
237
|
<FloatingChrome
|
|
228
238
|
testID={testID}
|
|
229
239
|
rootStyle={rootStyle}
|
|
@@ -234,10 +244,12 @@ export function AiChatContainerBase({
|
|
|
234
244
|
fadeColor={surface ? palette.secondary : null}>
|
|
235
245
|
{children}
|
|
236
246
|
</FloatingChrome>
|
|
247
|
+
</SurfaceLevelProvider>
|
|
237
248
|
);
|
|
238
249
|
}
|
|
239
250
|
|
|
240
251
|
return (
|
|
252
|
+
<SurfaceLevelProvider level={surfaceLevel} fill={ownFill}>
|
|
241
253
|
<View testID={testID} style={rootStyle}>
|
|
242
254
|
{backgroundLayer}
|
|
243
255
|
{header}
|
|
@@ -249,6 +261,7 @@ export function AiChatContainerBase({
|
|
|
249
261
|
{footerBody}
|
|
250
262
|
</View>
|
|
251
263
|
</View>
|
|
264
|
+
</SurfaceLevelProvider>
|
|
252
265
|
);
|
|
253
266
|
}
|
|
254
267
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';
|
|
1
|
+
import React, { useCallback, useContext, useEffect, useMemo, useRef, useState } from 'react';
|
|
2
2
|
import {
|
|
3
3
|
PanResponder,
|
|
4
4
|
Platform,
|
|
@@ -18,6 +18,8 @@ import Animated, {
|
|
|
18
18
|
withTiming,
|
|
19
19
|
} from 'react-native-reanimated';
|
|
20
20
|
|
|
21
|
+
import { SafeAreaInsetsContext } from 'react-native-safe-area-context';
|
|
22
|
+
import { BottomBarSlotContext } from '../layout/bottom-bar-slot';
|
|
21
23
|
import { Button } from '../button';
|
|
22
24
|
import { usePanelInteraction } from './use-panel-interaction';
|
|
23
25
|
import { useControllableState } from '../hooks/use-controllable-state';
|
|
@@ -39,6 +41,8 @@ import {
|
|
|
39
41
|
} from './shared';
|
|
40
42
|
import type { AiChatMobileHeaderProps, AiChatResizeHandleProps, AiChatShellProps } from './types';
|
|
41
43
|
|
|
44
|
+
const NO_SAFE_INSETS = { top: 0, right: 0, bottom: 0, left: 0 };
|
|
45
|
+
|
|
42
46
|
const REVEAL_EASE = Easing.bezier(0.42, 0, 0.58, 1);
|
|
43
47
|
const REVEAL_MS = 325;
|
|
44
48
|
const REVEAL_OFFSET = 272;
|
|
@@ -335,6 +339,7 @@ export function AiChatShell({
|
|
|
335
339
|
onPanelOpenChange,
|
|
336
340
|
background,
|
|
337
341
|
surface = true,
|
|
342
|
+
safeArea = false,
|
|
338
343
|
scroll = 'container',
|
|
339
344
|
labels,
|
|
340
345
|
style,
|
|
@@ -342,6 +347,10 @@ export function AiChatShell({
|
|
|
342
347
|
}: AiChatShellProps) {
|
|
343
348
|
useAiChatWebCss();
|
|
344
349
|
const palette = useAiChatPalette();
|
|
350
|
+
const deviceInsets = useContext(SafeAreaInsetsContext);
|
|
351
|
+
const inheritedBottomInset = useContext(BottomBarSlotContext);
|
|
352
|
+
const ownsSafeArea = safeArea && Platform.OS !== 'web';
|
|
353
|
+
const safeInsets = ownsSafeArea ? deviceInsets ?? NO_SAFE_INSETS : NO_SAFE_INSETS;
|
|
345
354
|
const reducedMotion = useReducedMotion();
|
|
346
355
|
const l = useMemo(() => ({ ...DEFAULT_LABELS, ...labels }), [labels]);
|
|
347
356
|
const { width: windowWidth } = useWindowDimensions();
|
|
@@ -534,7 +543,7 @@ export function AiChatShell({
|
|
|
534
543
|
drawer.value = reducedMotion ? target : withTiming(target, { duration: DRAWER_MS, easing: DRAWER_EASE });
|
|
535
544
|
}, [panelOpen, reducedMotion, drawer]);
|
|
536
545
|
const [shellWidth, setShellWidth] = useState(windowWidth);
|
|
537
|
-
const drawerWidth = Math.min(410, shellWidth - 12);
|
|
546
|
+
const drawerWidth = Math.min(410, shellWidth - safeInsets.left - safeInsets.right - 12);
|
|
538
547
|
const backdropStyle = useAnimatedStyle(() => ({ opacity: drawer.value }), [drawer]);
|
|
539
548
|
const drawerStyle = useAnimatedStyle(
|
|
540
549
|
() => ({ transform: [{ translateX: drawerWidth * 1.1 * (1 - drawer.value) }] }),
|
|
@@ -591,12 +600,19 @@ export function AiChatShell({
|
|
|
591
600
|
flexDirection: 'row',
|
|
592
601
|
gap: 16,
|
|
593
602
|
padding: SHELL_GUTTER,
|
|
603
|
+
...(ownsSafeArea ? {
|
|
604
|
+
paddingTop: SHELL_GUTTER + safeInsets.top,
|
|
605
|
+
paddingRight: SHELL_GUTTER + safeInsets.right,
|
|
606
|
+
paddingBottom: SHELL_GUTTER + safeInsets.bottom,
|
|
607
|
+
paddingLeft: SHELL_GUTTER + safeInsets.left,
|
|
608
|
+
} : null),
|
|
594
609
|
backgroundColor: surface ? palette.full : 'transparent',
|
|
595
610
|
};
|
|
596
611
|
|
|
597
612
|
const veil = palette.isDark ? 'rgba(255, 255, 255, 0.05)' : 'rgba(0, 0, 0, 0.1)';
|
|
598
613
|
|
|
599
614
|
return (
|
|
615
|
+
<BottomBarSlotContext.Provider value={ownsSafeArea ? safeInsets.bottom : inheritedBottomInset}>
|
|
600
616
|
<AiChatShellContext.Provider value={shellState}>
|
|
601
617
|
<AiChatDocumentGutterContext.Provider value={documentScroll && surface ? palette.full : null}>
|
|
602
618
|
<View
|
|
@@ -615,7 +631,7 @@ export function AiChatShell({
|
|
|
615
631
|
ref={navRef}
|
|
616
632
|
{...(navOpen ? null : CLOSED_LAYER)}
|
|
617
633
|
pointerEvents={navOpen ? 'box-none' : 'none'}
|
|
618
|
-
style={{ position: overlayPosition, top: 0, bottom: 0, left:
|
|
634
|
+
style={{ position: overlayPosition, top: 0, bottom: 0, left: safeInsets.left, zIndex: 10, width: 272, paddingTop: 12 + safeInsets.top, paddingBottom: 12 + safeInsets.bottom, paddingLeft: 6 }}>
|
|
619
635
|
<Animated.View
|
|
620
636
|
pointerEvents={navOpen ? 'auto' : 'none'}
|
|
621
637
|
style={[{ height: '100%', width: 260, transformOrigin: 'left' }, railStyle]}>
|
|
@@ -727,11 +743,13 @@ export function AiChatShell({
|
|
|
727
743
|
position: 'absolute',
|
|
728
744
|
top: 0,
|
|
729
745
|
bottom: 0,
|
|
730
|
-
right:
|
|
746
|
+
right: safeInsets.right,
|
|
731
747
|
width: drawerWidth,
|
|
732
748
|
flexDirection: 'column',
|
|
733
749
|
backgroundColor: palette.full,
|
|
734
750
|
padding: 12,
|
|
751
|
+
paddingTop: 12 + safeInsets.top,
|
|
752
|
+
paddingBottom: 12 + safeInsets.bottom,
|
|
735
753
|
boxShadow: palette.shadowSidebar,
|
|
736
754
|
},
|
|
737
755
|
drawerStyle,
|
|
@@ -758,6 +776,7 @@ export function AiChatShell({
|
|
|
758
776
|
</View>
|
|
759
777
|
</AiChatDocumentGutterContext.Provider>
|
|
760
778
|
</AiChatShellContext.Provider>
|
|
779
|
+
</BottomBarSlotContext.Provider>
|
|
761
780
|
);
|
|
762
781
|
}
|
|
763
782
|
|
package/src/ai-chat/types.ts
CHANGED
|
@@ -525,6 +525,13 @@ export interface AiChatShellProps {
|
|
|
525
525
|
* Default `true`; `false` leaves both transparent.
|
|
526
526
|
*/
|
|
527
527
|
surface?: boolean;
|
|
528
|
+
/**
|
|
529
|
+
* Own all four native device safe-area edges in the shell frame and drawers.
|
|
530
|
+
* Default false; web is unchanged. Use PageHeader safeArea={false} inside
|
|
531
|
+
* this shell. BottomBar automatically excludes the bottom inset supplied
|
|
532
|
+
* here; modal descendants retain the original device inset context.
|
|
533
|
+
*/
|
|
534
|
+
safeArea?: boolean;
|
|
528
535
|
/**
|
|
529
536
|
* What scrolls the page — `AppShell`'s contract.
|
|
530
537
|
*
|
|
@@ -19,6 +19,7 @@ import { ScrollView, View } from 'react-native';
|
|
|
19
19
|
|
|
20
20
|
import { AiChatResizeHandle } from '../ai-chat/AiChatShell';
|
|
21
21
|
import { Z_INDEX } from '../styles/z-index';
|
|
22
|
+
import { space } from '../styles/tokens';
|
|
22
23
|
import { useTheme } from '../theme/use-theme';
|
|
23
24
|
|
|
24
25
|
import type { AppShellSplitPanesProps } from './types';
|
|
@@ -50,6 +51,7 @@ function Pane({
|
|
|
50
51
|
}
|
|
51
52
|
|
|
52
53
|
const AppShellSplitPanesComponent: React.FC<AppShellSplitPanesProps> = ({
|
|
54
|
+
variant = 'joined',
|
|
53
55
|
list,
|
|
54
56
|
detail,
|
|
55
57
|
info,
|
|
@@ -98,11 +100,13 @@ const AppShellSplitPanesComponent: React.FC<AppShellSplitPanesProps> = ({
|
|
|
98
100
|
* hit test at the divider's centre returned the pane, and the drag never
|
|
99
101
|
* started. Raising the DIVIDER lifts the whole context over both panes.
|
|
100
102
|
*/
|
|
103
|
+
const separated = variant === 'separated';
|
|
101
104
|
const divider = {
|
|
102
|
-
width: 1,
|
|
105
|
+
width: separated ? space.md : 1,
|
|
106
|
+
flexShrink: 0,
|
|
103
107
|
alignSelf: 'stretch' as const,
|
|
104
108
|
zIndex: Z_INDEX.floating,
|
|
105
|
-
backgroundColor: theme.colors.border,
|
|
109
|
+
backgroundColor: separated ? 'transparent' : theme.colors.border,
|
|
106
110
|
};
|
|
107
111
|
// Only the panes that are actually drawn count: alone, a pane fills the row.
|
|
108
112
|
const solo = [showList, showDetail, showInfo].filter(Boolean).length === 1;
|
|
@@ -119,15 +123,21 @@ const AppShellSplitPanesComponent: React.FC<AppShellSplitPanesProps> = ({
|
|
|
119
123
|
</Pane>
|
|
120
124
|
) : null}
|
|
121
125
|
{showList && !solo ? (
|
|
122
|
-
<View style={divider}>
|
|
126
|
+
<View style={divider} testID={testID ? `${testID}-list-gap` : undefined}>
|
|
123
127
|
{resizable ? (
|
|
124
|
-
<
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
128
|
+
<View
|
|
129
|
+
pointerEvents="box-none"
|
|
130
|
+
testID={testID ? `${testID}-resize-anchor` : undefined}
|
|
131
|
+
style={separated ? { position: 'absolute', top: 0, bottom: 0, left: '50%', width: 0 } : { flex: 1 }}
|
|
132
|
+
>
|
|
133
|
+
<AiChatResizeHandle
|
|
134
|
+
label={resizeLabel}
|
|
135
|
+
onResizeStart={onResizeStart}
|
|
136
|
+
onResize={onResize}
|
|
137
|
+
onNudge={onNudge}
|
|
138
|
+
testID={testID ? `${testID}-divider` : undefined}
|
|
139
|
+
/>
|
|
140
|
+
</View>
|
|
131
141
|
) : null}
|
|
132
142
|
</View>
|
|
133
143
|
) : null}
|
|
@@ -140,7 +150,7 @@ const AppShellSplitPanesComponent: React.FC<AppShellSplitPanesProps> = ({
|
|
|
140
150
|
{detail}
|
|
141
151
|
</Pane>
|
|
142
152
|
) : null}
|
|
143
|
-
{showInfo && !solo ? <View style={divider} /> : null}
|
|
153
|
+
{showInfo && showDetail && !solo ? <View style={divider} testID={testID ? `${testID}-info-gap` : undefined} /> : null}
|
|
144
154
|
{showInfo ? (
|
|
145
155
|
<Pane
|
|
146
156
|
testID={testID ? `${testID}-pane-info` : undefined}
|
package/src/app-shell/types.ts
CHANGED
|
@@ -380,6 +380,8 @@ export type AppShellProps = Omit<AppShellEngineProps, 'scroll'> & AppShellNaviga
|
|
|
380
380
|
|
|
381
381
|
/** A bounded list/detail/info layout, independent of navigation or surfaces. */
|
|
382
382
|
export interface AppShellSplitPanesProps {
|
|
383
|
+
/** Joined uses hairline dividers (default); separated leaves a 12px gutter for independent panel surfaces. */
|
|
384
|
+
variant?: 'joined' | 'separated';
|
|
383
385
|
list?: ReactNode;
|
|
384
386
|
detail?: ReactNode;
|
|
385
387
|
info?: ReactNode;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { createSinglePathSVG } from '../TEMPLATE';
|
|
2
|
+
|
|
3
|
+
/** Remix Icon `format-clear` (Editor). */
|
|
4
|
+
export const RiFormatClear = createSinglePathSVG({
|
|
5
|
+
path: "M12.6512 14.0654L11.6047 20H9.57389L10.9247 12.339L3.51465 4.92892L4.92886 3.51471L20.4852 19.0711L19.071 20.4853L12.6512 14.0654ZM11.7727 7.53009L12.0425 5.99999H10.2426L8.24257 3.99999H19.9999V5.99999H14.0733L13.4991 9.25652L11.7727 7.53009Z",
|
|
6
|
+
});
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { createSinglePathSVG } from '../TEMPLATE';
|
|
2
|
+
|
|
3
|
+
/** Remix Icon `list-ordered` (Editor). */
|
|
4
|
+
export const RiListOrdered = createSinglePathSVG({
|
|
5
|
+
path: "M8 4H21V6H8V4ZM5 3V6H6V7H3V6H4V4H3V3H5ZM3 14V11.5H5V11H3V10H6V12.5H4V13H6V14H3ZM5 19.5H3V18.5H5V18H3V17H6V21H3V20H5V19.5ZM8 11H21V13H8V11ZM8 18H21V20H8V18Z",
|
|
6
|
+
});
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { createSinglePathSVG } from '../TEMPLATE';
|
|
2
|
+
|
|
3
|
+
/** Remix Icon `strikethrough` (Editor). */
|
|
4
|
+
export const RiStrikethrough = createSinglePathSVG({
|
|
5
|
+
path: "M17.1538 14C17.3846 14.5161 17.5 15.0893 17.5 15.7196C17.5 17.0625 16.9762 18.1116 15.9286 18.867C14.8809 19.6223 13.4335 20 11.5862 20C9.94674 20 8.32335 19.6185 6.71592 18.8555V16.6009C8.23538 17.4783 9.7908 17.917 11.3822 17.917C13.9333 17.917 15.2128 17.1846 15.2208 15.7196C15.2208 15.0939 15.0049 14.5598 14.5731 14.1173C14.5339 14.0772 14.4939 14.0381 14.4531 14H3V12H21V14H17.1538ZM13.076 11H7.62908C7.4566 10.8433 7.29616 10.6692 7.14776 10.4778C6.71592 9.92084 6.5 9.24559 6.5 8.45207C6.5 7.21602 6.96583 6.165 7.89749 5.299C8.82916 4.43299 10.2706 4 12.2219 4C13.6934 4 15.1009 4.32808 16.4444 4.98426V7.13591C15.2448 6.44921 13.9293 6.10587 12.4978 6.10587C10.0187 6.10587 8.77917 6.88793 8.77917 8.45207C8.77917 8.87172 8.99709 9.23796 9.43293 9.55079C9.86878 9.86362 10.4066 10.1135 11.0463 10.3004C11.6665 10.4816 12.3431 10.7148 13.076 11H13.076Z",
|
|
6
|
+
});
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { createSinglePathSVG } from '../TEMPLATE';
|
|
2
|
+
|
|
3
|
+
/** Remix Icon `underline` (Editor). */
|
|
4
|
+
export const RiUnderline = createSinglePathSVG({
|
|
5
|
+
path: "M8 3V12C8 14.2091 9.79086 16 12 16C14.2091 16 16 14.2091 16 12V3H18V12C18 15.3137 15.3137 18 12 18C8.68629 18 6 15.3137 6 12V3H8ZM4 20H20V22H4V20Z",
|
|
6
|
+
});
|
package/src/icons/remix/index.ts
CHANGED
|
@@ -197,6 +197,7 @@ export { RiFolderOpenLine } from './RiFolderOpenLine';
|
|
|
197
197
|
export { RiFontSize } from './RiFontSize';
|
|
198
198
|
export { RiFontSize2 } from './RiFontSize2';
|
|
199
199
|
export { RiForbidLine } from './RiForbidLine';
|
|
200
|
+
export { RiFormatClear } from './RiFormatClear';
|
|
200
201
|
export { RiForward10Line } from './RiForward10Line';
|
|
201
202
|
export { RiForward15Line } from './RiForward15Line';
|
|
202
203
|
export { RiForward30Line } from './RiForward30Line';
|
|
@@ -259,6 +260,7 @@ export { RiLink } from './RiLink';
|
|
|
259
260
|
export { RiLinkM } from './RiLinkM';
|
|
260
261
|
export { RiLinkedinBoxFill } from './RiLinkedinBoxFill';
|
|
261
262
|
export { RiListCheck3 } from './RiListCheck3';
|
|
263
|
+
export { RiListOrdered } from './RiListOrdered';
|
|
262
264
|
export { RiListUnordered } from './RiListUnordered';
|
|
263
265
|
export { RiListView } from './RiListView';
|
|
264
266
|
export { RiLiveLine } from './RiLiveLine';
|
|
@@ -417,6 +419,7 @@ export { RiStethoscopeLine } from './RiStethoscopeLine';
|
|
|
417
419
|
export { RiStockLine } from './RiStockLine';
|
|
418
420
|
export { RiStopFill } from './RiStopFill';
|
|
419
421
|
export { RiStore2Line } from './RiStore2Line';
|
|
422
|
+
export { RiStrikethrough } from './RiStrikethrough';
|
|
420
423
|
export { RiSubtractLine } from './RiSubtractLine';
|
|
421
424
|
export { RiSubwayLine } from './RiSubwayLine';
|
|
422
425
|
export { RiSuitcaseLine } from './RiSuitcaseLine';
|
|
@@ -446,6 +449,7 @@ export { RiTreeLine } from './RiTreeLine';
|
|
|
446
449
|
export { RiTv2Line } from './RiTv2Line';
|
|
447
450
|
export { RiTvLine } from './RiTvLine';
|
|
448
451
|
export { RiTwitterXFill } from './RiTwitterXFill';
|
|
452
|
+
export { RiUnderline } from './RiUnderline';
|
|
449
453
|
export { RiUnpinLine } from './RiUnpinLine';
|
|
450
454
|
export { RiUpload2Line } from './RiUpload2Line';
|
|
451
455
|
export { RiUploadCloud2Line } from './RiUploadCloud2Line';
|