react-pdf-highlighter-plus 1.2.0 → 1.3.1
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/esm/{export-pdf-W2QGWADM.js → export-pdf-DD7J5UHW.js} +113 -15
- package/dist/esm/export-pdf-DD7J5UHW.js.map +1 -0
- package/dist/esm/index.d.ts +45 -8
- package/dist/esm/index.js +1553 -988
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/pdf.worker.min.mjs +2 -2
- package/dist/esm/style/AreaHighlight.css +178 -73
- package/dist/esm/style/DrawingCanvas.css +24 -16
- package/dist/esm/style/DrawingHighlight.css +193 -61
- package/dist/esm/style/FreetextHighlight.css +217 -76
- package/dist/esm/style/ImageHighlight.css +98 -26
- package/dist/esm/style/MouseSelection.css +2 -2
- package/dist/esm/style/PdfHighlighter.css +29 -15
- package/dist/esm/style/ShapeCanvas.css +18 -12
- package/dist/esm/style/ShapeHighlight.css +142 -72
- package/dist/esm/style/SignaturePad.css +154 -38
- package/dist/esm/style/TextHighlight.css +205 -75
- package/dist/esm/style/style.css +1 -0
- package/dist/esm/style/tokens.css +88 -0
- package/package.json +32 -16
- package/dist/esm/export-pdf-W2QGWADM.js.map +0 -1
|
@@ -13,21 +13,21 @@
|
|
|
13
13
|
}
|
|
14
14
|
|
|
15
15
|
.PdfHighlighter::-webkit-scrollbar-thumb {
|
|
16
|
-
background-color: #
|
|
17
|
-
border-radius:
|
|
16
|
+
background-color: var(--rphp-border-strong, #b7b3ab);
|
|
17
|
+
border-radius: 999px;
|
|
18
18
|
}
|
|
19
19
|
|
|
20
20
|
.PdfHighlighter::-webkit-scrollbar-thumb:hover {
|
|
21
|
-
background-color: #
|
|
21
|
+
background-color: var(--rphp-text-muted, #8b8880);
|
|
22
22
|
}
|
|
23
23
|
|
|
24
24
|
.PdfHighlighter::-webkit-scrollbar-track {
|
|
25
|
-
background-color:
|
|
26
|
-
border-radius:
|
|
25
|
+
background-color: transparent;
|
|
26
|
+
border-radius: 999px;
|
|
27
27
|
}
|
|
28
28
|
|
|
29
29
|
.PdfHighlighter::-webkit-scrollbar-track-piece {
|
|
30
|
-
background-color:
|
|
30
|
+
background-color: transparent;
|
|
31
31
|
}
|
|
32
32
|
|
|
33
33
|
.PdfHighlighter__tip-container {
|
|
@@ -39,13 +39,19 @@
|
|
|
39
39
|
position: absolute;
|
|
40
40
|
inset: 0;
|
|
41
41
|
z-index: 4;
|
|
42
|
+
/* Lives in .page as a sibling of .textLayer, not nested inside it — that
|
|
43
|
+
would scope our z-index to .textLayer's own local stacking context,
|
|
44
|
+
putting pdf.js's .annotationLayer (a .page-level sibling of .textLayer,
|
|
45
|
+
z-index 3) above our highlights globally and silently swallowing
|
|
46
|
+
clicks. Multiply is set explicitly here instead of inherited from
|
|
47
|
+
.textLayer: it's what makes a Text/Area highlight's color tint still
|
|
48
|
+
show the black text underneath (like a real highlighter pen) instead
|
|
49
|
+
of covering it. Opaque annotation types (Image/Drawing/Freetext/Shape)
|
|
50
|
+
render in .PdfHighlighter__note-layer instead, with normal blending. */
|
|
51
|
+
mix-blend-mode: multiply;
|
|
42
52
|
pointer-events: none;
|
|
43
53
|
}
|
|
44
54
|
|
|
45
|
-
.textLayer > .PdfHighlighter__highlight-layer {
|
|
46
|
-
z-index: 4;
|
|
47
|
-
}
|
|
48
|
-
|
|
49
55
|
.PdfHighlighter__note-layer {
|
|
50
56
|
position: absolute;
|
|
51
57
|
inset: 0;
|
|
@@ -128,17 +134,18 @@
|
|
|
128
134
|
colored text. Highlight/note/config layers render normally — they sit on
|
|
129
135
|
already-recolored pages, so no counter-inversion is needed. */
|
|
130
136
|
|
|
131
|
-
/* Dark mode: give every highlight a persistent
|
|
132
|
-
against the recolored dark page (light mode keeps the ring on
|
|
133
|
-
only). :not(--scrolledTo) so the active highlight keeps its
|
|
134
|
-
ring (equal-specificity rules would otherwise clobber it by
|
|
137
|
+
/* Dark mode: give every highlight a persistent accent border so they stay
|
|
138
|
+
legible against the recolored dark page (light mode keeps the ring on
|
|
139
|
+
scrolled-to only). :not(--scrolledTo) so the active highlight keeps its
|
|
140
|
+
stronger double ring (equal-specificity rules would otherwise clobber it by
|
|
141
|
+
load order). */
|
|
135
142
|
.PdfHighlighter--dark
|
|
136
143
|
.TextHighlight:not(.TextHighlight--scrolledTo)
|
|
137
144
|
.TextHighlight__part,
|
|
138
145
|
.PdfHighlighter--dark
|
|
139
146
|
.AreaHighlight:not(.AreaHighlight--scrolledTo)
|
|
140
147
|
.AreaHighlight__part {
|
|
141
|
-
box-shadow: 0 0 0 1px #
|
|
148
|
+
box-shadow: 0 0 0 1px var(--rphp-accent, #7b71f0);
|
|
142
149
|
}
|
|
143
150
|
|
|
144
151
|
/* The text/highlight layer blends with the page canvas via `multiply`
|
|
@@ -155,6 +162,13 @@
|
|
|
155
162
|
.PdfHighlighter--dark .textLayer {
|
|
156
163
|
mix-blend-mode: normal;
|
|
157
164
|
}
|
|
165
|
+
/* Our own highlight-layer sets multiply explicitly (it's a .page-level
|
|
166
|
+
sibling of .textLayer, not nested inside it — see PdfHighlighter__
|
|
167
|
+
highlight-layer above), so it needs this same dark-mode override in its
|
|
168
|
+
own right; it no longer inherits .textLayer's override through nesting. */
|
|
169
|
+
.PdfHighlighter--dark .PdfHighlighter__highlight-layer {
|
|
170
|
+
mix-blend-mode: normal;
|
|
171
|
+
}
|
|
158
172
|
|
|
159
173
|
/* Live text selection: the default opaque blue + multiply/screen makes selected
|
|
160
174
|
text unreadable on dark. Force a translucent selection with normal blend so
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
height: 100%;
|
|
7
7
|
cursor: crosshair;
|
|
8
8
|
z-index: 1000;
|
|
9
|
-
background: rgba(
|
|
9
|
+
background: rgba(28, 27, 24, 0.1);
|
|
10
10
|
}
|
|
11
11
|
|
|
12
12
|
.ShapeCanvas__controls {
|
|
@@ -19,29 +19,35 @@
|
|
|
19
19
|
align-items: center;
|
|
20
20
|
gap: 12px;
|
|
21
21
|
z-index: 1002;
|
|
22
|
+
font-family: var(--rphp-font);
|
|
22
23
|
}
|
|
23
24
|
|
|
25
|
+
/* Hint - dark ink pill */
|
|
24
26
|
.ShapeCanvas__hint {
|
|
25
|
-
background:
|
|
26
|
-
color:
|
|
27
|
+
background: var(--rphp-text, #1c1b18);
|
|
28
|
+
color: #efece5;
|
|
27
29
|
padding: 8px 16px;
|
|
28
|
-
border-radius:
|
|
29
|
-
|
|
30
|
+
border-radius: var(--rphp-radius, 9px);
|
|
31
|
+
box-shadow: var(--rphp-shadow-lg, 0 8px 24px -6px rgba(28, 27, 24, 0.22));
|
|
32
|
+
font-size: 13px;
|
|
33
|
+
font-family: var(--rphp-font);
|
|
30
34
|
white-space: nowrap;
|
|
31
35
|
}
|
|
32
36
|
|
|
37
|
+
/* Danger action */
|
|
33
38
|
.ShapeCanvas__cancelButton {
|
|
34
|
-
padding:
|
|
35
|
-
background:
|
|
36
|
-
color:
|
|
39
|
+
padding: 6px 14px;
|
|
40
|
+
background: transparent;
|
|
41
|
+
color: var(--rphp-danger, #ef4444);
|
|
37
42
|
border: none;
|
|
38
|
-
border-radius:
|
|
43
|
+
border-radius: var(--rphp-radius, 9px);
|
|
39
44
|
cursor: pointer;
|
|
40
|
-
font-size:
|
|
41
|
-
font-weight:
|
|
45
|
+
font-size: 13px;
|
|
46
|
+
font-weight: 600;
|
|
47
|
+
font-family: var(--rphp-font);
|
|
42
48
|
transition: background 0.2s;
|
|
43
49
|
}
|
|
44
50
|
|
|
45
51
|
.ShapeCanvas__cancelButton:hover {
|
|
46
|
-
background:
|
|
52
|
+
background: rgba(239, 68, 68, 0.12);
|
|
47
53
|
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
.ShapeHighlight {
|
|
2
2
|
position: absolute;
|
|
3
|
+
font-family: var(--rphp-font);
|
|
3
4
|
}
|
|
4
5
|
|
|
5
6
|
.ShapeHighlight__rnd {
|
|
@@ -21,11 +22,19 @@
|
|
|
21
22
|
.ShapeHighlight--scrolledTo .ShapeHighlight__svg rect,
|
|
22
23
|
.ShapeHighlight--scrolledTo .ShapeHighlight__svg ellipse,
|
|
23
24
|
.ShapeHighlight--scrolledTo .ShapeHighlight__svg line {
|
|
24
|
-
stroke: #
|
|
25
|
+
stroke: var(--rphp-accent, #5b50e6) !important;
|
|
25
26
|
}
|
|
26
27
|
|
|
27
28
|
.ShapeHighlight--scrolledTo .ShapeHighlight__svg polygon {
|
|
28
|
-
fill: #
|
|
29
|
+
fill: var(--rphp-accent, #5b50e6) !important;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/* Selected: accent ring on the shape's bounding box */
|
|
33
|
+
.ShapeHighlight--selected .ShapeHighlight__container {
|
|
34
|
+
box-shadow:
|
|
35
|
+
0 0 0 2px var(--rphp-accent, #5b50e6),
|
|
36
|
+
0 0 0 5px rgba(91, 80, 230, 0.25);
|
|
37
|
+
border-radius: 2px;
|
|
29
38
|
}
|
|
30
39
|
|
|
31
40
|
/* Toolbar wrapper - creates hover bridge between toolbar and shape */
|
|
@@ -33,22 +42,76 @@
|
|
|
33
42
|
z-index: 10;
|
|
34
43
|
}
|
|
35
44
|
|
|
36
|
-
/* Toolbar -
|
|
45
|
+
/* Toolbar - dark ink pill floating ABOVE the shape (never covers it).
|
|
46
|
+
Shown on hover or while the shape is selected. */
|
|
37
47
|
.ShapeHighlight__toolbar {
|
|
38
48
|
display: flex;
|
|
39
49
|
align-items: center;
|
|
40
|
-
gap:
|
|
41
|
-
padding:
|
|
42
|
-
background:
|
|
43
|
-
border-radius:
|
|
50
|
+
gap: 2px;
|
|
51
|
+
padding: 4px 6px;
|
|
52
|
+
background: var(--rphp-toolbar-bg, #1c1b18);
|
|
53
|
+
border-radius: var(--rphp-radius, 9px);
|
|
54
|
+
box-shadow: var(--rphp-shadow-lg, 0 8px 24px -6px rgba(28, 27, 24, 0.22));
|
|
55
|
+
position: absolute;
|
|
56
|
+
bottom: calc(100% + 6px);
|
|
57
|
+
left: 0;
|
|
44
58
|
opacity: 0;
|
|
45
59
|
pointer-events: none;
|
|
46
|
-
transition: opacity 0.
|
|
60
|
+
transition: opacity 0.15s ease, transform 0.15s ease;
|
|
61
|
+
transform: translateY(2px);
|
|
62
|
+
white-space: nowrap;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/* Hover bridge across the 6px gap between toolbar and shape */
|
|
66
|
+
.ShapeHighlight__toolbar::after {
|
|
67
|
+
content: "";
|
|
68
|
+
position: absolute;
|
|
69
|
+
top: 100%;
|
|
70
|
+
left: 0;
|
|
71
|
+
right: 0;
|
|
72
|
+
height: 10px;
|
|
47
73
|
}
|
|
48
74
|
|
|
49
75
|
.ShapeHighlight__toolbar--visible {
|
|
50
76
|
opacity: 1;
|
|
51
77
|
pointer-events: auto;
|
|
78
|
+
transform: translateY(0);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/* Color dropdown trigger: current-color swatch + chevron */
|
|
82
|
+
.ShapeHighlight__color-trigger {
|
|
83
|
+
display: flex;
|
|
84
|
+
align-items: center;
|
|
85
|
+
gap: 4px;
|
|
86
|
+
height: 26px;
|
|
87
|
+
padding: 0 6px 0 4px;
|
|
88
|
+
border: none;
|
|
89
|
+
background: transparent;
|
|
90
|
+
cursor: pointer;
|
|
91
|
+
color: #efece5;
|
|
92
|
+
border-radius: var(--rphp-radius-sm, 6px);
|
|
93
|
+
transition: background 0.15s, color 0.15s;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
.ShapeHighlight__color-trigger:hover,
|
|
97
|
+
.ShapeHighlight__color-trigger[aria-expanded="true"] {
|
|
98
|
+
background: rgba(255, 255, 255, 0.14);
|
|
99
|
+
color: #ffffff;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
.ShapeHighlight__color-trigger-dot {
|
|
103
|
+
width: 14px;
|
|
104
|
+
height: 14px;
|
|
105
|
+
border-radius: 50%;
|
|
106
|
+
border: 1.5px solid rgba(255, 255, 255, 0.5);
|
|
107
|
+
flex-shrink: 0;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
.ShapeHighlight__toolbar-divider {
|
|
111
|
+
width: 1px;
|
|
112
|
+
height: 16px;
|
|
113
|
+
margin: 0 3px;
|
|
114
|
+
background: rgba(255, 255, 255, 0.2);
|
|
52
115
|
}
|
|
53
116
|
|
|
54
117
|
.ShapeHighlight__style-button,
|
|
@@ -56,40 +119,43 @@
|
|
|
56
119
|
display: flex;
|
|
57
120
|
align-items: center;
|
|
58
121
|
justify-content: center;
|
|
59
|
-
width:
|
|
60
|
-
height:
|
|
122
|
+
width: 26px;
|
|
123
|
+
height: 26px;
|
|
61
124
|
border: none;
|
|
62
125
|
background: transparent;
|
|
63
126
|
cursor: pointer;
|
|
64
|
-
color:
|
|
65
|
-
border-radius:
|
|
127
|
+
color: #efece5;
|
|
128
|
+
border-radius: var(--rphp-radius-sm, 6px);
|
|
66
129
|
padding: 0;
|
|
67
|
-
transition: background 0.
|
|
130
|
+
transition: background 0.15s, color 0.15s;
|
|
68
131
|
}
|
|
69
132
|
|
|
70
133
|
.ShapeHighlight__style-button:hover {
|
|
71
|
-
background: rgba(255, 255, 255, 0.
|
|
134
|
+
background: rgba(255, 255, 255, 0.14);
|
|
135
|
+
color: #ffffff;
|
|
72
136
|
}
|
|
73
137
|
|
|
74
138
|
.ShapeHighlight__delete-button:hover {
|
|
75
|
-
background: rgba(
|
|
139
|
+
background: rgba(239, 68, 68, 0.24);
|
|
140
|
+
color: #ff8a80;
|
|
76
141
|
}
|
|
77
142
|
|
|
78
|
-
/* Style Panel */
|
|
143
|
+
/* Style Panel - light surface card (Verso popover) */
|
|
79
144
|
.ShapeHighlight__style-panel {
|
|
80
|
-
margin-top:
|
|
81
|
-
background:
|
|
82
|
-
border
|
|
83
|
-
|
|
145
|
+
margin-top: 6px;
|
|
146
|
+
background: var(--rphp-surface, #ffffff);
|
|
147
|
+
border: 1px solid var(--rphp-border, #e6e2da);
|
|
148
|
+
border-radius: var(--rphp-radius-lg, 12px);
|
|
149
|
+
padding: 12px;
|
|
84
150
|
min-width: 180px;
|
|
85
|
-
box-shadow: 0
|
|
151
|
+
box-shadow: var(--rphp-shadow-lg, 0 8px 24px -6px rgba(28, 27, 24, 0.22));
|
|
86
152
|
}
|
|
87
153
|
|
|
88
154
|
.ShapeHighlight__style-row {
|
|
89
155
|
display: flex;
|
|
90
156
|
align-items: center;
|
|
91
157
|
justify-content: space-between;
|
|
92
|
-
margin-bottom:
|
|
158
|
+
margin-bottom: 10px;
|
|
93
159
|
}
|
|
94
160
|
|
|
95
161
|
.ShapeHighlight__style-row:last-child {
|
|
@@ -97,60 +163,63 @@
|
|
|
97
163
|
}
|
|
98
164
|
|
|
99
165
|
.ShapeHighlight__style-row label {
|
|
100
|
-
color: #
|
|
101
|
-
font-size:
|
|
166
|
+
color: var(--rphp-text-muted, #8b8880);
|
|
167
|
+
font-size: 10px;
|
|
168
|
+
font-weight: 600;
|
|
102
169
|
text-transform: uppercase;
|
|
103
|
-
letter-spacing: 0.
|
|
104
|
-
margin-right:
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
/* Color
|
|
108
|
-
.ShapeHighlight__color-
|
|
170
|
+
letter-spacing: 0.8px;
|
|
171
|
+
margin-right: 10px;
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
/* Color dropdown menu - same slot/positioning as the style panel */
|
|
175
|
+
.ShapeHighlight__color-menu {
|
|
176
|
+
margin-top: 6px;
|
|
177
|
+
width: 180px;
|
|
178
|
+
background: var(--rphp-surface, #ffffff);
|
|
179
|
+
border: 1px solid var(--rphp-border, #e6e2da);
|
|
180
|
+
border-radius: var(--rphp-radius-lg, 12px);
|
|
181
|
+
box-shadow: var(--rphp-shadow-lg, 0 8px 24px -6px rgba(28, 27, 24, 0.22));
|
|
182
|
+
padding: 6px;
|
|
109
183
|
display: flex;
|
|
110
|
-
|
|
111
|
-
gap:
|
|
184
|
+
flex-direction: column;
|
|
185
|
+
gap: 1px;
|
|
112
186
|
}
|
|
113
187
|
|
|
114
|
-
.ShapeHighlight__color-
|
|
188
|
+
.ShapeHighlight__color-menu-item {
|
|
115
189
|
display: flex;
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
border:
|
|
123
|
-
border-radius: 50%;
|
|
190
|
+
align-items: center;
|
|
191
|
+
gap: 10px;
|
|
192
|
+
width: 100%;
|
|
193
|
+
padding: 7px 8px;
|
|
194
|
+
border: none;
|
|
195
|
+
background: transparent;
|
|
196
|
+
border-radius: var(--rphp-radius-sm, 6px);
|
|
124
197
|
cursor: pointer;
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
.ShapeHighlight__color-preset:hover {
|
|
130
|
-
transform: scale(1.15);
|
|
198
|
+
color: var(--rphp-text, #1c1b18);
|
|
199
|
+
font-size: 13px;
|
|
200
|
+
text-align: left;
|
|
131
201
|
}
|
|
132
202
|
|
|
133
|
-
.ShapeHighlight__color-
|
|
134
|
-
|
|
203
|
+
.ShapeHighlight__color-menu-item:hover {
|
|
204
|
+
background: var(--rphp-surface-alt, #f4f2ee);
|
|
135
205
|
}
|
|
136
206
|
|
|
137
|
-
.ShapeHighlight__color-
|
|
138
|
-
width:
|
|
139
|
-
height:
|
|
140
|
-
|
|
141
|
-
border:
|
|
142
|
-
|
|
143
|
-
cursor: pointer;
|
|
144
|
-
background: transparent;
|
|
207
|
+
.ShapeHighlight__color-menu-dot {
|
|
208
|
+
width: 16px;
|
|
209
|
+
height: 16px;
|
|
210
|
+
border-radius: 50%;
|
|
211
|
+
border: 1px solid var(--rphp-border, #e6e2da);
|
|
212
|
+
flex-shrink: 0;
|
|
145
213
|
}
|
|
146
214
|
|
|
147
|
-
.ShapeHighlight__color-
|
|
148
|
-
|
|
215
|
+
.ShapeHighlight__color-menu-label {
|
|
216
|
+
flex: 1;
|
|
149
217
|
}
|
|
150
218
|
|
|
151
|
-
.ShapeHighlight__color-
|
|
152
|
-
|
|
153
|
-
|
|
219
|
+
.ShapeHighlight__color-menu-check {
|
|
220
|
+
display: flex;
|
|
221
|
+
color: var(--rphp-accent, #5b50e6);
|
|
222
|
+
flex-shrink: 0;
|
|
154
223
|
}
|
|
155
224
|
|
|
156
225
|
/* Stroke width options */
|
|
@@ -161,22 +230,23 @@
|
|
|
161
230
|
|
|
162
231
|
.ShapeHighlight__width-button {
|
|
163
232
|
padding: 4px 8px;
|
|
164
|
-
background:
|
|
165
|
-
border: 1px solid #
|
|
166
|
-
border-radius:
|
|
233
|
+
background: var(--rphp-surface-alt, #f4f2ee);
|
|
234
|
+
border: 1px solid var(--rphp-border, #e6e2da);
|
|
235
|
+
border-radius: var(--rphp-radius-sm, 6px);
|
|
167
236
|
cursor: pointer;
|
|
168
|
-
color: #
|
|
237
|
+
color: var(--rphp-text-secondary, #57544d);
|
|
169
238
|
font-size: 11px;
|
|
170
|
-
|
|
239
|
+
font-family: var(--rphp-font);
|
|
240
|
+
transition: all 0.15s;
|
|
171
241
|
}
|
|
172
242
|
|
|
173
243
|
.ShapeHighlight__width-button:hover {
|
|
174
|
-
border-color: #
|
|
175
|
-
color:
|
|
244
|
+
border-color: var(--rphp-accent, #5b50e6);
|
|
245
|
+
color: var(--rphp-accent, #5b50e6);
|
|
176
246
|
}
|
|
177
247
|
|
|
178
248
|
.ShapeHighlight__width-button.active {
|
|
179
|
-
background:
|
|
180
|
-
border-color: #
|
|
181
|
-
color: #
|
|
249
|
+
background: var(--rphp-accent-soft, #eceaf9);
|
|
250
|
+
border-color: var(--rphp-accent, #5b50e6);
|
|
251
|
+
color: var(--rphp-accent, #5b50e6);
|
|
182
252
|
}
|
|
@@ -1,83 +1,199 @@
|
|
|
1
|
+
/* eSign modal — Verso surface card over a blurred ink overlay.
|
|
2
|
+
Button selectors are anchored to .SignaturePad__modal so they outrank
|
|
3
|
+
consumer CSS resets (e.g. Tailwind preflight's `[type='button']
|
|
4
|
+
{ background-color: transparent }`) regardless of stylesheet load order. */
|
|
5
|
+
|
|
1
6
|
.SignaturePad__overlay {
|
|
2
7
|
position: fixed;
|
|
3
8
|
top: 0;
|
|
4
9
|
left: 0;
|
|
5
10
|
right: 0;
|
|
6
11
|
bottom: 0;
|
|
7
|
-
background: rgba(
|
|
12
|
+
background: rgba(28, 27, 24, 0.55);
|
|
13
|
+
backdrop-filter: blur(3px);
|
|
8
14
|
display: flex;
|
|
9
15
|
align-items: center;
|
|
10
16
|
justify-content: center;
|
|
11
17
|
z-index: 10000;
|
|
18
|
+
animation: SignaturePad-fade 0.15s ease;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
@keyframes SignaturePad-fade {
|
|
22
|
+
from {
|
|
23
|
+
opacity: 0;
|
|
24
|
+
}
|
|
25
|
+
to {
|
|
26
|
+
opacity: 1;
|
|
27
|
+
}
|
|
12
28
|
}
|
|
13
29
|
|
|
30
|
+
/* Dialog card */
|
|
14
31
|
.SignaturePad__modal {
|
|
15
|
-
background:
|
|
16
|
-
border
|
|
17
|
-
|
|
18
|
-
|
|
32
|
+
background: var(--rphp-surface, #ffffff);
|
|
33
|
+
border: 1px solid var(--rphp-border, #e6e2da);
|
|
34
|
+
border-radius: 16px;
|
|
35
|
+
padding: 20px;
|
|
36
|
+
box-shadow: var(--rphp-shadow-lg, 0 8px 24px -6px rgba(28, 27, 24, 0.22));
|
|
37
|
+
font-family: var(--rphp-font, sans-serif);
|
|
38
|
+
animation: SignaturePad-pop 0.18s cubic-bezier(0.2, 0.9, 0.3, 1.2);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
@keyframes SignaturePad-pop {
|
|
42
|
+
from {
|
|
43
|
+
opacity: 0;
|
|
44
|
+
transform: translateY(8px) scale(0.97);
|
|
45
|
+
}
|
|
46
|
+
to {
|
|
47
|
+
opacity: 1;
|
|
48
|
+
transform: translateY(0) scale(1);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/* Header: title + subtitle left, close right */
|
|
53
|
+
.SignaturePad__header {
|
|
54
|
+
display: flex;
|
|
55
|
+
align-items: flex-start;
|
|
56
|
+
justify-content: space-between;
|
|
57
|
+
gap: 12px;
|
|
58
|
+
margin-bottom: 14px;
|
|
19
59
|
}
|
|
20
60
|
|
|
21
61
|
.SignaturePad__title {
|
|
22
|
-
margin: 0
|
|
62
|
+
margin: 0;
|
|
23
63
|
font-size: 16px;
|
|
24
|
-
font-weight:
|
|
25
|
-
|
|
64
|
+
font-weight: 650;
|
|
65
|
+
letter-spacing: -0.01em;
|
|
66
|
+
color: var(--rphp-text, #1c1b18);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
.SignaturePad__subtitle {
|
|
70
|
+
margin: 3px 0 0;
|
|
71
|
+
font-size: 12.5px;
|
|
72
|
+
color: var(--rphp-text-muted, #8b8880);
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
.SignaturePad__modal .SignaturePad__close {
|
|
76
|
+
display: flex;
|
|
77
|
+
align-items: center;
|
|
78
|
+
justify-content: center;
|
|
79
|
+
width: 28px;
|
|
80
|
+
height: 28px;
|
|
81
|
+
flex-shrink: 0;
|
|
82
|
+
padding: 0;
|
|
83
|
+
border: none;
|
|
84
|
+
border-radius: var(--rphp-radius-sm, 6px);
|
|
85
|
+
background: transparent;
|
|
86
|
+
color: var(--rphp-text-muted, #8b8880);
|
|
87
|
+
cursor: pointer;
|
|
88
|
+
transition: background 0.15s, color 0.15s;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
.SignaturePad__modal .SignaturePad__close:hover {
|
|
92
|
+
background: var(--rphp-surface-alt, #f4f2ee);
|
|
93
|
+
color: var(--rphp-text, #1c1b18);
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
/* Canvas area: sunken paper with a signature baseline */
|
|
97
|
+
.SignaturePad__canvas-wrap {
|
|
98
|
+
position: relative;
|
|
99
|
+
border: 1.5px dashed var(--rphp-border-strong, #b7b3ab);
|
|
100
|
+
border-radius: var(--rphp-radius-lg, 12px);
|
|
101
|
+
background: var(--rphp-bg, #faf9f6);
|
|
102
|
+
overflow: hidden;
|
|
103
|
+
transition: border-color 0.15s;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
.SignaturePad__canvas-wrap:hover {
|
|
107
|
+
border-color: var(--rphp-accent, #5b50e6);
|
|
26
108
|
}
|
|
27
109
|
|
|
28
110
|
.SignaturePad__canvas {
|
|
29
111
|
display: block;
|
|
30
|
-
border: 1px solid #ccc;
|
|
31
|
-
border-radius: 4px;
|
|
32
112
|
cursor: crosshair;
|
|
33
113
|
touch-action: none;
|
|
34
|
-
background:
|
|
114
|
+
background: transparent;
|
|
115
|
+
position: relative;
|
|
116
|
+
z-index: 1;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
/* Baseline the signature sits on ("✕ ————") */
|
|
120
|
+
.SignaturePad__baseline {
|
|
121
|
+
position: absolute;
|
|
122
|
+
left: 20px;
|
|
123
|
+
right: 20px;
|
|
124
|
+
bottom: 34px;
|
|
125
|
+
border-bottom: 1.5px solid var(--rphp-border, #e6e2da);
|
|
126
|
+
pointer-events: none;
|
|
127
|
+
z-index: 0;
|
|
35
128
|
}
|
|
36
129
|
|
|
130
|
+
.SignaturePad__baseline-x {
|
|
131
|
+
position: absolute;
|
|
132
|
+
left: 0;
|
|
133
|
+
bottom: 4px;
|
|
134
|
+
font-size: 11px;
|
|
135
|
+
color: var(--rphp-text-muted, #8b8880);
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
/* Footer: Clear on the left, Cancel + primary on the right */
|
|
37
139
|
.SignaturePad__buttons {
|
|
140
|
+
display: flex;
|
|
141
|
+
align-items: center;
|
|
142
|
+
justify-content: space-between;
|
|
143
|
+
gap: 8px;
|
|
144
|
+
margin-top: 16px;
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
.SignaturePad__buttons-right {
|
|
38
148
|
display: flex;
|
|
39
149
|
gap: 8px;
|
|
40
|
-
margin-top: 12px;
|
|
41
|
-
justify-content: flex-end;
|
|
42
150
|
}
|
|
43
151
|
|
|
44
|
-
.SignaturePad__button {
|
|
152
|
+
.SignaturePad__modal .SignaturePad__button {
|
|
45
153
|
padding: 8px 16px;
|
|
46
|
-
font-size:
|
|
47
|
-
|
|
154
|
+
font-size: 13px;
|
|
155
|
+
font-weight: 600;
|
|
156
|
+
font-family: var(--rphp-font, sans-serif);
|
|
157
|
+
border-radius: var(--rphp-radius, 9px);
|
|
48
158
|
cursor: pointer;
|
|
49
|
-
transition: background-color 0.
|
|
159
|
+
transition: background-color 0.15s, border-color 0.15s, box-shadow 0.15s;
|
|
50
160
|
}
|
|
51
161
|
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
162
|
+
/* Clear: quiet text button */
|
|
163
|
+
.SignaturePad__modal .SignaturePad__button--clear {
|
|
164
|
+
background: transparent;
|
|
165
|
+
border: none;
|
|
166
|
+
color: var(--rphp-text-muted, #8b8880);
|
|
167
|
+
padding-left: 8px;
|
|
168
|
+
padding-right: 8px;
|
|
56
169
|
}
|
|
57
170
|
|
|
58
|
-
.SignaturePad__button--clear:hover {
|
|
59
|
-
background: #
|
|
60
|
-
|
|
171
|
+
.SignaturePad__modal .SignaturePad__button--clear:hover {
|
|
172
|
+
background: var(--rphp-surface-alt, #f4f2ee);
|
|
173
|
+
color: var(--rphp-text-secondary, #57544d);
|
|
61
174
|
}
|
|
62
175
|
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
176
|
+
/* Cancel: secondary */
|
|
177
|
+
.SignaturePad__modal .SignaturePad__button--cancel {
|
|
178
|
+
background: var(--rphp-surface-alt, #f4f2ee);
|
|
179
|
+
border: 1px solid var(--rphp-border, #e6e2da);
|
|
180
|
+
color: var(--rphp-text-secondary, #57544d);
|
|
67
181
|
}
|
|
68
182
|
|
|
69
|
-
.SignaturePad__button--cancel:hover {
|
|
70
|
-
background: #
|
|
71
|
-
border-color: #
|
|
183
|
+
.SignaturePad__modal .SignaturePad__button--cancel:hover {
|
|
184
|
+
background: var(--rphp-surface-sunken, #efece5);
|
|
185
|
+
border-color: var(--rphp-border-strong, #b7b3ab);
|
|
72
186
|
}
|
|
73
187
|
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
188
|
+
/* Primary: accent */
|
|
189
|
+
.SignaturePad__modal .SignaturePad__button--done {
|
|
190
|
+
background: var(--rphp-accent, #5b50e6);
|
|
191
|
+
border: 1px solid var(--rphp-accent, #5b50e6);
|
|
192
|
+
color: var(--rphp-text-on-accent, #ffffff);
|
|
193
|
+
box-shadow: 0 2px 8px -2px var(--rphp-accent, #5b50e6);
|
|
78
194
|
}
|
|
79
195
|
|
|
80
|
-
.SignaturePad__button--done:hover {
|
|
81
|
-
background: #
|
|
82
|
-
border-color: #
|
|
196
|
+
.SignaturePad__modal .SignaturePad__button--done:hover {
|
|
197
|
+
background: var(--rphp-accent-strong, #4a40d4);
|
|
198
|
+
border-color: var(--rphp-accent-strong, #4a40d4);
|
|
83
199
|
}
|