@elia-ori/editor 0.1.1 → 0.1.2

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.
@@ -1,5 +1,11 @@
1
- /* src/styles/editor.css */
1
+ /* Tailwind utilities */
2
+ /*! tailwindcss v4.1.18 | MIT License | https://tailwindcss.com */
3
+ @layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style:solid;--tw-font-weight:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1}}}@layer theme{:root,:host{--font-sans:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--color-red-100:oklch(93.6% .032 17.717);--color-red-300:oklch(80.8% .114 19.571);--color-amber-100:oklch(96.2% .059 95.617);--color-amber-300:oklch(87.9% .169 91.605);--color-emerald-100:oklch(95% .052 163.051);--color-emerald-300:oklch(84.5% .143 164.978);--color-sky-100:oklch(95.1% .026 236.824);--color-sky-300:oklch(82.8% .111 230.318);--color-zinc-100:oklch(96.7% .001 286.375);--color-zinc-200:oklch(92% .004 286.32);--color-zinc-300:oklch(87.1% .006 286.286);--color-zinc-600:oklch(44.2% .017 285.786);--color-zinc-700:oklch(37% .013 285.805);--color-zinc-800:oklch(27.4% .006 286.033);--color-zinc-900:oklch(21% .006 285.885);--color-white:#fff;--spacing:.25rem;--container-7xl:80rem;--text-xs:.75rem;--text-xs--line-height:calc(1/.75);--text-sm:.875rem;--text-sm--line-height:calc(1.25/.875);--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--radius-sm:.25rem;--radius-md:.375rem;--radius-lg:.5rem;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.relative{position:relative}.z-50{z-index:50}.-mx-1{margin-inline:calc(var(--spacing)*-1)}.mx-1\.5{margin-inline:calc(var(--spacing)*1.5)}.mx-auto{margin-inline:auto}.my-1{margin-block:calc(var(--spacing)*1)}.mt-2{margin-top:calc(var(--spacing)*2)}.mr-2{margin-right:calc(var(--spacing)*2)}.mb-2{margin-bottom:calc(var(--spacing)*2)}.mb-3{margin-bottom:calc(var(--spacing)*3)}.block{display:block}.flex{display:flex}.hidden{display:none}.inline-flex{display:inline-flex}.table{display:table}.h-3{height:calc(var(--spacing)*3)}.h-4{height:calc(var(--spacing)*4)}.h-5{height:calc(var(--spacing)*5)}.h-6{height:calc(var(--spacing)*6)}.h-8{height:calc(var(--spacing)*8)}.h-9{height:calc(var(--spacing)*9)}.h-10{height:calc(var(--spacing)*10)}.h-px{height:1px}.min-h-\[300px\]{min-height:300px}.w-3{width:calc(var(--spacing)*3)}.w-4{width:calc(var(--spacing)*4)}.w-6{width:calc(var(--spacing)*6)}.w-8{width:calc(var(--spacing)*8)}.w-9{width:calc(var(--spacing)*9)}.w-72{width:calc(var(--spacing)*72)}.w-full{width:100%}.w-px{width:1px}.max-w-7xl{max-width:var(--container-7xl)}.min-w-0{min-width:calc(var(--spacing)*0)}.min-w-\[8rem\]{min-width:8rem}.cursor-default{cursor:default}.items-center{align-items:center}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.gap-0\.5{gap:calc(var(--spacing)*.5)}.gap-1{gap:calc(var(--spacing)*1)}.gap-1\.5{gap:calc(var(--spacing)*1.5)}.gap-2{gap:calc(var(--spacing)*2)}.overflow-hidden{overflow:hidden}.rounded{border-radius:.25rem}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-sm{border-radius:var(--radius-sm)}.border{border-style:var(--tw-border-style);border-width:1px}.border-0{border-style:var(--tw-border-style);border-width:0}.border-\[var\(--border\)\]{border-color:var(--border)}.border-amber-300{border-color:var(--color-amber-300)}.border-emerald-300{border-color:var(--color-emerald-300)}.border-red-300{border-color:var(--color-red-300)}.border-sky-300{border-color:var(--color-sky-300)}.border-zinc-200{border-color:var(--color-zinc-200)}.bg-\[var\(--border\)\]{background-color:var(--border)}.bg-\[var\(--popover\)\]{background-color:var(--popover)}.bg-amber-100{background-color:var(--color-amber-100)}.bg-emerald-100{background-color:var(--color-emerald-100)}.bg-red-100{background-color:var(--color-red-100)}.bg-sky-100{background-color:var(--color-sky-100)}.bg-transparent{background-color:#0000}.bg-white{background-color:var(--color-white)}.p-0{padding:calc(var(--spacing)*0)}.p-1{padding:calc(var(--spacing)*1)}.p-1\.5{padding:calc(var(--spacing)*1.5)}.p-2{padding:calc(var(--spacing)*2)}.p-4{padding:calc(var(--spacing)*4)}.px-2{padding-inline:calc(var(--spacing)*2)}.px-3{padding-inline:calc(var(--spacing)*3)}.px-4{padding-inline:calc(var(--spacing)*4)}.px-8{padding-inline:calc(var(--spacing)*8)}.py-1\.5{padding-block:calc(var(--spacing)*1.5)}.py-2{padding-block:calc(var(--spacing)*2)}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.text-\[var\(--popover-foreground\)\]{color:var(--popover-foreground)}.text-zinc-700{color:var(--color-zinc-700)}.italic{font-style:italic}.underline{text-decoration-line:underline}.underline-offset-4{text-underline-offset:4px}.shadow-md{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a),0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}@media (hover:hover){.hover\:scale-110:hover{--tw-scale-x:110%;--tw-scale-y:110%;--tw-scale-z:110%;scale:var(--tw-scale-x)var(--tw-scale-y)}.hover\:bg-\[var\(--accent\)\]:hover{background-color:var(--accent)}.hover\:bg-zinc-100:hover{background-color:var(--color-zinc-100)}.hover\:text-\[var\(--accent-foreground\)\]:hover{color:var(--accent-foreground)}}.focus\:bg-\[var\(--accent\)\]:focus{background-color:var(--accent)}.focus\:text-\[var\(--accent-foreground\)\]:focus{color:var(--accent-foreground)}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.focus-visible\:ring-2:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-visible\:ring-\[var\(--ring\)\]:focus-visible{--tw-ring-color:var(--ring)}.focus-visible\:outline-none:focus-visible{--tw-outline-style:none;outline-style:none}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:opacity-30:disabled{opacity:.3}.disabled\:opacity-50:disabled{opacity:.5}.data-\[disabled\]\:pointer-events-none[data-disabled]{pointer-events:none}.data-\[disabled\]\:opacity-50[data-disabled]{opacity:.5}.data-\[state\=on\]\:bg-\[var\(--accent\)\][data-state=on]{background-color:var(--accent)}.data-\[state\=on\]\:bg-zinc-900[data-state=on]{background-color:var(--color-zinc-900)}.data-\[state\=on\]\:text-\[var\(--accent-foreground\)\][data-state=on]{color:var(--accent-foreground)}.data-\[state\=on\]\:text-white[data-state=on]{color:var(--color-white)}@media (prefers-color-scheme:dark){.dark\:border-zinc-600{border-color:var(--color-zinc-600)}.dark\:border-zinc-700{border-color:var(--color-zinc-700)}.dark\:bg-zinc-900{background-color:var(--color-zinc-900)}.dark\:text-zinc-300{color:var(--color-zinc-300)}@media (hover:hover){.dark\:hover\:bg-zinc-800:hover{background-color:var(--color-zinc-800)}}.dark\:data-\[state\=on\]\:bg-zinc-100[data-state=on]{background-color:var(--color-zinc-100)}.dark\:data-\[state\=on\]\:text-zinc-900[data-state=on]{color:var(--color-zinc-900)}}}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}
4
+
5
+ /* Editor styles */
6
+ /* TipTap Editor Styles */
2
7
  .tiptap-editor {
8
+ /* Headings */
3
9
  h1 {
4
10
  font-size: 1.5rem;
5
11
  font-weight: 700;
@@ -7,6 +13,7 @@
7
13
  margin-top: 1.5rem;
8
14
  line-height: 1.25;
9
15
  }
16
+
10
17
  h2 {
11
18
  font-size: 1.25rem;
12
19
  font-weight: 700;
@@ -14,6 +21,7 @@
14
21
  margin-top: 1.25rem;
15
22
  line-height: 1.375;
16
23
  }
24
+
17
25
  h3 {
18
26
  font-size: 1.125rem;
19
27
  font-weight: 600;
@@ -21,31 +29,40 @@
21
29
  margin-top: 1rem;
22
30
  line-height: 1.5;
23
31
  }
32
+
33
+ /* Paragraphs */
24
34
  p {
25
35
  margin-top: 0.5rem;
26
36
  margin-bottom: 0.5rem;
27
37
  line-height: 1.625;
28
38
  }
39
+
40
+ /* Lists */
29
41
  ul {
30
42
  list-style-type: disc;
31
43
  margin-top: 0.5rem;
32
44
  margin-bottom: 0.5rem;
33
45
  padding-left: 1.5rem;
34
46
  }
47
+
35
48
  ol {
36
49
  list-style-type: decimal;
37
50
  margin-top: 0.5rem;
38
51
  margin-bottom: 0.5rem;
39
52
  padding-left: 1.5rem;
40
53
  }
54
+
41
55
  li {
42
56
  margin-top: 0.25rem;
43
57
  margin-bottom: 0.25rem;
44
58
  }
59
+
45
60
  li p {
46
61
  margin: 0;
47
62
  display: inline;
48
63
  }
64
+
65
+ /* Blockquote */
49
66
  blockquote {
50
67
  border-left-width: 4px;
51
68
  border-left-color: color-mix(in srgb, var(--muted-foreground) 30%, transparent);
@@ -54,6 +71,8 @@
54
71
  margin-top: 1rem;
55
72
  margin-bottom: 1rem;
56
73
  }
74
+
75
+ /* Code */
57
76
  code {
58
77
  background-color: var(--muted);
59
78
  padding-left: 0.375rem;
@@ -62,16 +81,9 @@
62
81
  padding-bottom: 0.125rem;
63
82
  border-radius: 0.25rem;
64
83
  font-size: 0.875rem;
65
- font-family:
66
- ui-monospace,
67
- SFMono-Regular,
68
- Menlo,
69
- Monaco,
70
- Consolas,
71
- "Liberation Mono",
72
- "Courier New",
73
- monospace;
84
+ font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
74
85
  }
86
+
75
87
  pre {
76
88
  background-color: var(--muted);
77
89
  padding: 1rem;
@@ -80,32 +92,44 @@
80
92
  margin-bottom: 1rem;
81
93
  overflow-x: auto;
82
94
  }
95
+
83
96
  pre code {
84
97
  background-color: transparent;
85
98
  padding: 0;
86
99
  }
100
+
101
+ /* Links */
87
102
  a {
88
103
  color: var(--primary);
89
104
  text-decoration: underline;
90
105
  text-underline-offset: 4px;
91
106
  }
107
+
108
+ /* Mark (Highlight) */
92
109
  mark {
93
110
  background-color: #fef08a;
94
111
  padding-left: 0.125rem;
95
112
  padding-right: 0.125rem;
96
113
  }
114
+
97
115
  .dark mark {
98
116
  background-color: #854d0e;
99
117
  }
118
+
119
+ /* Horizontal Rule */
100
120
  hr {
101
121
  border-color: var(--border);
102
122
  margin-top: 1.5rem;
103
123
  margin-bottom: 1.5rem;
104
124
  }
125
+
126
+ /* Subscript & Superscript */
105
127
  sub,
106
128
  sup {
107
129
  font-size: 0.75rem;
108
130
  }
131
+
132
+ /* Placeholder - only show when editor has a single empty paragraph */
109
133
  > p.is-editor-empty:first-child:last-child::before {
110
134
  color: var(--muted-foreground);
111
135
  pointer-events: none;
@@ -113,24 +137,29 @@
113
137
  height: 0;
114
138
  content: attr(data-placeholder);
115
139
  }
116
- ul[data-type=taskList] {
140
+
141
+ /* Task List */
142
+ ul[data-type="taskList"] {
117
143
  list-style-type: none;
118
144
  padding-left: 0;
119
145
  margin-top: 0.5rem;
120
146
  margin-bottom: 0.5rem;
121
147
  }
122
- ul[data-type=taskList] li {
148
+
149
+ ul[data-type="taskList"] li {
123
150
  display: flex;
124
151
  align-items: flex-start;
125
152
  gap: 0.5rem;
126
153
  margin-top: 0.25rem;
127
154
  margin-bottom: 0.25rem;
128
155
  }
129
- ul[data-type=taskList] li > label {
156
+
157
+ ul[data-type="taskList"] li > label {
130
158
  display: flex;
131
159
  align-items: center;
132
160
  }
133
- ul[data-type=taskList] li > label input[type=checkbox] {
161
+
162
+ ul[data-type="taskList"] li > label input[type="checkbox"] {
134
163
  width: 1rem;
135
164
  height: 1rem;
136
165
  border-radius: 0.25rem;
@@ -138,19 +167,24 @@
138
167
  cursor: pointer;
139
168
  accent-color: var(--primary);
140
169
  }
141
- ul[data-type=taskList] li > div {
170
+
171
+ ul[data-type="taskList"] li > div {
142
172
  flex: 1;
143
173
  }
144
- ul[data-type=taskList] li > div p {
174
+
175
+ ul[data-type="taskList"] li > div p {
145
176
  margin: 0;
146
177
  display: inline;
147
178
  }
179
+
180
+ /* Table */
148
181
  table {
149
182
  width: 100%;
150
183
  border-collapse: collapse;
151
184
  margin-top: 1rem;
152
185
  margin-bottom: 1rem;
153
186
  }
187
+
154
188
  table th,
155
189
  table td {
156
190
  border: 1px solid var(--border);
@@ -160,13 +194,17 @@
160
194
  padding-bottom: 0.5rem;
161
195
  text-align: left;
162
196
  }
197
+
163
198
  table th {
164
199
  background-color: var(--muted);
165
200
  font-weight: 600;
166
201
  }
202
+
167
203
  table tr:hover td {
168
204
  background-color: color-mix(in srgb, var(--muted) 30%, transparent);
169
205
  }
206
+
207
+ /* Image */
170
208
  img {
171
209
  max-width: 100%;
172
210
  height: auto;
@@ -176,14 +214,18 @@
176
214
  cursor: pointer;
177
215
  transition: all 150ms cubic-bezier(0.4, 0, 0.2, 1);
178
216
  }
217
+
179
218
  img.ProseMirror-selectednode {
180
219
  outline: 2px solid var(--primary);
181
220
  outline-offset: 2px;
182
221
  }
222
+
223
+ /* Resizable Image */
183
224
  .tiptap-resize-container {
184
225
  position: relative;
185
226
  display: inline-block;
186
227
  }
228
+
187
229
  .tiptap-resize-handle {
188
230
  position: absolute;
189
231
  width: 0.75rem;
@@ -193,33 +235,41 @@
193
235
  opacity: 0;
194
236
  transition: opacity 150ms cubic-bezier(0.4, 0, 0.2, 1);
195
237
  }
238
+
196
239
  .tiptap-resize-handle:hover {
197
240
  opacity: 1;
198
241
  }
242
+
199
243
  .tiptap-resize-container:hover .tiptap-resize-handle,
200
244
  .tiptap-resize-container.is-resizing .tiptap-resize-handle {
201
245
  opacity: 1;
202
246
  }
203
- .tiptap-resize-handle[data-direction=top-left] {
247
+
248
+ .tiptap-resize-handle[data-direction="top-left"] {
204
249
  top: -0.375rem;
205
250
  left: -0.375rem;
206
251
  cursor: nwse-resize;
207
252
  }
208
- .tiptap-resize-handle[data-direction=top-right] {
253
+
254
+ .tiptap-resize-handle[data-direction="top-right"] {
209
255
  top: -0.375rem;
210
256
  right: -0.375rem;
211
257
  cursor: nesw-resize;
212
258
  }
213
- .tiptap-resize-handle[data-direction=bottom-left] {
259
+
260
+ .tiptap-resize-handle[data-direction="bottom-left"] {
214
261
  bottom: -0.375rem;
215
262
  left: -0.375rem;
216
263
  cursor: nesw-resize;
217
264
  }
218
- .tiptap-resize-handle[data-direction=bottom-right] {
265
+
266
+ .tiptap-resize-handle[data-direction="bottom-right"] {
219
267
  bottom: -0.375rem;
220
268
  right: -0.375rem;
221
269
  cursor: nwse-resize;
222
270
  }
271
+
272
+ /* Callout */
223
273
  div[data-callout] {
224
274
  padding-left: 1rem;
225
275
  padding-right: 1rem;
@@ -230,48 +280,56 @@
230
280
  margin-bottom: 1rem;
231
281
  border-left-width: 4px;
232
282
  }
233
- div[data-callout][data-type=success] {
283
+
284
+ div[data-callout][data-type="success"] {
234
285
  background-color: #ecfdf5;
235
286
  border-left-color: #10b981;
236
287
  color: #065f46;
237
288
  }
238
- .dark div[data-callout][data-type=success] {
289
+
290
+ .dark div[data-callout][data-type="success"] {
239
291
  background-color: #064e3b;
240
292
  border-left-color: #10b981;
241
293
  color: #d1fae5;
242
294
  }
243
- div[data-callout][data-type=warning] {
295
+
296
+ div[data-callout][data-type="warning"] {
244
297
  background-color: #fffbeb;
245
298
  border-left-color: #f59e0b;
246
299
  color: #92400e;
247
300
  }
248
- .dark div[data-callout][data-type=warning] {
301
+
302
+ .dark div[data-callout][data-type="warning"] {
249
303
  background-color: #78350f;
250
304
  border-left-color: #f59e0b;
251
305
  color: #fef3c7;
252
306
  }
253
- div[data-callout][data-type=error] {
307
+
308
+ div[data-callout][data-type="error"] {
254
309
  background-color: #fef2f2;
255
310
  border-left-color: #ef4444;
256
311
  color: #991b1b;
257
312
  }
258
- .dark div[data-callout][data-type=error] {
313
+
314
+ .dark div[data-callout][data-type="error"] {
259
315
  background-color: #7f1d1d;
260
316
  border-left-color: #ef4444;
261
317
  color: #fee2e2;
262
318
  }
263
- div[data-callout][data-type=info] {
319
+
320
+ div[data-callout][data-type="info"] {
264
321
  background-color: #f0f9ff;
265
322
  border-left-color: #0ea5e9;
266
323
  color: #075985;
267
324
  }
268
- .dark div[data-callout][data-type=info] {
325
+
326
+ .dark div[data-callout][data-type="info"] {
269
327
  background-color: #082f49;
270
328
  border-left-color: #0ea5e9;
271
329
  color: #e0f2fe;
272
330
  }
331
+
273
332
  div[data-callout] p {
274
333
  color: inherit;
275
334
  }
276
335
  }
277
- /*# sourceMappingURL=editor.css.map */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@elia-ori/editor",
3
- "version": "0.1.1",
3
+ "version": "0.1.2",
4
4
  "description": "基於 TipTap 的富文字編輯器套件",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs",
@@ -12,14 +12,16 @@
12
12
  "import": "./dist/index.js",
13
13
  "require": "./dist/index.cjs"
14
14
  },
15
- "./styles.css": "./dist/styles/editor.css"
15
+ "./styles.css": "./dist/styles/editor.css",
16
+ "./styles/editor.css": "./dist/styles/editor.css"
16
17
  },
17
18
  "files": [
18
19
  "dist"
19
20
  ],
20
21
  "scripts": {
21
- "dev": "tsup --watch",
22
- "build": "tsup"
22
+ "dev": "vite",
23
+ "build": "tsup",
24
+ "preview": "vite preview"
23
25
  },
24
26
  "peerDependencies": {
25
27
  "lucide-react": ">=0.400.0",
@@ -27,9 +29,6 @@
27
29
  "react-dom": "^18.0.0 || ^19.0.0"
28
30
  },
29
31
  "dependencies": {
30
- "@tiptap/pm": "^3.15.0",
31
- "@tiptap/react": "^3.15.0",
32
- "@tiptap/starter-kit": "^3.15.0",
33
32
  "@radix-ui/react-dropdown-menu": "^2.1.2",
34
33
  "@radix-ui/react-toggle": "^1.1.0",
35
34
  "@tiptap/extension-color": "^3.15.3",
@@ -48,23 +47,30 @@
48
47
  "@tiptap/extension-text-align": "^3.15.3",
49
48
  "@tiptap/extension-text-style": "^3.15.3",
50
49
  "@tiptap/extension-underline": "^3.15.3",
50
+ "@tiptap/pm": "^3.15.0",
51
+ "@tiptap/react": "^3.15.0",
52
+ "@tiptap/starter-kit": "^3.15.0",
51
53
  "clsx": "^2.1.1",
52
54
  "tailwind-merge": "^3.4.0",
53
55
  "tiptap-extension-resize-image": "^1.3.2"
54
56
  },
55
57
  "devDependencies": {
58
+ "@tailwindcss/cli": "^4.1.18",
59
+ "@tailwindcss/vite": "^4.1.18",
56
60
  "@tiptap/pm": "^3.15.3",
57
61
  "@tiptap/react": "^3.15.3",
58
62
  "@tiptap/starter-kit": "^3.15.3",
59
63
  "@types/node": "^24.3.0",
60
64
  "@types/react": "^19.2.4",
61
65
  "@types/react-dom": "^19.2.3",
66
+ "@vitejs/plugin-react": "^5.1.2",
62
67
  "lucide-react": "^0.556.0",
63
68
  "react": "^19.2.3",
64
69
  "react-dom": "^19.2.3",
65
70
  "tailwindcss": "^4.1.17",
66
71
  "tsup": "^8.0.0",
67
- "typescript": "^5.9.2"
72
+ "typescript": "^5.9.2",
73
+ "vite": "^7.3.1"
68
74
  },
69
75
  "engines": {
70
76
  "node": ">=18.0.0"
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/styles/editor.css"],"sourcesContent":["/* TipTap Editor Styles */\n.tiptap-editor {\n /* Headings */\n h1 {\n font-size: 1.5rem;\n font-weight: 700;\n margin-bottom: 1rem;\n margin-top: 1.5rem;\n line-height: 1.25;\n }\n\n h2 {\n font-size: 1.25rem;\n font-weight: 700;\n margin-bottom: 0.75rem;\n margin-top: 1.25rem;\n line-height: 1.375;\n }\n\n h3 {\n font-size: 1.125rem;\n font-weight: 600;\n margin-bottom: 0.5rem;\n margin-top: 1rem;\n line-height: 1.5;\n }\n\n /* Paragraphs */\n p {\n margin-top: 0.5rem;\n margin-bottom: 0.5rem;\n line-height: 1.625;\n }\n\n /* Lists */\n ul {\n list-style-type: disc;\n margin-top: 0.5rem;\n margin-bottom: 0.5rem;\n padding-left: 1.5rem;\n }\n\n ol {\n list-style-type: decimal;\n margin-top: 0.5rem;\n margin-bottom: 0.5rem;\n padding-left: 1.5rem;\n }\n\n li {\n margin-top: 0.25rem;\n margin-bottom: 0.25rem;\n }\n\n li p {\n margin: 0;\n display: inline;\n }\n\n /* Blockquote */\n blockquote {\n border-left-width: 4px;\n border-left-color: color-mix(in srgb, var(--muted-foreground) 30%, transparent);\n padding-left: 1rem;\n font-style: italic;\n margin-top: 1rem;\n margin-bottom: 1rem;\n }\n\n /* Code */\n code {\n background-color: var(--muted);\n padding-left: 0.375rem;\n padding-right: 0.375rem;\n padding-top: 0.125rem;\n padding-bottom: 0.125rem;\n border-radius: 0.25rem;\n font-size: 0.875rem;\n font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n }\n\n pre {\n background-color: var(--muted);\n padding: 1rem;\n border-radius: 0.375rem;\n margin-top: 1rem;\n margin-bottom: 1rem;\n overflow-x: auto;\n }\n\n pre code {\n background-color: transparent;\n padding: 0;\n }\n\n /* Links */\n a {\n color: var(--primary);\n text-decoration: underline;\n text-underline-offset: 4px;\n }\n\n /* Mark (Highlight) */\n mark {\n background-color: #fef08a;\n padding-left: 0.125rem;\n padding-right: 0.125rem;\n }\n\n .dark mark {\n background-color: #854d0e;\n }\n\n /* Horizontal Rule */\n hr {\n border-color: var(--border);\n margin-top: 1.5rem;\n margin-bottom: 1.5rem;\n }\n\n /* Subscript & Superscript */\n sub,\n sup {\n font-size: 0.75rem;\n }\n\n /* Placeholder - only show when editor has a single empty paragraph */\n > p.is-editor-empty:first-child:last-child::before {\n color: var(--muted-foreground);\n pointer-events: none;\n float: left;\n height: 0;\n content: attr(data-placeholder);\n }\n\n /* Task List */\n ul[data-type=\"taskList\"] {\n list-style-type: none;\n padding-left: 0;\n margin-top: 0.5rem;\n margin-bottom: 0.5rem;\n }\n\n ul[data-type=\"taskList\"] li {\n display: flex;\n align-items: flex-start;\n gap: 0.5rem;\n margin-top: 0.25rem;\n margin-bottom: 0.25rem;\n }\n\n ul[data-type=\"taskList\"] li > label {\n display: flex;\n align-items: center;\n }\n\n ul[data-type=\"taskList\"] li > label input[type=\"checkbox\"] {\n width: 1rem;\n height: 1rem;\n border-radius: 0.25rem;\n border-color: var(--input);\n cursor: pointer;\n accent-color: var(--primary);\n }\n\n ul[data-type=\"taskList\"] li > div {\n flex: 1;\n }\n\n ul[data-type=\"taskList\"] li > div p {\n margin: 0;\n display: inline;\n }\n\n /* Table */\n table {\n width: 100%;\n border-collapse: collapse;\n margin-top: 1rem;\n margin-bottom: 1rem;\n }\n\n table th,\n table td {\n border: 1px solid var(--border);\n padding-left: 0.75rem;\n padding-right: 0.75rem;\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n text-align: left;\n }\n\n table th {\n background-color: var(--muted);\n font-weight: 600;\n }\n\n table tr:hover td {\n background-color: color-mix(in srgb, var(--muted) 30%, transparent);\n }\n\n /* Image */\n img {\n max-width: 100%;\n height: auto;\n border-radius: 0.375rem;\n margin-top: 1rem;\n margin-bottom: 1rem;\n cursor: pointer;\n transition: all 150ms cubic-bezier(0.4, 0, 0.2, 1);\n }\n\n img.ProseMirror-selectednode {\n outline: 2px solid var(--primary);\n outline-offset: 2px;\n }\n\n /* Resizable Image */\n .tiptap-resize-container {\n position: relative;\n display: inline-block;\n }\n\n .tiptap-resize-handle {\n position: absolute;\n width: 0.75rem;\n height: 0.75rem;\n background-color: var(--primary);\n border-radius: 9999px;\n opacity: 0;\n transition: opacity 150ms cubic-bezier(0.4, 0, 0.2, 1);\n }\n\n .tiptap-resize-handle:hover {\n opacity: 1;\n }\n\n .tiptap-resize-container:hover .tiptap-resize-handle,\n .tiptap-resize-container.is-resizing .tiptap-resize-handle {\n opacity: 1;\n }\n\n .tiptap-resize-handle[data-direction=\"top-left\"] {\n top: -0.375rem;\n left: -0.375rem;\n cursor: nwse-resize;\n }\n\n .tiptap-resize-handle[data-direction=\"top-right\"] {\n top: -0.375rem;\n right: -0.375rem;\n cursor: nesw-resize;\n }\n\n .tiptap-resize-handle[data-direction=\"bottom-left\"] {\n bottom: -0.375rem;\n left: -0.375rem;\n cursor: nesw-resize;\n }\n\n .tiptap-resize-handle[data-direction=\"bottom-right\"] {\n bottom: -0.375rem;\n right: -0.375rem;\n cursor: nwse-resize;\n }\n\n /* Callout */\n div[data-callout] {\n padding-left: 1rem;\n padding-right: 1rem;\n padding-top: 0.75rem;\n padding-bottom: 0.75rem;\n border-radius: 0.5rem;\n margin-top: 1rem;\n margin-bottom: 1rem;\n border-left-width: 4px;\n }\n\n div[data-callout][data-type=\"success\"] {\n background-color: #ecfdf5;\n border-left-color: #10b981;\n color: #065f46;\n }\n\n .dark div[data-callout][data-type=\"success\"] {\n background-color: #064e3b;\n border-left-color: #10b981;\n color: #d1fae5;\n }\n\n div[data-callout][data-type=\"warning\"] {\n background-color: #fffbeb;\n border-left-color: #f59e0b;\n color: #92400e;\n }\n\n .dark div[data-callout][data-type=\"warning\"] {\n background-color: #78350f;\n border-left-color: #f59e0b;\n color: #fef3c7;\n }\n\n div[data-callout][data-type=\"error\"] {\n background-color: #fef2f2;\n border-left-color: #ef4444;\n color: #991b1b;\n }\n\n .dark div[data-callout][data-type=\"error\"] {\n background-color: #7f1d1d;\n border-left-color: #ef4444;\n color: #fee2e2;\n }\n\n div[data-callout][data-type=\"info\"] {\n background-color: #f0f9ff;\n border-left-color: #0ea5e9;\n color: #075985;\n }\n\n .dark div[data-callout][data-type=\"info\"] {\n background-color: #082f49;\n border-left-color: #0ea5e9;\n color: #e0f2fe;\n }\n\n div[data-callout] p {\n color: inherit;\n }\n}\n"],"mappings":"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","names":[]}
@@ -1,2 +0,0 @@
1
-
2
- export { }
@@ -1,2 +0,0 @@
1
-
2
- export { }