1use serde::{Deserialize, Serialize};
2
3mod js_tiptap;
4mod tiptap_instance;
5
6pub use tiptap_instance::TiptapInstance;
7pub use tiptap_instance::TiptapInstanceMsg;
8
9#[derive(Debug, PartialEq, Eq, PartialOrd, Ord, Hash, Clone)]
10pub enum TiptapContent {
11 Html(String),
12 Json(String),
13}
14
15#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
17pub struct TiptapEditorState {
18 editable: bool,
19 selection: TiptapSelectionState,
20}
21
22#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
24pub struct TiptapSelectionState {
25 pub h1: bool,
27
28 pub h2: bool,
30
31 pub h3: bool,
33
34 pub h4: bool,
36
37 pub h5: bool,
39
40 pub h6: bool,
42
43 pub paragraph: bool,
45
46 pub bold: bool,
48
49 pub italic: bool,
51
52 pub strike: bool,
54
55 pub blockquote: bool,
57
58 pub highlight: bool,
60
61 pub bullet_list: bool,
63
64 pub ordered_list: bool,
66
67 pub align_left: bool,
69
70 pub align_center: bool,
72
73 pub align_right: bool,
75
76 pub align_justify: bool,
78
79 pub link: bool,
81
82 pub youtube: bool,
84}
85
86#[derive(Debug, Clone, Copy, PartialEq, Eq)]
87pub enum TiptapHeadingLevel {
88 H1,
89 H2,
90 H3,
91 H4,
92 H5,
93 H6,
94}
95
96impl From<TiptapHeadingLevel> for i32 {
97 fn from(val: TiptapHeadingLevel) -> Self {
98 match val {
99 TiptapHeadingLevel::H1 => 1,
100 TiptapHeadingLevel::H2 => 2,
101 TiptapHeadingLevel::H3 => 3,
102 TiptapHeadingLevel::H4 => 4,
103 TiptapHeadingLevel::H5 => 5,
104 TiptapHeadingLevel::H6 => 6,
105 }
106 }
107}
108
109#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Serialize, Deserialize)]
110pub struct TiptapImageResource {
111 pub title: String,
113
114 pub alt: String,
116
117 pub url: String,
119}
120
121#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Serialize, Deserialize)]
122pub struct TiptapLinkResource {
123 pub href: String,
125
126 pub target: String,
128
129 pub rel: String,
131}
132
133#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Serialize, Deserialize)]
134pub struct TiptapYoutubeVideoResource {
135 pub src: String,
137
138 pub start: String,
140
141 pub width: String,
143
144 pub height: String,
146}