@rovula/ui 0.0.26 → 0.0.28
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/dist/cjs/bundle.css +185 -37
- package/dist/cjs/bundle.js +3 -3
- package/dist/cjs/bundle.js.map +1 -1
- package/dist/cjs/types/components/AlertDialog/{Alert.stories.d.ts → AlertDialog.stories.d.ts} +4 -0
- package/dist/cjs/types/components/Calendar/Calendar.stories.d.ts +7 -7
- package/dist/cjs/types/components/RadioGroup/RadioGroup.stories.d.ts +1 -1
- package/dist/cjs/types/components/Text/Text.d.ts +5 -6
- package/dist/cjs/types/components/Text/Text.stories.d.ts +10 -2
- package/dist/cjs/types/components/Toast/Toast.d.ts +17 -0
- package/dist/cjs/types/components/Toast/Toast.stories.d.ts +358 -0
- package/dist/cjs/types/components/Toast/Toast.styles.d.ts +12 -0
- package/dist/cjs/types/components/Toast/Toaster.d.ts +1 -0
- package/dist/cjs/types/components/Toast/useToast.d.ts +55 -0
- package/dist/cjs/types/components/Tooltip/Tooltip.d.ts +8 -0
- package/dist/cjs/types/components/Tooltip/Tooltip.stories.d.ts +59 -0
- package/dist/cjs/types/components/Tooltip/TooltipSimple.d.ts +13 -0
- package/dist/cjs/types/icons/material-icon/outline/AllOutIcon.d.ts +3 -0
- package/dist/cjs/types/icons/material-icon/outline/FormatAlignCenterIcon.d.ts +3 -0
- package/dist/cjs/types/icons/material-icon/outline/FormatAlignJustifyIcon.d.ts +3 -0
- package/dist/cjs/types/icons/material-icon/outline/FormatAlignLeftIcon.d.ts +3 -0
- package/dist/cjs/types/icons/material-icon/outline/FormatAlignRightIcon.d.ts +3 -0
- package/dist/cjs/types/icons/material-icon/outline/FormatBoldIcon.d.ts +3 -0
- package/dist/cjs/types/icons/material-icon/outline/FormatItalicIcon.d.ts +3 -0
- package/dist/cjs/types/icons/material-icon/outline/FormatListBulletedIcon.d.ts +3 -0
- package/dist/cjs/types/icons/material-icon/outline/FormatListNumberedIcon.d.ts +3 -0
- package/dist/cjs/types/icons/material-icon/outline/FormatUnderlinedIcon.d.ts +3 -0
- package/dist/cjs/types/icons/material-icon/outline/index.d.ts +10 -0
- package/dist/cjs/types/icons/material-icon/solid/AllOutIcon.d.ts +3 -0
- package/dist/cjs/types/icons/material-icon/solid/FormatAlignCenterIcon.d.ts +3 -0
- package/dist/cjs/types/icons/material-icon/solid/FormatAlignJustifyIcon.d.ts +3 -0
- package/dist/cjs/types/icons/material-icon/solid/FormatAlignLeftIcon.d.ts +3 -0
- package/dist/cjs/types/icons/material-icon/solid/FormatAlignRightIcon.d.ts +3 -0
- package/dist/cjs/types/icons/material-icon/solid/FormatBoldIcon.d.ts +3 -0
- package/dist/cjs/types/icons/material-icon/solid/FormatItalicIcon.d.ts +3 -0
- package/dist/cjs/types/icons/material-icon/solid/FormatListBulletedIcon.d.ts +3 -0
- package/dist/cjs/types/icons/material-icon/solid/FormatListNumberedIcon.d.ts +3 -0
- package/dist/cjs/types/icons/material-icon/solid/FormatUnderlinedIcon.d.ts +3 -0
- package/dist/cjs/types/icons/material-icon/solid/index.d.ts +10 -0
- package/dist/cjs/types/index.d.ts +5 -0
- package/dist/components/AlertDialog/{Alert.stories.js → AlertDialog.stories.js} +13 -1
- package/dist/components/Checkbox/Checkbox.js +5 -4
- package/dist/components/Icon/Icon.stories.js +10 -0
- package/dist/components/Popover/Popover.js +1 -1
- package/dist/components/RadioGroup/RadioGroup.js +1 -4
- package/dist/components/Switch/Switch.js +1 -1
- package/dist/components/Text/Text.js +3 -5
- package/dist/components/Toast/Toast.js +52 -0
- package/dist/components/Toast/Toast.stories.js +82 -0
- package/dist/components/Toast/Toast.styles.js +60 -0
- package/dist/components/Toast/Toaster.js +24 -0
- package/dist/components/Toast/useToast.js +121 -0
- package/dist/components/Tooltip/Tooltip.js +26 -0
- package/dist/components/Tooltip/Tooltip.stories.js +61 -0
- package/dist/components/Tooltip/TooltipSimple.js +18 -0
- package/dist/esm/bundle.css +185 -37
- package/dist/esm/bundle.js +3 -3
- package/dist/esm/bundle.js.map +1 -1
- package/dist/esm/types/components/AlertDialog/{Alert.stories.d.ts → AlertDialog.stories.d.ts} +4 -0
- package/dist/esm/types/components/Calendar/Calendar.stories.d.ts +7 -7
- package/dist/esm/types/components/RadioGroup/RadioGroup.stories.d.ts +1 -1
- package/dist/esm/types/components/Text/Text.d.ts +5 -6
- package/dist/esm/types/components/Text/Text.stories.d.ts +10 -2
- package/dist/esm/types/components/Toast/Toast.d.ts +17 -0
- package/dist/esm/types/components/Toast/Toast.stories.d.ts +358 -0
- package/dist/esm/types/components/Toast/Toast.styles.d.ts +12 -0
- package/dist/esm/types/components/Toast/Toaster.d.ts +1 -0
- package/dist/esm/types/components/Toast/useToast.d.ts +55 -0
- package/dist/esm/types/components/Tooltip/Tooltip.d.ts +8 -0
- package/dist/esm/types/components/Tooltip/Tooltip.stories.d.ts +59 -0
- package/dist/esm/types/components/Tooltip/TooltipSimple.d.ts +13 -0
- package/dist/esm/types/icons/material-icon/outline/AllOutIcon.d.ts +3 -0
- package/dist/esm/types/icons/material-icon/outline/FormatAlignCenterIcon.d.ts +3 -0
- package/dist/esm/types/icons/material-icon/outline/FormatAlignJustifyIcon.d.ts +3 -0
- package/dist/esm/types/icons/material-icon/outline/FormatAlignLeftIcon.d.ts +3 -0
- package/dist/esm/types/icons/material-icon/outline/FormatAlignRightIcon.d.ts +3 -0
- package/dist/esm/types/icons/material-icon/outline/FormatBoldIcon.d.ts +3 -0
- package/dist/esm/types/icons/material-icon/outline/FormatItalicIcon.d.ts +3 -0
- package/dist/esm/types/icons/material-icon/outline/FormatListBulletedIcon.d.ts +3 -0
- package/dist/esm/types/icons/material-icon/outline/FormatListNumberedIcon.d.ts +3 -0
- package/dist/esm/types/icons/material-icon/outline/FormatUnderlinedIcon.d.ts +3 -0
- package/dist/esm/types/icons/material-icon/outline/index.d.ts +10 -0
- package/dist/esm/types/icons/material-icon/solid/AllOutIcon.d.ts +3 -0
- package/dist/esm/types/icons/material-icon/solid/FormatAlignCenterIcon.d.ts +3 -0
- package/dist/esm/types/icons/material-icon/solid/FormatAlignJustifyIcon.d.ts +3 -0
- package/dist/esm/types/icons/material-icon/solid/FormatAlignLeftIcon.d.ts +3 -0
- package/dist/esm/types/icons/material-icon/solid/FormatAlignRightIcon.d.ts +3 -0
- package/dist/esm/types/icons/material-icon/solid/FormatBoldIcon.d.ts +3 -0
- package/dist/esm/types/icons/material-icon/solid/FormatItalicIcon.d.ts +3 -0
- package/dist/esm/types/icons/material-icon/solid/FormatListBulletedIcon.d.ts +3 -0
- package/dist/esm/types/icons/material-icon/solid/FormatListNumberedIcon.d.ts +3 -0
- package/dist/esm/types/icons/material-icon/solid/FormatUnderlinedIcon.d.ts +3 -0
- package/dist/esm/types/icons/material-icon/solid/index.d.ts +10 -0
- package/dist/esm/types/index.d.ts +5 -0
- package/dist/icons/material-icon/outline/AllOutIcon.js +3 -0
- package/dist/icons/material-icon/outline/FormatAlignCenterIcon.js +3 -0
- package/dist/icons/material-icon/outline/FormatAlignJustifyIcon.js +3 -0
- package/dist/icons/material-icon/outline/FormatAlignLeftIcon.js +3 -0
- package/dist/icons/material-icon/outline/FormatAlignRightIcon.js +3 -0
- package/dist/icons/material-icon/outline/FormatBoldIcon.js +3 -0
- package/dist/icons/material-icon/outline/FormatItalicIcon.js +3 -0
- package/dist/icons/material-icon/outline/FormatListBulletedIcon.js +3 -0
- package/dist/icons/material-icon/outline/FormatListNumberedIcon.js +3 -0
- package/dist/icons/material-icon/outline/FormatUnderlinedIcon.js +3 -0
- package/dist/icons/material-icon/outline/index.js +10 -0
- package/dist/icons/material-icon/solid/AllOutIcon.js +3 -0
- package/dist/icons/material-icon/solid/FormatAlignCenterIcon.js +3 -0
- package/dist/icons/material-icon/solid/FormatAlignJustifyIcon.js +3 -0
- package/dist/icons/material-icon/solid/FormatAlignLeftIcon.js +3 -0
- package/dist/icons/material-icon/solid/FormatAlignRightIcon.js +3 -0
- package/dist/icons/material-icon/solid/FormatBoldIcon.js +3 -0
- package/dist/icons/material-icon/solid/FormatItalicIcon.js +3 -0
- package/dist/icons/material-icon/solid/FormatListBulletedIcon.js +3 -0
- package/dist/icons/material-icon/solid/FormatListNumberedIcon.js +3 -0
- package/dist/icons/material-icon/solid/FormatUnderlinedIcon.js +3 -0
- package/dist/icons/material-icon/solid/index.js +10 -0
- package/dist/index.d.ts +94 -6
- package/dist/index.js +5 -0
- package/dist/src/theme/global.css +230 -46
- package/dist/theme/themes/xspector/state.css +1 -1
- package/package.json +4 -1
- package/src/components/AlertDialog/{Alert.stories.tsx → AlertDialog.stories.tsx} +41 -1
- package/src/components/Checkbox/Checkbox.tsx +9 -4
- package/src/components/Icon/Icon.stories.tsx +10 -0
- package/src/components/Popover/Popover.tsx +1 -1
- package/src/components/RadioGroup/RadioGroup.tsx +6 -7
- package/src/components/Switch/Switch.tsx +8 -5
- package/src/components/Text/Text.tsx +33 -40
- package/src/components/Toast/Toast.stories.tsx +144 -0
- package/src/components/Toast/Toast.styles.tsx +73 -0
- package/src/components/Toast/Toast.tsx +116 -0
- package/src/components/Toast/Toaster.tsx +50 -0
- package/src/components/Toast/useToast.ts +222 -0
- package/src/components/Tooltip/Tooltip.stories.tsx +152 -0
- package/src/components/Tooltip/Tooltip.tsx +38 -0
- package/src/components/Tooltip/TooltipSimple.tsx +46 -0
- package/src/icons/material-icon/outline/AllOutIcon.tsx +20 -0
- package/src/icons/material-icon/outline/FormatAlignCenterIcon.tsx +20 -0
- package/src/icons/material-icon/outline/FormatAlignJustifyIcon.tsx +20 -0
- package/src/icons/material-icon/outline/FormatAlignLeftIcon.tsx +20 -0
- package/src/icons/material-icon/outline/FormatAlignRightIcon.tsx +20 -0
- package/src/icons/material-icon/outline/FormatBoldIcon.tsx +20 -0
- package/src/icons/material-icon/outline/FormatItalicIcon.tsx +20 -0
- package/src/icons/material-icon/outline/FormatListBulletedIcon.tsx +20 -0
- package/src/icons/material-icon/outline/FormatListNumberedIcon.tsx +20 -0
- package/src/icons/material-icon/outline/FormatUnderlinedIcon.tsx +20 -0
- package/src/icons/material-icon/outline/index.ts +10 -0
- package/src/icons/material-icon/solid/AllOutIcon.tsx +20 -0
- package/src/icons/material-icon/solid/FormatAlignCenterIcon.tsx +20 -0
- package/src/icons/material-icon/solid/FormatAlignJustifyIcon.tsx +20 -0
- package/src/icons/material-icon/solid/FormatAlignLeftIcon.tsx +20 -0
- package/src/icons/material-icon/solid/FormatAlignRightIcon.tsx +20 -0
- package/src/icons/material-icon/solid/FormatBoldIcon.tsx +20 -0
- package/src/icons/material-icon/solid/FormatItalicIcon.tsx +20 -0
- package/src/icons/material-icon/solid/FormatListBulletedIcon.tsx +20 -0
- package/src/icons/material-icon/solid/FormatListNumberedIcon.tsx +20 -0
- package/src/icons/material-icon/solid/FormatUnderlinedIcon.tsx +20 -0
- package/src/icons/material-icon/solid/index.ts +10 -0
- package/src/index.ts +5 -0
- package/src/theme/themes/xspector/state.css +1 -1
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
// Inspired by react-hot-toast library
|
|
4
|
+
import * as React from "react";
|
|
5
|
+
import { ToastActionElement, ToastProps } from "./Toast";
|
|
6
|
+
|
|
7
|
+
const TOAST_LIMIT = 1;
|
|
8
|
+
const TOAST_REMOVE_DELAY = 6000;
|
|
9
|
+
|
|
10
|
+
type ToasterToast = ToastProps & {
|
|
11
|
+
id: string;
|
|
12
|
+
title?: React.ReactNode;
|
|
13
|
+
description?: React.ReactNode;
|
|
14
|
+
action?: ToastActionElement;
|
|
15
|
+
contentMode?: "vertical" | "horizontal";
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
type ToasterPosition =
|
|
19
|
+
| "top-center"
|
|
20
|
+
| "top-left"
|
|
21
|
+
| "top-right"
|
|
22
|
+
| "bottom-center"
|
|
23
|
+
| "bottom-left"
|
|
24
|
+
| "bottom-right"
|
|
25
|
+
| undefined;
|
|
26
|
+
|
|
27
|
+
const actionTypes = {
|
|
28
|
+
ADD_TOAST: "ADD_TOAST",
|
|
29
|
+
UPDATE_TOAST: "UPDATE_TOAST",
|
|
30
|
+
DISMISS_TOAST: "DISMISS_TOAST",
|
|
31
|
+
REMOVE_TOAST: "REMOVE_TOAST",
|
|
32
|
+
ADD_POSITION: "ADD_POSITION",
|
|
33
|
+
} as const;
|
|
34
|
+
|
|
35
|
+
let count = 0;
|
|
36
|
+
|
|
37
|
+
function genId() {
|
|
38
|
+
count = (count + 1) % Number.MAX_SAFE_INTEGER;
|
|
39
|
+
return count.toString();
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
type ActionType = typeof actionTypes;
|
|
43
|
+
|
|
44
|
+
type Action =
|
|
45
|
+
| {
|
|
46
|
+
type: ActionType["ADD_TOAST"];
|
|
47
|
+
toast: ToasterToast;
|
|
48
|
+
}
|
|
49
|
+
| {
|
|
50
|
+
type: ActionType["UPDATE_TOAST"];
|
|
51
|
+
toast: Partial<ToasterToast>;
|
|
52
|
+
}
|
|
53
|
+
| {
|
|
54
|
+
type: ActionType["DISMISS_TOAST"];
|
|
55
|
+
toastId?: ToasterToast["id"];
|
|
56
|
+
}
|
|
57
|
+
| {
|
|
58
|
+
type: ActionType["REMOVE_TOAST"];
|
|
59
|
+
toastId?: ToasterToast["id"];
|
|
60
|
+
}
|
|
61
|
+
| {
|
|
62
|
+
type: ActionType["ADD_POSITION"];
|
|
63
|
+
position?: ToasterPosition;
|
|
64
|
+
};
|
|
65
|
+
|
|
66
|
+
interface State {
|
|
67
|
+
toasts: ToasterToast[];
|
|
68
|
+
position?: ToasterPosition;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
const toastTimeouts = new Map<string, ReturnType<typeof setTimeout>>();
|
|
72
|
+
|
|
73
|
+
const addToRemoveQueue = (toastId: string) => {
|
|
74
|
+
if (toastTimeouts.has(toastId)) {
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
const timeout = setTimeout(() => {
|
|
79
|
+
toastTimeouts.delete(toastId);
|
|
80
|
+
dispatch({
|
|
81
|
+
type: "REMOVE_TOAST",
|
|
82
|
+
toastId: toastId,
|
|
83
|
+
});
|
|
84
|
+
}, TOAST_REMOVE_DELAY);
|
|
85
|
+
|
|
86
|
+
toastTimeouts.set(toastId, timeout);
|
|
87
|
+
};
|
|
88
|
+
|
|
89
|
+
export const reducer = (state: State, action: Action): State => {
|
|
90
|
+
switch (action.type) {
|
|
91
|
+
case "ADD_TOAST":
|
|
92
|
+
return {
|
|
93
|
+
...state,
|
|
94
|
+
toasts: [action.toast, ...state.toasts].slice(0, TOAST_LIMIT),
|
|
95
|
+
};
|
|
96
|
+
|
|
97
|
+
case "UPDATE_TOAST":
|
|
98
|
+
return {
|
|
99
|
+
...state,
|
|
100
|
+
toasts: state.toasts.map((t) =>
|
|
101
|
+
t.id === action.toast.id ? { ...t, ...action.toast } : t
|
|
102
|
+
),
|
|
103
|
+
};
|
|
104
|
+
|
|
105
|
+
case "DISMISS_TOAST": {
|
|
106
|
+
const { toastId } = action;
|
|
107
|
+
|
|
108
|
+
// ! Side effects ! - This could be extracted into a dismissToast() action,
|
|
109
|
+
// but I'll keep it here for simplicity
|
|
110
|
+
if (toastId) {
|
|
111
|
+
addToRemoveQueue(toastId);
|
|
112
|
+
} else {
|
|
113
|
+
state.toasts.forEach((toast) => {
|
|
114
|
+
addToRemoveQueue(toast.id);
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
return {
|
|
119
|
+
...state,
|
|
120
|
+
toasts: state.toasts.map((t) =>
|
|
121
|
+
t.id === toastId || toastId === undefined
|
|
122
|
+
? {
|
|
123
|
+
...t,
|
|
124
|
+
open: false,
|
|
125
|
+
}
|
|
126
|
+
: t
|
|
127
|
+
),
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
case "REMOVE_TOAST":
|
|
131
|
+
if (action.toastId === undefined) {
|
|
132
|
+
return {
|
|
133
|
+
...state,
|
|
134
|
+
toasts: [],
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
return {
|
|
138
|
+
...state,
|
|
139
|
+
toasts: state.toasts.filter((t) => t.id !== action.toastId),
|
|
140
|
+
};
|
|
141
|
+
case "ADD_POSITION":
|
|
142
|
+
return {
|
|
143
|
+
...state,
|
|
144
|
+
position: action.position,
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
};
|
|
148
|
+
|
|
149
|
+
const listeners: Array<(state: State) => void> = [];
|
|
150
|
+
|
|
151
|
+
let memoryState: State = { toasts: [], position: undefined };
|
|
152
|
+
|
|
153
|
+
function dispatch(action: Action) {
|
|
154
|
+
memoryState = reducer(memoryState, action);
|
|
155
|
+
listeners.forEach((listener) => {
|
|
156
|
+
listener(memoryState);
|
|
157
|
+
});
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
type Toast = Omit<ToasterToast, "id">;
|
|
161
|
+
|
|
162
|
+
function toast({ ...props }: Toast) {
|
|
163
|
+
const id = genId();
|
|
164
|
+
|
|
165
|
+
const update = (props: ToasterToast) =>
|
|
166
|
+
dispatch({
|
|
167
|
+
type: "UPDATE_TOAST",
|
|
168
|
+
toast: { ...props, id },
|
|
169
|
+
});
|
|
170
|
+
const dismiss = () => dispatch({ type: "DISMISS_TOAST", toastId: id });
|
|
171
|
+
|
|
172
|
+
dispatch({
|
|
173
|
+
type: "ADD_TOAST",
|
|
174
|
+
toast: {
|
|
175
|
+
...props,
|
|
176
|
+
id,
|
|
177
|
+
open: true,
|
|
178
|
+
onOpenChange: (open) => {
|
|
179
|
+
if (!open) dismiss();
|
|
180
|
+
},
|
|
181
|
+
},
|
|
182
|
+
});
|
|
183
|
+
|
|
184
|
+
return {
|
|
185
|
+
id: id,
|
|
186
|
+
dismiss,
|
|
187
|
+
update,
|
|
188
|
+
};
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
type ToastOptions = {
|
|
192
|
+
position?: State["position"];
|
|
193
|
+
};
|
|
194
|
+
|
|
195
|
+
function useToast(options?: ToastOptions) {
|
|
196
|
+
const [state, setState] = React.useState<State>(memoryState);
|
|
197
|
+
|
|
198
|
+
React.useEffect(() => {
|
|
199
|
+
listeners.push(setState);
|
|
200
|
+
return () => {
|
|
201
|
+
const index = listeners.indexOf(setState);
|
|
202
|
+
if (index > -1) {
|
|
203
|
+
listeners.splice(index, 1);
|
|
204
|
+
}
|
|
205
|
+
};
|
|
206
|
+
}, [state]);
|
|
207
|
+
|
|
208
|
+
React.useEffect(() => {
|
|
209
|
+
dispatch({
|
|
210
|
+
type: "ADD_POSITION",
|
|
211
|
+
position: options?.position,
|
|
212
|
+
});
|
|
213
|
+
}, [options?.position]);
|
|
214
|
+
|
|
215
|
+
return {
|
|
216
|
+
...state,
|
|
217
|
+
toast,
|
|
218
|
+
dismiss: (toastId?: string) => dispatch({ type: "DISMISS_TOAST", toastId }),
|
|
219
|
+
};
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
export { useToast, toast };
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import type { Meta, StoryObj } from "@storybook/react";
|
|
3
|
+
import { useArgs } from "@storybook/preview-api";
|
|
4
|
+
import {
|
|
5
|
+
Tooltip,
|
|
6
|
+
TooltipArrow,
|
|
7
|
+
TooltipContent,
|
|
8
|
+
TooltipProvider,
|
|
9
|
+
TooltipTrigger,
|
|
10
|
+
} from "./Tooltip";
|
|
11
|
+
import Button from "../Button/Button";
|
|
12
|
+
import { TooltipSimple } from "./TooltipSimple";
|
|
13
|
+
|
|
14
|
+
const meta = {
|
|
15
|
+
title: "Components/Tooltip",
|
|
16
|
+
// component: TooltipProvider,
|
|
17
|
+
tags: ["react-docgen-typescript"],
|
|
18
|
+
parameters: {
|
|
19
|
+
layout: "fullscreen",
|
|
20
|
+
},
|
|
21
|
+
decorators: [
|
|
22
|
+
(Story) => (
|
|
23
|
+
<div className="p-5 flex w-full">
|
|
24
|
+
<Story />
|
|
25
|
+
</div>
|
|
26
|
+
),
|
|
27
|
+
],
|
|
28
|
+
} satisfies Meta<typeof Tooltip>;
|
|
29
|
+
|
|
30
|
+
export default meta;
|
|
31
|
+
|
|
32
|
+
export const Default = {
|
|
33
|
+
args: {
|
|
34
|
+
delayDuration: 700,
|
|
35
|
+
skipDelayDuration: 300,
|
|
36
|
+
disableHoverableContent: false,
|
|
37
|
+
},
|
|
38
|
+
render: (args: any) => {
|
|
39
|
+
console.log("args ", args);
|
|
40
|
+
const props: typeof args = {
|
|
41
|
+
...args,
|
|
42
|
+
};
|
|
43
|
+
return (
|
|
44
|
+
<div className="flex flex-row gap-4 w-full">
|
|
45
|
+
<div className="flex flex-1 justify-center items-center space-x-2">
|
|
46
|
+
<TooltipProvider
|
|
47
|
+
delayDuration={props.delayDuration}
|
|
48
|
+
skipDelayDuration={props.skipDelayDuration}
|
|
49
|
+
disableHoverableContent={props.disableHoverableContent}
|
|
50
|
+
>
|
|
51
|
+
<Tooltip>
|
|
52
|
+
<TooltipTrigger>Hover</TooltipTrigger>
|
|
53
|
+
<TooltipContent>
|
|
54
|
+
<p>Add to library</p>
|
|
55
|
+
<TooltipArrow className="m-0" />
|
|
56
|
+
</TooltipContent>
|
|
57
|
+
</Tooltip>
|
|
58
|
+
</TooltipProvider>
|
|
59
|
+
</div>
|
|
60
|
+
</div>
|
|
61
|
+
);
|
|
62
|
+
},
|
|
63
|
+
} satisfies StoryObj;
|
|
64
|
+
|
|
65
|
+
export const Position = {
|
|
66
|
+
argTypes: {
|
|
67
|
+
side: { control: "select", options: ["top", "right", "bottom", "left"] },
|
|
68
|
+
align: { control: "select", options: ["start", "center", "end"] },
|
|
69
|
+
},
|
|
70
|
+
args: {
|
|
71
|
+
side: "top",
|
|
72
|
+
align: "center",
|
|
73
|
+
sideOffset: 4,
|
|
74
|
+
},
|
|
75
|
+
render: function Render(args) {
|
|
76
|
+
return (
|
|
77
|
+
<div className="flex flex-row gap-4 h-full w-full">
|
|
78
|
+
<div className="flex flex-1 h-60 justify-center items-center space-x-2">
|
|
79
|
+
<TooltipProvider>
|
|
80
|
+
<Tooltip open>
|
|
81
|
+
<TooltipTrigger>Hover</TooltipTrigger>
|
|
82
|
+
<TooltipContent
|
|
83
|
+
side={args.side}
|
|
84
|
+
align={args.align}
|
|
85
|
+
sideOffset={args.sideOffset}
|
|
86
|
+
>
|
|
87
|
+
<p>Add to library</p>
|
|
88
|
+
<TooltipArrow className="m-0" />
|
|
89
|
+
</TooltipContent>
|
|
90
|
+
</Tooltip>
|
|
91
|
+
</TooltipProvider>
|
|
92
|
+
</div>
|
|
93
|
+
</div>
|
|
94
|
+
);
|
|
95
|
+
},
|
|
96
|
+
} satisfies StoryObj<{
|
|
97
|
+
side: "top" | "right" | "bottom" | "left";
|
|
98
|
+
align: "start" | "center" | "end";
|
|
99
|
+
sideOffset: number;
|
|
100
|
+
}>;
|
|
101
|
+
|
|
102
|
+
export const Controlled = {
|
|
103
|
+
args: {
|
|
104
|
+
open: false,
|
|
105
|
+
},
|
|
106
|
+
render: function Render(args) {
|
|
107
|
+
const [{ open }, updateArgs] = useArgs();
|
|
108
|
+
|
|
109
|
+
return (
|
|
110
|
+
<div className="flex flex-row gap-4 w-full">
|
|
111
|
+
<div className="flex flex-1 justify-center items-center space-x-2">
|
|
112
|
+
<TooltipProvider>
|
|
113
|
+
<Tooltip defaultOpen open={open}>
|
|
114
|
+
<TooltipTrigger asChild>
|
|
115
|
+
<Button
|
|
116
|
+
variant="outline"
|
|
117
|
+
onMouseOver={() => updateArgs({ open: true })}
|
|
118
|
+
onMouseLeave={() => updateArgs({ open: false })}
|
|
119
|
+
>
|
|
120
|
+
Hover
|
|
121
|
+
</Button>
|
|
122
|
+
</TooltipTrigger>
|
|
123
|
+
<TooltipContent>
|
|
124
|
+
<p>Add to library</p>
|
|
125
|
+
<TooltipArrow className="m-0" />
|
|
126
|
+
</TooltipContent>
|
|
127
|
+
</Tooltip>
|
|
128
|
+
</TooltipProvider>
|
|
129
|
+
</div>
|
|
130
|
+
</div>
|
|
131
|
+
);
|
|
132
|
+
},
|
|
133
|
+
} satisfies StoryObj;
|
|
134
|
+
|
|
135
|
+
export const Simple = {
|
|
136
|
+
args: {
|
|
137
|
+
open: false,
|
|
138
|
+
},
|
|
139
|
+
render: function Render(args) {
|
|
140
|
+
const [{ open }, updateArgs] = useArgs();
|
|
141
|
+
|
|
142
|
+
return (
|
|
143
|
+
<div className="flex flex-row gap-4 w-full">
|
|
144
|
+
<div className="flex flex-1 justify-center items-center space-x-2">
|
|
145
|
+
<TooltipSimple content="Tooltip content">
|
|
146
|
+
<button>Tooltip trigger</button>
|
|
147
|
+
</TooltipSimple>
|
|
148
|
+
</div>
|
|
149
|
+
</div>
|
|
150
|
+
);
|
|
151
|
+
},
|
|
152
|
+
} satisfies StoryObj;
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import * as React from "react";
|
|
4
|
+
import * as TooltipPrimitive from "@radix-ui/react-tooltip";
|
|
5
|
+
|
|
6
|
+
import { cn } from "@/utils/cn";
|
|
7
|
+
|
|
8
|
+
const TooltipProvider = TooltipPrimitive.Provider;
|
|
9
|
+
|
|
10
|
+
const Tooltip = TooltipPrimitive.Root;
|
|
11
|
+
|
|
12
|
+
const TooltipTrigger = TooltipPrimitive.Trigger;
|
|
13
|
+
|
|
14
|
+
const TooltipArrow = TooltipPrimitive.Arrow;
|
|
15
|
+
|
|
16
|
+
const TooltipContent = React.forwardRef<
|
|
17
|
+
React.ElementRef<typeof TooltipPrimitive.Content>,
|
|
18
|
+
React.ComponentPropsWithoutRef<typeof TooltipPrimitive.Content>
|
|
19
|
+
>(({ className, sideOffset = 4, ...props }, ref) => (
|
|
20
|
+
<TooltipPrimitive.Content
|
|
21
|
+
ref={ref}
|
|
22
|
+
sideOffset={sideOffset}
|
|
23
|
+
className={cn(
|
|
24
|
+
"z-50 overflow-hidden rounded-md bg-common-black px-3 py-1.5 typography-buttonMS text-common-white shadow-md animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",
|
|
25
|
+
className
|
|
26
|
+
)}
|
|
27
|
+
{...props}
|
|
28
|
+
/>
|
|
29
|
+
));
|
|
30
|
+
TooltipContent.displayName = TooltipPrimitive.Content.displayName;
|
|
31
|
+
|
|
32
|
+
export {
|
|
33
|
+
Tooltip,
|
|
34
|
+
TooltipTrigger,
|
|
35
|
+
TooltipContent,
|
|
36
|
+
TooltipProvider,
|
|
37
|
+
TooltipArrow,
|
|
38
|
+
};
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import React, { ReactNode } from "react";
|
|
4
|
+
import {
|
|
5
|
+
Tooltip,
|
|
6
|
+
TooltipTrigger,
|
|
7
|
+
TooltipContent,
|
|
8
|
+
TooltipArrow,
|
|
9
|
+
TooltipProvider,
|
|
10
|
+
} from "./Tooltip";
|
|
11
|
+
|
|
12
|
+
interface TooltipProps {
|
|
13
|
+
children: ReactNode;
|
|
14
|
+
content: ReactNode;
|
|
15
|
+
open?: boolean;
|
|
16
|
+
defaultOpen?: boolean;
|
|
17
|
+
onOpenChange?: (open: boolean) => void;
|
|
18
|
+
side?: "top" | "bottom" | "left" | "right";
|
|
19
|
+
align?: "start" | "center" | "end";
|
|
20
|
+
className?: string;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export function TooltipSimple({
|
|
24
|
+
children,
|
|
25
|
+
content,
|
|
26
|
+
open,
|
|
27
|
+
defaultOpen,
|
|
28
|
+
onOpenChange,
|
|
29
|
+
...props
|
|
30
|
+
}: TooltipProps) {
|
|
31
|
+
return (
|
|
32
|
+
<TooltipProvider>
|
|
33
|
+
<Tooltip
|
|
34
|
+
open={open}
|
|
35
|
+
defaultOpen={defaultOpen}
|
|
36
|
+
onOpenChange={onOpenChange}
|
|
37
|
+
>
|
|
38
|
+
<TooltipTrigger asChild>{children}</TooltipTrigger>
|
|
39
|
+
<TooltipContent side="top" align="center" {...props}>
|
|
40
|
+
{content}
|
|
41
|
+
<TooltipArrow width={11} height={5} />
|
|
42
|
+
</TooltipContent>
|
|
43
|
+
</Tooltip>
|
|
44
|
+
</TooltipProvider>
|
|
45
|
+
);
|
|
46
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import { SVGProps } from "react";
|
|
3
|
+
|
|
4
|
+
const AllOutIcon = (props: SVGProps<SVGSVGElement>) => (
|
|
5
|
+
<svg
|
|
6
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
7
|
+
width={24}
|
|
8
|
+
height={24}
|
|
9
|
+
viewBox="0 0 24 24"
|
|
10
|
+
fill="none"
|
|
11
|
+
{...props}
|
|
12
|
+
>
|
|
13
|
+
<path
|
|
14
|
+
fill="currentColor"
|
|
15
|
+
d="M7 21H5c-.55 0-1.02-.196-1.413-.587A1.926 1.926 0 0 1 3 19v-2c0-.283.096-.52.288-.712A.967.967 0 0 1 4 16c.283 0 .52.096.713.288.191.191.287.429.287.712v2h2c.283 0 .52.096.713.288.191.191.287.429.287.712s-.096.52-.287.712A.967.967 0 0 1 7 21Zm12 0h-2a.968.968 0 0 1-.712-.288A.968.968 0 0 1 16 20c0-.283.096-.52.288-.712A.968.968 0 0 1 17 19h2v-2c0-.283.096-.52.288-.712A.968.968 0 0 1 20 16c.283 0 .52.096.712.288.192.191.288.429.288.712v2c0 .55-.196 1.02-.587 1.413A1.926 1.926 0 0 1 19 21Zm-7-2c-1.933 0-3.583-.683-4.95-2.05C5.683 15.583 5 13.933 5 12c0-1.933.683-3.583 2.05-4.95C8.417 5.683 10.067 5 12 5c1.933 0 3.583.683 4.95 2.05C18.317 8.417 19 10.067 19 12c0 1.933-.683 3.583-2.05 4.95C15.583 18.317 13.933 19 12 19ZM3 5c0-.55.196-1.02.587-1.413A1.926 1.926 0 0 1 5 3h2c.283 0 .52.096.713.288.191.191.287.429.287.712s-.096.52-.287.713A.968.968 0 0 1 7 5H5v2c0 .283-.096.52-.287.713A.968.968 0 0 1 4 8a.968.968 0 0 1-.712-.287A.968.968 0 0 1 3 7V5Zm17 3a.968.968 0 0 1-.712-.287A.967.967 0 0 1 19 7V5h-2a.968.968 0 0 1-.712-.287A.967.967 0 0 1 16 4c0-.283.096-.52.288-.712A.968.968 0 0 1 17 3h2c.55 0 1.02.196 1.413.587C20.803 3.98 21 4.45 21 5v2c0 .283-.096.52-.288.713A.968.968 0 0 1 20 8Z"
|
|
16
|
+
/>
|
|
17
|
+
</svg>
|
|
18
|
+
);
|
|
19
|
+
|
|
20
|
+
export default AllOutIcon;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import { SVGProps } from "react";
|
|
3
|
+
|
|
4
|
+
const FormatAlignCenterIcon = (props: SVGProps<SVGSVGElement>) => (
|
|
5
|
+
<svg
|
|
6
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
7
|
+
width={24}
|
|
8
|
+
height={24}
|
|
9
|
+
viewBox="0 0 24 24"
|
|
10
|
+
fill="none"
|
|
11
|
+
{...props}
|
|
12
|
+
>
|
|
13
|
+
<path
|
|
14
|
+
fill="currentColor"
|
|
15
|
+
d="M5.618 19a.597.597 0 0 1-.44-.178.598.598 0 0 1-.178-.44c0-.175.06-.322.178-.44a.598.598 0 0 1 .44-.177h12.764c.175 0 .322.059.44.177a.598.598 0 0 1 .178.44c0 .176-.06.322-.178.44a.597.597 0 0 1-.44.178H5.618Zm3.294-3.191a.597.597 0 0 1-.44-.178.598.598 0 0 1-.178-.44c0-.175.06-.322.178-.44a.598.598 0 0 1 .44-.178h6.176c.175 0 .322.06.44.178a.598.598 0 0 1 .178.44c0 .175-.06.322-.178.44a.598.598 0 0 1-.44.178H8.912Zm-3.294-3.191a.597.597 0 0 1-.44-.178A.598.598 0 0 1 5 12c0-.175.06-.322.178-.44a.597.597 0 0 1 .44-.178h12.764c.175 0 .322.06.44.178A.598.598 0 0 1 19 12c0 .175-.06.322-.178.44a.597.597 0 0 1-.44.178H5.618Zm3.294-3.192a.597.597 0 0 1-.44-.177.598.598 0 0 1-.178-.44c0-.176.06-.322.178-.44a.597.597 0 0 1 .44-.178h6.176c.175 0 .322.06.44.178a.598.598 0 0 1 .178.44c0 .175-.06.322-.178.44a.598.598 0 0 1-.44.177H8.912Zm-3.294-3.19a.597.597 0 0 1-.44-.178.598.598 0 0 1-.178-.44c0-.176.06-.322.178-.44A.597.597 0 0 1 5.618 5h12.764c.175 0 .322.06.44.178a.598.598 0 0 1 .178.44c0 .175-.06.322-.178.44a.597.597 0 0 1-.44.177H5.618Z"
|
|
16
|
+
/>
|
|
17
|
+
</svg>
|
|
18
|
+
);
|
|
19
|
+
|
|
20
|
+
export default FormatAlignCenterIcon;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import { SVGProps } from "react";
|
|
3
|
+
|
|
4
|
+
const FormatAlignJustifyIcon = (props: SVGProps<SVGSVGElement>) => (
|
|
5
|
+
<svg
|
|
6
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
7
|
+
width={24}
|
|
8
|
+
height={24}
|
|
9
|
+
viewBox="0 0 24 24"
|
|
10
|
+
fill="none"
|
|
11
|
+
{...props}
|
|
12
|
+
>
|
|
13
|
+
<path
|
|
14
|
+
fill="currentColor"
|
|
15
|
+
d="M5.618 19a.597.597 0 0 1-.44-.178.598.598 0 0 1-.178-.44c0-.175.06-.322.178-.44a.598.598 0 0 1 .44-.177h12.764c.175 0 .322.059.44.177a.598.598 0 0 1 .178.44c0 .176-.06.322-.178.44a.597.597 0 0 1-.44.178H5.618Zm0-3.191a.597.597 0 0 1-.44-.178.598.598 0 0 1-.178-.44c0-.175.06-.322.178-.44a.598.598 0 0 1 .44-.178h12.764c.175 0 .322.06.44.178a.598.598 0 0 1 .178.44c0 .175-.06.322-.178.44a.597.597 0 0 1-.44.178H5.618Zm0-3.191a.597.597 0 0 1-.44-.178A.598.598 0 0 1 5 12c0-.175.06-.322.178-.44a.597.597 0 0 1 .44-.178h12.764c.175 0 .322.06.44.178A.598.598 0 0 1 19 12c0 .175-.06.322-.178.44a.597.597 0 0 1-.44.178H5.618Zm0-3.192a.597.597 0 0 1-.44-.177.598.598 0 0 1-.178-.44c0-.176.06-.322.178-.44a.597.597 0 0 1 .44-.178h12.764c.175 0 .322.06.44.178a.598.598 0 0 1 .178.44c0 .175-.06.322-.178.44a.597.597 0 0 1-.44.177H5.618Zm0-3.19a.597.597 0 0 1-.44-.178.598.598 0 0 1-.178-.44c0-.176.06-.322.178-.44A.597.597 0 0 1 5.618 5h12.764c.175 0 .322.06.44.178a.598.598 0 0 1 .178.44c0 .175-.06.322-.178.44a.597.597 0 0 1-.44.177H5.618Z"
|
|
16
|
+
/>
|
|
17
|
+
</svg>
|
|
18
|
+
);
|
|
19
|
+
|
|
20
|
+
export default FormatAlignJustifyIcon;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import { SVGProps } from "react";
|
|
3
|
+
|
|
4
|
+
const FormatAlignLeftIcon = (props: SVGProps<SVGSVGElement>) => (
|
|
5
|
+
<svg
|
|
6
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
7
|
+
width={24}
|
|
8
|
+
height={24}
|
|
9
|
+
viewBox="0 0 24 24"
|
|
10
|
+
fill="none"
|
|
11
|
+
{...props}
|
|
12
|
+
>
|
|
13
|
+
<path
|
|
14
|
+
fill="currentColor"
|
|
15
|
+
d="M5.618 19a.597.597 0 0 1-.44-.178.598.598 0 0 1-.178-.44c0-.175.06-.322.178-.44a.598.598 0 0 1 .44-.177h12.764c.175 0 .322.059.44.177a.598.598 0 0 1 .178.44c0 .176-.06.322-.178.44a.597.597 0 0 1-.44.178H5.618Zm0-3.191a.597.597 0 0 1-.44-.178.598.598 0 0 1-.178-.44c0-.175.06-.322.178-.44a.598.598 0 0 1 .44-.178h7.823c.175 0 .322.06.44.178a.598.598 0 0 1 .178.44c0 .175-.06.322-.178.44a.597.597 0 0 1-.44.178H5.618Zm0-3.191a.597.597 0 0 1-.44-.178A.598.598 0 0 1 5 12c0-.175.06-.322.178-.44a.597.597 0 0 1 .44-.178h12.764c.175 0 .322.06.44.178A.598.598 0 0 1 19 12c0 .175-.06.322-.178.44a.597.597 0 0 1-.44.178H5.618Zm0-3.192a.597.597 0 0 1-.44-.177.598.598 0 0 1-.178-.44c0-.176.06-.322.178-.44a.597.597 0 0 1 .44-.178h7.823c.175 0 .322.06.44.178a.598.598 0 0 1 .178.44c0 .175-.06.322-.178.44a.597.597 0 0 1-.44.177H5.618Zm0-3.19a.597.597 0 0 1-.44-.178.598.598 0 0 1-.178-.44c0-.176.06-.322.178-.44A.597.597 0 0 1 5.618 5h12.764c.175 0 .322.06.44.178a.598.598 0 0 1 .178.44c0 .175-.06.322-.178.44a.597.597 0 0 1-.44.177H5.618Z"
|
|
16
|
+
/>
|
|
17
|
+
</svg>
|
|
18
|
+
);
|
|
19
|
+
|
|
20
|
+
export default FormatAlignLeftIcon;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import { SVGProps } from "react";
|
|
3
|
+
|
|
4
|
+
const FormatAlignRightIcon = (props: SVGProps<SVGSVGElement>) => (
|
|
5
|
+
<svg
|
|
6
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
7
|
+
width={24}
|
|
8
|
+
height={24}
|
|
9
|
+
viewBox="0 0 24 24"
|
|
10
|
+
fill="none"
|
|
11
|
+
{...props}
|
|
12
|
+
>
|
|
13
|
+
<path
|
|
14
|
+
fill="currentColor"
|
|
15
|
+
d="M5.618 6.235a.597.597 0 0 1-.44-.177.598.598 0 0 1-.178-.44c0-.176.06-.322.178-.44A.597.597 0 0 1 5.618 5h12.764c.175 0 .322.06.44.178a.598.598 0 0 1 .178.44c0 .175-.06.322-.178.44a.597.597 0 0 1-.44.177H5.618Zm4.94 3.191a.597.597 0 0 1-.44-.177.598.598 0 0 1-.177-.44c0-.176.06-.322.178-.44a.597.597 0 0 1 .44-.178h7.823c.175 0 .322.06.44.178a.598.598 0 0 1 .178.44c0 .175-.06.322-.178.44a.597.597 0 0 1-.44.177H10.56Zm-4.94 3.192a.597.597 0 0 1-.44-.178A.598.598 0 0 1 5 12c0-.175.06-.322.178-.44a.597.597 0 0 1 .44-.178h12.764c.175 0 .322.06.44.178A.598.598 0 0 1 19 12c0 .175-.06.322-.178.44a.597.597 0 0 1-.44.178H5.618Zm4.94 3.19a.597.597 0 0 1-.44-.177.597.597 0 0 1-.177-.44c0-.175.06-.322.178-.44a.597.597 0 0 1 .44-.178h7.823c.175 0 .322.06.44.178a.598.598 0 0 1 .178.44c0 .175-.06.322-.178.44a.597.597 0 0 1-.44.178H10.56ZM5.619 19a.597.597 0 0 1-.44-.178.598.598 0 0 1-.178-.44c0-.175.06-.322.178-.44a.598.598 0 0 1 .44-.177h12.764c.175 0 .322.059.44.177a.598.598 0 0 1 .178.44c0 .176-.06.322-.178.44a.597.597 0 0 1-.44.178H5.618Z"
|
|
16
|
+
/>
|
|
17
|
+
</svg>
|
|
18
|
+
);
|
|
19
|
+
|
|
20
|
+
export default FormatAlignRightIcon;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import { SVGProps } from "react";
|
|
3
|
+
|
|
4
|
+
const FormatBoldIcon = (props: SVGProps<SVGSVGElement>) => (
|
|
5
|
+
<svg
|
|
6
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
7
|
+
width={24}
|
|
8
|
+
height={24}
|
|
9
|
+
viewBox="0 0 24 24"
|
|
10
|
+
fill="none"
|
|
11
|
+
{...props}
|
|
12
|
+
>
|
|
13
|
+
<path
|
|
14
|
+
fill="currentColor"
|
|
15
|
+
d="M8.63 19.133c-.453 0-.838-.158-1.155-.475A1.571 1.571 0 0 1 7 17.504V6.55c0-.453.158-.837.475-1.154A1.571 1.571 0 0 1 8.63 4.92h3.584c1.094 0 2.082.34 2.966 1.021.883.68 1.325 1.597 1.325 2.75 0 .802-.194 1.455-.58 1.96-.388.506-.805.873-1.252 1.101.55.19 1.076.565 1.576 1.125S17 14.193 17 15.142c0 1.37-.505 2.379-1.516 3.024-1.01.645-2.03.967-3.055.967h-3.8Zm.676-2.137h3.036c.845 0 1.442-.234 1.79-.703.35-.469.525-.918.525-1.349 0-.43-.175-.88-.524-1.35-.35-.468-.963-.702-1.84-.702H9.306v4.104Zm0-6.175h2.783c.652 0 1.168-.187 1.55-.56.382-.372.572-.818.572-1.338 0-.553-.202-1.005-.605-1.355-.404-.35-.898-.526-1.484-.526H9.306v3.779Z"
|
|
16
|
+
/>
|
|
17
|
+
</svg>
|
|
18
|
+
);
|
|
19
|
+
|
|
20
|
+
export default FormatBoldIcon;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import { SVGProps } from "react";
|
|
3
|
+
|
|
4
|
+
const FormatItalicIcon = (props: SVGProps<SVGSVGElement>) => (
|
|
5
|
+
<svg
|
|
6
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
7
|
+
width={24}
|
|
8
|
+
height={24}
|
|
9
|
+
viewBox="0 0 24 24"
|
|
10
|
+
fill="none"
|
|
11
|
+
{...props}
|
|
12
|
+
>
|
|
13
|
+
<path
|
|
14
|
+
fill="currentColor"
|
|
15
|
+
d="M6.875 18.54a.845.845 0 0 1-.621-.255.847.847 0 0 1-.254-.622c0-.245.085-.452.254-.62a.846.846 0 0 1 .621-.254h2.82l3.138-9.328h-2.82a.845.845 0 0 1-.622-.254.846.846 0 0 1-.254-.622c0-.245.085-.452.254-.621a.846.846 0 0 1 .621-.253h7.113c.245 0 .452.084.621.254.17.17.254.376.254.622a.844.844 0 0 1-.254.62.845.845 0 0 1-.621.254h-2.523l-3.137 9.328h2.523c.245 0 .452.085.62.254.17.17.255.377.255.622a.844.844 0 0 1-.254.621.846.846 0 0 1-.621.253H6.875Z"
|
|
16
|
+
/>
|
|
17
|
+
</svg>
|
|
18
|
+
);
|
|
19
|
+
|
|
20
|
+
export default FormatItalicIcon;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import { SVGProps } from "react";
|
|
3
|
+
|
|
4
|
+
const FormatListBulletedIcon = (props: SVGProps<SVGSVGElement>) => (
|
|
5
|
+
<svg
|
|
6
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
7
|
+
width={24}
|
|
8
|
+
height={24}
|
|
9
|
+
viewBox="0 0 24 24"
|
|
10
|
+
fill="none"
|
|
11
|
+
{...props}
|
|
12
|
+
>
|
|
13
|
+
<path
|
|
14
|
+
fill="currentColor"
|
|
15
|
+
d="M10.4 17.559a.598.598 0 0 1-.44-.178.598.598 0 0 1-.177-.44c0-.175.059-.322.177-.44a.598.598 0 0 1 .44-.178h7.982c.175 0 .322.06.44.178a.598.598 0 0 1 .178.44c0 .175-.06.322-.178.44a.597.597 0 0 1-.44.178H10.4Zm0-4.941a.598.598 0 0 1-.44-.178.598.598 0 0 1-.177-.44c0-.175.059-.322.177-.44a.598.598 0 0 1 .44-.178h7.982c.175 0 .322.06.44.178A.598.598 0 0 1 19 12c0 .175-.06.322-.178.44a.597.597 0 0 1-.44.178H10.4Zm0-4.942a.598.598 0 0 1-.44-.177.598.598 0 0 1-.177-.44c0-.176.059-.322.177-.44a.598.598 0 0 1 .44-.178h7.982c.175 0 .322.06.44.178a.598.598 0 0 1 .178.44c0 .175-.06.322-.178.44a.597.597 0 0 1-.44.177H10.4ZM6.37 18.311c-.377 0-.7-.134-.968-.402A1.319 1.319 0 0 1 5 16.94c0-.377.134-.7.402-.967.269-.269.591-.403.968-.403s.7.134.967.403c.269.268.403.59.403.967s-.134.7-.403.968c-.268.268-.59.402-.967.402Zm0-4.941c-.377 0-.7-.134-.968-.403A1.319 1.319 0 0 1 5 12c0-.377.134-.7.402-.967.269-.269.591-.403.968-.403s.7.134.967.402c.269.269.403.591.403.968s-.134.7-.403.967c-.268.269-.59.403-.967.403Zm0-4.941c-.377 0-.7-.134-.968-.403A1.319 1.319 0 0 1 5 7.06c0-.377.134-.7.402-.968.269-.268.591-.402.968-.402s.7.134.967.402c.269.269.403.591.403.968s-.134.7-.403.967c-.268.269-.59.403-.967.403Z"
|
|
16
|
+
/>
|
|
17
|
+
</svg>
|
|
18
|
+
);
|
|
19
|
+
|
|
20
|
+
export default FormatListBulletedIcon;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import { SVGProps } from "react";
|
|
3
|
+
|
|
4
|
+
const FormatListNumberedIcon = (props: SVGProps<SVGSVGElement>) => (
|
|
5
|
+
<svg
|
|
6
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
7
|
+
width={24}
|
|
8
|
+
height={24}
|
|
9
|
+
viewBox="0 0 24 24"
|
|
10
|
+
fill="none"
|
|
11
|
+
{...props}
|
|
12
|
+
>
|
|
13
|
+
<path
|
|
14
|
+
fill="currentColor"
|
|
15
|
+
d="M5.491 19.823a.477.477 0 0 1-.491-.49.477.477 0 0 1 .491-.491h1.568v-.871h-.744a.477.477 0 0 1-.491-.491.477.477 0 0 1 .49-.491h.745v-.871H5.49A.477.477 0 0 1 5 15.627a.477.477 0 0 1 .491-.491h1.853c.197 0 .363.067.496.2.134.134.2.3.2.496v.983a.674.674 0 0 1-.2.496.674.674 0 0 1-.496.2c.197 0 .363.067.496.2.134.134.2.3.2.497v.919a.674.674 0 0 1-.2.496.674.674 0 0 1-.496.2H5.491Zm.071-5.479a.543.543 0 0 1-.399-.163.543.543 0 0 1-.163-.4v-1.575c0-.197.067-.363.2-.497.134-.133.3-.2.497-.2h1.362v-.87H5.49A.476.476 0 0 1 5 10.147a.478.478 0 0 1 .491-.492h1.853c.197 0 .363.067.496.2.134.134.2.3.2.497v1.441a.675.675 0 0 1-.2.497.674.674 0 0 1-.496.2H5.982v.87H7.55a.477.477 0 0 1 .49.491.478.478 0 0 1-.49.492H5.562Zm1.165-5.48a.478.478 0 0 1-.492-.49V5.157h-.744A.477.477 0 0 1 5 4.668a.478.478 0 0 1 .491-.492h1.172c.157 0 .289.054.395.16.106.106.16.237.16.395v3.642a.477.477 0 0 1-.491.491ZM10.4 17.56a.598.598 0 0 1-.44-.178.598.598 0 0 1-.177-.44c0-.175.059-.322.177-.44a.598.598 0 0 1 .44-.178h7.982c.175 0 .322.06.44.178a.598.598 0 0 1 .178.44c0 .175-.06.322-.178.44a.597.597 0 0 1-.44.178H10.4Zm0-4.941a.598.598 0 0 1-.44-.178.598.598 0 0 1-.177-.44c0-.175.059-.322.177-.44a.598.598 0 0 1 .44-.178h7.982c.175 0 .322.06.44.178A.598.598 0 0 1 19 12c0 .175-.06.322-.178.44a.597.597 0 0 1-.44.178H10.4Zm0-4.942a.598.598 0 0 1-.44-.177.598.598 0 0 1-.177-.44c0-.176.059-.322.177-.44a.598.598 0 0 1 .44-.178h7.982c.175 0 .322.06.44.178a.598.598 0 0 1 .178.44c0 .175-.06.322-.178.44a.597.597 0 0 1-.44.177H10.4Z"
|
|
16
|
+
/>
|
|
17
|
+
</svg>
|
|
18
|
+
);
|
|
19
|
+
|
|
20
|
+
export default FormatListNumberedIcon;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import { SVGProps } from "react";
|
|
3
|
+
|
|
4
|
+
const FormatUnderlinedIcon = (props: SVGProps<SVGSVGElement>) => (
|
|
5
|
+
<svg
|
|
6
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
7
|
+
width={24}
|
|
8
|
+
height={24}
|
|
9
|
+
viewBox="0 0 24 24"
|
|
10
|
+
fill="none"
|
|
11
|
+
{...props}
|
|
12
|
+
>
|
|
13
|
+
<path
|
|
14
|
+
fill="currentColor"
|
|
15
|
+
d="M6.676 19.442a.655.655 0 0 1-.482-.195.655.655 0 0 1-.194-.482c0-.192.065-.352.194-.482.13-.13.29-.194.482-.194h10.648c.191 0 .352.065.482.195s.194.29.194.482a.654.654 0 0 1-.194.481.655.655 0 0 1-.482.195H6.676ZM12 16.199c-1.402 0-2.497-.426-3.283-1.277-.787-.852-1.18-1.992-1.18-3.423V5.201c0-.228.083-.423.251-.585a.825.825 0 0 1 .593-.244c.228 0 .422.081.584.244a.8.8 0 0 1 .243.585v6.381c0 .911.242 1.642.727 2.19.484.55 1.172.825 2.065.825s1.581-.275 2.066-.824c.484-.55.726-1.28.726-2.19V5.2c0-.228.084-.423.252-.585a.825.825 0 0 1 .593-.244c.227 0 .422.081.584.244a.8.8 0 0 1 .243.585v6.298c0 1.43-.394 2.571-1.18 3.423-.787.851-1.882 1.277-3.284 1.277Z"
|
|
16
|
+
/>
|
|
17
|
+
</svg>
|
|
18
|
+
);
|
|
19
|
+
|
|
20
|
+
export default FormatUnderlinedIcon;
|