@signosoft/signpad-js 0.3.0 → 0.3.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.
package/README.md
CHANGED
|
@@ -40,11 +40,11 @@ It expertly handles the complexities of **WebHID device connections**, signature
|
|
|
40
40
|
|
|
41
41
|
## 🔐 Lease Setup
|
|
42
42
|
|
|
43
|
-
To use the Signosoft Signpad component
|
|
43
|
+
To use the Signosoft Signpad component with physical signature hardware, a valid `lease` is **required**.
|
|
44
44
|
|
|
45
45
|
#### 🛑 CRITICAL: Mandatory Initialization
|
|
46
46
|
|
|
47
|
-
Without a valid lease, the component
|
|
47
|
+
Without a valid lease, the component can still render, but driver initialization and hardware communication features will be <b>disabled</b>.
|
|
48
48
|
|
|
49
49
|
### 1. Lease flow
|
|
50
50
|
|
|
@@ -56,7 +56,7 @@ Without a valid lease, the component <b>WILL NOT INITIALIZE</b> and hardware com
|
|
|
56
56
|
|
|
57
57
|
### 2. Frontend implementation (plain JavaScript reference)
|
|
58
58
|
|
|
59
|
-
```
|
|
59
|
+
```JS
|
|
60
60
|
async function fetchLease() {
|
|
61
61
|
try {
|
|
62
62
|
const response = await fetch(
|
|
@@ -129,7 +129,7 @@ To ensure proper communication via the **WebHID API**:
|
|
|
129
129
|
First, install the core package:
|
|
130
130
|
|
|
131
131
|
```bash
|
|
132
|
-
npm install
|
|
132
|
+
npm install @signosoft/signpad-js
|
|
133
133
|
```
|
|
134
134
|
|
|
135
135
|
### 🧰 Framework Integration Guide
|
|
@@ -608,6 +608,7 @@ Toggles the visibility of specific User Interface elements.
|
|
|
608
608
|
| :------------------------- | :-------- | :-------------------------------------------------------------- |
|
|
609
609
|
| `topBarVisible` | `boolean` | Shows/hides the entire top navigation bar. |
|
|
610
610
|
| `topBarClearButtonVisible` | `boolean` | Shows a "Clear" button in the top-left corner. |
|
|
611
|
+
| `topBarConnectButtonVisible` | `boolean` | Shows the connect/disconnect button area in the top-right corner. |
|
|
611
612
|
| `bottomBarVisible` | `boolean` | Shows/hides the entire bottom action bar. |
|
|
612
613
|
| `okButtonVisible` | `boolean` | Shows the **OK** button in the bottom bar. |
|
|
613
614
|
| `clearButtonVisible` | `boolean` | Shows the **Clear** button in the bottom bar. |
|
|
@@ -634,7 +635,7 @@ Handles component localization. It can load external files or use inline definit
|
|
|
634
635
|
|
|
635
636
|
| Field | Type | Description |
|
|
636
637
|
| :------------- | :------- | :---------------------------------------------------------------------------------------------------- |
|
|
637
|
-
| `lang` | `string` | The active language code
|
|
638
|
+
| `lang` | `string` | The active language code. Built-in translations are bundled for `'en'` and `'cs'`; other languages can be supplied via `langPath` or `translations`. |
|
|
638
639
|
| `langPath` | `string` | URL path to fetch translation files. Expects files in `[path]/[lang].json` format. |
|
|
639
640
|
| `translations` | `object` | An inline object containing key-value pairs (e.g., `{ "OK": "Confirm signature" }`). Overrides files. |
|
|
640
641
|
|
|
@@ -658,13 +659,13 @@ Standard event listeners triggered _after_ specific actions. Useful for observin
|
|
|
658
659
|
|
|
659
660
|
| Callback | Payload | Description |
|
|
660
661
|
| :------------- | :----------------------------------------------- | :------------------------------------------------------------------------------------------------- |
|
|
661
|
-
| `onPen` | `event: CustomEvent<IPenData
|
|
662
|
-
| `onConnect` | `event: CustomEvent
|
|
663
|
-
| `onDisconnect` |
|
|
662
|
+
| `onPen` | `event: CustomEvent<IPenData>` | Dispatched when a device or mouse fallback are in contact with component or signature pad display. |
|
|
663
|
+
| `onConnect` | `event: CustomEvent<{ deviceInfo: any }>` | Dispatched when a device or mouse fallback connects. |
|
|
664
|
+
| `onDisconnect` | `event: CustomEvent<void>` | Dispatched when the hardware connection is closed. |
|
|
664
665
|
| `onOk` | `event: CustomEvent<ISignatureConfirmationData>` | Dispatched when signature is confirmed. |
|
|
665
|
-
| `onClear` |
|
|
666
|
-
| `onCancel` |
|
|
667
|
-
| `onError` | `
|
|
666
|
+
| `onClear` | `event: CustomEvent<void>` | Dispatched when the canvas has been cleared. |
|
|
667
|
+
| `onCancel` | `event: CustomEvent<void>` | Dispatched when the user aborts the session. |
|
|
668
|
+
| `onError` | `event: CustomEvent<Error>` | Dispatched on critical failures (lease, driver, connection, etc.). |
|
|
668
669
|
|
|
669
670
|
> `actionHandlers` and `eventCallbacks` are separate hooks and can both be configured.
|
|
670
671
|
|
|
@@ -689,7 +690,8 @@ this.config = {
|
|
|
689
690
|
eventCallbacks: {
|
|
690
691
|
onConnect: (e) =>
|
|
691
692
|
console.log("Pad connected:", e.detail.deviceInfo.deviceName),
|
|
692
|
-
onError: (
|
|
693
|
+
onError: (event) =>
|
|
694
|
+
console.error("Signpad Error:", event.detail.message),
|
|
693
695
|
},
|
|
694
696
|
};
|
|
695
697
|
```
|
|
@@ -703,7 +705,7 @@ The following methods are available on the component instance to control the sig
|
|
|
703
705
|
| `connect()` | `Promise<boolean>` | Connects device to component |
|
|
704
706
|
| `disconnect()` | `Promise<void>` | Disconnects device from component |
|
|
705
707
|
| `startSigning()` | `Promise<void>` | Initializes a new signing session on the canvas and hardware. |
|
|
706
|
-
| `stopSigning()` | `Promise<any>` |
|
|
708
|
+
| `stopSigning()` | `Promise<any>` | Low-level session stop that returns the raw driver payload. |
|
|
707
709
|
| `ok()` | `Promise<ISignatureConfirmationData \| undefined>` | Finalizes the session, cleans the device screen, and returns the signature data. |
|
|
708
710
|
| `clear()` | `Promise<void>` | Wipes the signature from the UI and hardware without ending the session. |
|
|
709
711
|
| `cancel()` | `Promise<void>` | Aborts the current session and resets the component state. |
|
|
@@ -848,7 +850,9 @@ This is the standard way to confirm a signature. It:
|
|
|
848
850
|
|
|
849
851
|
#### 📜 `stopSigning()`
|
|
850
852
|
|
|
851
|
-
A low-level method that forces the driver to stop capturing data and returns the raw
|
|
853
|
+
A low-level method that forces the driver to stop capturing data and returns the raw driver payload. Unlike `ok()`, it does not trigger the full "Finalization" flow (UI transitions or device screen clearing).
|
|
854
|
+
|
|
855
|
+
> Note: `stopSigning()` intentionally exposes the unnormalized raw result, which is why it is documented as `Promise<any>`.
|
|
852
856
|
|
|
853
857
|
#### 📜 `clear()`
|
|
854
858
|
|
|
@@ -890,15 +894,24 @@ signosoft-signpad {
|
|
|
890
894
|
|
|
891
895
|
/* CSS Variables */
|
|
892
896
|
--sign-font-family: Arial, Helvetica, sans-serif;
|
|
897
|
+
--sign-common-border-radius: 8px;
|
|
893
898
|
|
|
894
899
|
/* Top Bar */
|
|
895
900
|
--sign-top-bar-bg-base: var(--background-color-10);
|
|
896
901
|
--sign-top-bar-text-base: var(--primary-color-0);
|
|
897
902
|
--sign-top-bar-padding: var(--spacing-constraints);
|
|
898
903
|
--sign-top-bar-min-height: var(--min-height);
|
|
904
|
+
--sign-top-bar-border-top-left-radius: var(--sign-common-border-radius);
|
|
905
|
+
--sign-top-bar-border-top-right-radius: var(--sign-common-border-radius);
|
|
906
|
+
--sign-top-bar-border-bottom-left-radius: 0;
|
|
907
|
+
--sign-top-bar-border-bottom-right-radius: 0;
|
|
899
908
|
|
|
900
909
|
/* Canvas Area */
|
|
901
910
|
--sign-canvas-bg-base: var(--background-color-0);
|
|
911
|
+
--sign-canvas-wrapper-border-top-left-radius: 0;
|
|
912
|
+
--sign-canvas-wrapper-border-top-right-radius: 0;
|
|
913
|
+
--sign-canvas-wrapper-border-bottom-left-radius: 0;
|
|
914
|
+
--sign-canvas-wrapper-border-bottom-right-radius: 0;
|
|
902
915
|
|
|
903
916
|
/* Line */
|
|
904
917
|
--sign-line-height: 22px;
|
|
@@ -914,6 +927,10 @@ signosoft-signpad {
|
|
|
914
927
|
--sign-bottom-bar-padding: var(--spacing-constraints);
|
|
915
928
|
--sign-bottom-bar-min-height: var(--min-height);
|
|
916
929
|
--sign-bottom-bar-gap: 12px;
|
|
930
|
+
--sign-bottom-bar-border-top-left-radius: 0;
|
|
931
|
+
--sign-bottom-bar-border-top-right-radius: 0;
|
|
932
|
+
--sign-bottom-bar-border-bottom-left-radius: var(--sign-common-border-radius);
|
|
933
|
+
--sign-bottom-bar-border-bottom-right-radius: var(--sign-common-border-radius);
|
|
917
934
|
|
|
918
935
|
/* Button general settings */
|
|
919
936
|
--sign-button-font-size: 16px;
|
|
@@ -968,6 +985,7 @@ signosoft-signpad {
|
|
|
968
985
|
| `--white-color` | `#ffffff` | Pure white color. |
|
|
969
986
|
| `--grey-color` | `#b5b9be` | Disabled state color. |
|
|
970
987
|
| `--sign-font-family` | `Arial, sans-serif` | Global font family. |
|
|
988
|
+
| `--sign-common-border-radius` | `8px` | Shared radius token reused by bars and buttons. |
|
|
971
989
|
|
|
972
990
|
#### Layout & Constraints
|
|
973
991
|
|
|
@@ -984,12 +1002,20 @@ signosoft-signpad {
|
|
|
984
1002
|
| `--sign-top-bar-text-base` | `var(--primary-color-0)` | Text color in the top bar. |
|
|
985
1003
|
| `--sign-top-bar-padding` | `var(--spacing-constraints)` | Inner padding of the top bar. |
|
|
986
1004
|
| `--sign-top-bar-min-height` | `var(--min-height)` | Minimum height of the top bar. |
|
|
1005
|
+
| `--sign-top-bar-border-top-left-radius` | `var(--sign-common-border-radius)` | Top-left radius of the top bar. |
|
|
1006
|
+
| `--sign-top-bar-border-top-right-radius` | `var(--sign-common-border-radius)` | Top-right radius of the top bar. |
|
|
1007
|
+
| `--sign-top-bar-border-bottom-left-radius` | `0` | Bottom-left radius of the top bar. |
|
|
1008
|
+
| `--sign-top-bar-border-bottom-right-radius` | `0` | Bottom-right radius of the top bar. |
|
|
987
1009
|
|
|
988
1010
|
#### Canvas & Signature Line
|
|
989
1011
|
|
|
990
1012
|
| Variable | Default | Description |
|
|
991
1013
|
| :---------------------------------- | :--------------------------------------------- | :-------------------------------------------- |
|
|
992
1014
|
| `--sign-canvas-bg-base` | `var(--background-color-0)` | Background color of the drawing area. |
|
|
1015
|
+
| `--sign-canvas-wrapper-border-top-left-radius` | `0` | Top-left canvas radius, typically rounded when the top bar is hidden. |
|
|
1016
|
+
| `--sign-canvas-wrapper-border-top-right-radius` | `0` | Top-right canvas radius, typically rounded when the top bar is hidden. |
|
|
1017
|
+
| `--sign-canvas-wrapper-border-bottom-left-radius` | `0` | Bottom-left canvas radius, typically rounded when the bottom bar is hidden. |
|
|
1018
|
+
| `--sign-canvas-wrapper-border-bottom-right-radius` | `0` | Bottom-right canvas radius, typically rounded when the bottom bar is hidden. |
|
|
993
1019
|
| `--sign-line-height` | `22px` | Vertical offset/height for the guide line. |
|
|
994
1020
|
| `--sign-line-margin-bottom` | `16px` | Bottom spacing used in canvas line layout. |
|
|
995
1021
|
| `--sign-line-border-base` | `var(--primary-color-10)` | Color of the signature guide line. |
|
|
@@ -1006,6 +1032,10 @@ signosoft-signpad {
|
|
|
1006
1032
|
| `--sign-bottom-bar-padding` | `var(--spacing-constraints)` | Inner padding of the bottom bar. |
|
|
1007
1033
|
| `--sign-bottom-bar-min-height` | `var(--min-height)` | Minimum height of the bottom bar. |
|
|
1008
1034
|
| `--sign-bottom-bar-gap` | `12px` | Space between buttons in the bottom bar. |
|
|
1035
|
+
| `--sign-bottom-bar-border-top-left-radius` | `0` | Top-left radius of the bottom bar. |
|
|
1036
|
+
| `--sign-bottom-bar-border-top-right-radius` | `0` | Top-right radius of the bottom bar. |
|
|
1037
|
+
| `--sign-bottom-bar-border-bottom-left-radius` | `var(--sign-common-border-radius)` | Bottom-left radius of the bottom bar. |
|
|
1038
|
+
| `--sign-bottom-bar-border-bottom-right-radius` | `var(--sign-common-border-radius)` | Bottom-right radius of the bottom bar. |
|
|
1009
1039
|
|
|
1010
1040
|
#### Buttons (General)
|
|
1011
1041
|
|
|
@@ -1220,7 +1220,7 @@ class UB {
|
|
|
1220
1220
|
this.configEventHandlers = {};
|
|
1221
1221
|
}
|
|
1222
1222
|
}
|
|
1223
|
-
const LB = ":host{--primary-color-0: #4e56ea;--primary-color-10: #7178ee;--background-color-0: #f1f2fd;--background-color-10: #e3e4fc;--text-color-0: #333e4a;--white-color: #ffffff;--grey-color: #b5b9be;--min-height: 48px;--spacing-constraints: 16px 24px;--sign-font-family: Arial, Helvetica, sans-serif;--sign-top-bar-bg-base: var(--background-color-10);--sign-top-bar-text-base: var(--primary-color-0);--sign-top-bar-padding: var(--spacing-constraints);--sign-top-bar-min-height: var(--min-height);--sign-canvas-bg-base: var(--background-color-0);--sign-line-height: 22px;--sign-line-margin-bottom: 16px;--sign-line-border-base: var(--primary-color-10);--sign-line-additional-text-color: var(--text-color-0);--sign-line-margin: 0px 24px var(--sign-line-margin-bottom) 24px;--sign-canvas-line-text-font-size: 12px;--sign-canvas-height-offset: var(--sign-line-height);--sign-bottom-bar-bg-base: var(--background-color-10);--sign-bottom-bar-padding: var(--spacing-constraints);--sign-bottom-bar-min-height: var(--min-height);--sign-bottom-bar-gap: 12px;--sign-button-font-size: 16px;--sign-button-padding: 14px 16px;--sign-button-min-height: var(--min-height);--sign-button-border-radius:
|
|
1223
|
+
const LB = ":host{--primary-color-0: #4e56ea;--primary-color-10: #7178ee;--background-color-0: #f1f2fd;--background-color-10: #e3e4fc;--text-color-0: #333e4a;--white-color: #ffffff;--grey-color: #b5b9be;--min-height: 48px;--spacing-constraints: 16px 24px;--sign-font-family: Arial, Helvetica, sans-serif;--sign-common-border-radius: 8px;--sign-top-bar-bg-base: var(--background-color-10);--sign-top-bar-text-base: var(--primary-color-0);--sign-top-bar-padding: var(--spacing-constraints);--sign-top-bar-min-height: var(--min-height);--sign-top-bar-border-top-left-radius: var(--sign-common-border-radius);--sign-top-bar-border-top-right-radius: var(--sign-common-border-radius);--sign-top-bar-border-bottom-left-radius: 0;--sign-top-bar-border-bottom-right-radius: 0;--sign-canvas-bg-base: var(--background-color-0);--sign-canvas-wrapper-border-top-left-radius: 0;--sign-canvas-wrapper-border-top-right-radius: 0;--sign-canvas-wrapper-border-bottom-left-radius: 0;--sign-canvas-wrapper-border-bottom-right-radius: 0;--sign-line-height: 22px;--sign-line-margin-bottom: 16px;--sign-line-border-base: var(--primary-color-10);--sign-line-additional-text-color: var(--text-color-0);--sign-line-margin: 0px 24px var(--sign-line-margin-bottom) 24px;--sign-canvas-line-text-font-size: 12px;--sign-canvas-height-offset: var(--sign-line-height);--sign-bottom-bar-bg-base: var(--background-color-10);--sign-bottom-bar-padding: var(--spacing-constraints);--sign-bottom-bar-min-height: var(--min-height);--sign-bottom-bar-gap: 12px;--sign-bottom-bar-border-top-left-radius: 0;--sign-bottom-bar-border-top-right-radius: 0;--sign-bottom-bar-border-bottom-left-radius: var(--sign-common-border-radius);--sign-bottom-bar-border-bottom-right-radius: var( --sign-common-border-radius );--sign-button-font-size: 16px;--sign-button-padding: 14px 16px;--sign-button-min-height: var(--min-height);--sign-button-border-radius: var(--sign-common-border-radius);--sign-button-font-weight: 500;--sign-button-primary-bg-base: var(--primary-color-0);--sign-button-primary-bg-hover: var(--primary-color-10);--sign-button-primary-bg-disabled: var(--grey-color);--sign-button-primary-text-base: var(--white-color);--sign-button-primary-text-hover: var(--white-color);--sign-button-primary-text-disabled: var(--white-color);--sign-button-primary-border-base: 1px solid var(--primary-color-0);--sign-button-primary-border-hover: 1px solid var(--primary-color-10);--sign-button-primary-border-disabled: 1px solid var(--grey-color);--sign-button-link-bg-base: transparent;--sign-button-link-bg-hover: var(--background-color-10);--sign-button-link-bg-disabled: transparent;--sign-button-link-text-base: var(--primary-color-0);--sign-button-link-text-hover: var(--primary-color-10);--sign-button-link-text-disabled: var(--grey-color);--sign-button-link-border-base: 1px solid var(--primary-color-0);--sign-button-link-border-hover: 1px solid var(--primary-color-10);--sign-button-link-border-disabled: 1px solid var(--grey-color);--sign-device-state-text-color-connected: green;--sign-device-state-text-color-disconnected: red;--sign-loading-overlay-bg-color: rgba(255, 255, 255, .8);--sign-loading-overlay-text-color: var(--text-color-0);--sign-loading-overlay-spinner-color: var(--primary-color-0);--sign-loading-overlay-spinner-border-color: rgba(78, 86, 234, .1);--sign-loading-overlay-spinner-size: 30px}html{font-family:var(--sign-font-family)!important}.signpad-canvas-container{display:flex;flex-direction:column;width:100%;height:100%;min-width:380px}.signpad-top-bar{display:flex;justify-content:space-between;padding:var(--sign-top-bar-padding);min-height:var(--sign-top-bar-min-height);background-color:var(--sign-top-bar-bg-base);color:var(--sign-top-bar-text-base);align-items:center;border-top-left-radius:var(--sign-top-bar-border-top-left-radius);border-top-right-radius:var(--sign-top-bar-border-top-right-radius);border-bottom-left-radius:var(--sign-top-bar-border-bottom-left-radius);border-bottom-right-radius:var(--sign-top-bar-border-bottom-right-radius)}.signpad-top-left-actions,.signpad-top-right-actions{display:flex;gap:var(--sign-bottom-bar-gap)}.signpad-top-left-actions{justify-content:flex-start}.signpad-top-right-actions{justify-content:flex-end}.signpad-canvas-wrapper{position:relative;width:100%;padding-top:16px;padding-bottom:56.25%;height:0;background-color:var(--sign-canvas-bg-base);box-sizing:border-box;overflow:hidden;border-top-left-radius:var(--sign-canvas-wrapper-border-top-left-radius);border-top-right-radius:var(--sign-canvas-wrapper-border-top-right-radius);border-bottom-left-radius:var( --sign-canvas-wrapper-border-bottom-left-radius );border-bottom-right-radius:var( --sign-canvas-wrapper-border-bottom-right-radius )}.signpad-canvas-container>.signpad-canvas-wrapper:first-child{--sign-canvas-wrapper-border-top-left-radius: var( --sign-common-border-radius );--sign-canvas-wrapper-border-top-right-radius: var( --sign-common-border-radius )}.signpad-canvas-container>.signpad-canvas-wrapper:last-child{--sign-canvas-wrapper-border-bottom-left-radius: var( --sign-common-border-radius );--sign-canvas-wrapper-border-bottom-right-radius: var( --sign-common-border-radius )}.signpad-canvas{position:absolute;width:100%;height:calc(100% - (var(--sign-canvas-height-offset) + var(--sign-line-margin-bottom)));left:0;top:0}.signpad-canvas-line-container{position:absolute;bottom:0;left:0;right:0;display:flex;justify-content:space-between;align-items:center;height:var(--sign-line-height);border-top:2px solid var(--sign-line-border-base);box-sizing:border-box;padding-top:6px;margin:var(--sign-line-margin)}.signpad-canvas-line-additional-text,.signpad-canvas-line-state,.signpad-canvas-line-state.connected{font-family:var(--sign-font-family);font-size:var(--sign-canvas-line-text-font-size)}.signpad-canvas-line-additional-text{color:var(--sign-line-additional-text-color);margin:0}.signpad-canvas-line-state{color:var(--sign-device-state-text-color-disconnected);margin:0}.signpad-canvas-line-state.connected{color:var(--sign-device-state-text-color-connected)}.signpad-bottom-bar{display:flex;flex-direction:row;gap:var(--sign-bottom-bar-gap);padding:var(--sign-bottom-bar-padding);min-height:var(--sign-bottom-bar-min-height);background-color:var(--sign-bottom-bar-bg-base);border-top-left-radius:var(--sign-bottom-bar-border-top-left-radius);border-top-right-radius:var(--sign-bottom-bar-border-top-right-radius);border-bottom-left-radius:var(--sign-bottom-bar-border-bottom-left-radius);border-bottom-right-radius:var(--sign-bottom-bar-border-bottom-right-radius)}.btn{font-family:var(--sign-font-family);min-height:var(--sign-button-min-height);padding:var(--sign-button-padding);margin:0;font-weight:var(--sign-button-font-weight);width:100%;font-size:var(--sign-button-font-size);border-radius:var(--sign-button-border-radius);transition:background-color .3s ease,color .3s ease,transform .1s ease}.btn:hover:not(:disabled){cursor:pointer}.btn:focus:not(:disabled){outline:none}.btn-primary{background-color:var(--sign-button-primary-bg-base);color:var(--sign-button-primary-text-base);border:var(--sign-button-primary-border-base)}.btn-primary:hover:not(:disabled){background-color:var(--sign-button-primary-bg-hover);color:var(--sign-button-primary-text-hover);border:var(--sign-button-primary-border-hover)}.btn-primary:disabled{background-color:var(--sign-button-primary-bg-disabled);color:var(--sign-button-primary-text-disabled);border:var(--sign-button-primary-border-disabled)}.btn-link{background-color:var(--sign-button-link-bg-base);color:var(--sign-button-link-text-base);border:var(--sign-button-link-border-base)}.btn-link:hover:not(:disabled){background-color:var(--sign-button-link-bg-hover);color:var(--sign-button-link-text-hover);border:var(--sign-button-link-border-hover)}.btn-link:disabled{background-color:var(--sign-button-link-bg-disabled);color:var(--sign-button-link-text-disabled);border:var(--sign-button-link-border-disabled)}.signpad-loading-overlay{position:absolute;top:0;left:0;width:100%;height:100%;background-color:var(--sign-loading-overlay-bg-color);display:flex;flex-direction:column;justify-content:center;align-items:center;z-index:10;text-align:center;gap:10px}.signpad-loading-overlay .spinner{border:4px solid var(--sign-loading-overlay-spinner-border-color);border-left-color:var(--sign-loading-overlay-spinner-color);border-radius:50%;width:var(--sign-loading-overlay-spinner-size);height:var(--sign-loading-overlay-spinner-size);animation:spin 1s linear infinite}.signpad-loading-overlay-text{font-family:var(--sign-font-family);color:var(--sign-loading-overlay-text-color);font-size:14px;margin:16px 0 0}@keyframes spin{to{transform:rotate(360deg)}}";
|
|
1224
1224
|
let XI = class {
|
|
1225
1225
|
constructor() {
|
|
1226
1226
|
this._device = null, this._isWasmInitialized = !1, this._module = null, this._disconnectHandler = null, this._eventCallbacks = /* @__PURE__ */ new Map(), this._callbackToHandle = /* @__PURE__ */ new Map(), this._masterCallback = null, this._penAspectCorrector = null, this._unexpectedDisconnectCallbacks = /* @__PURE__ */ new Set();
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
(function(q,U){typeof exports=="object"&&typeof module<"u"?U(exports,require("lit")):typeof define=="function"&&define.amd?define(["exports","lit"],U):(q=typeof globalThis<"u"?globalThis:q||self,U(q.SignosoftSignpad={},q.lit))})(this,(function(q,U){"use strict";const Dg=Q=>(A,I)=>{I!==void 0?I.addInitializer(()=>{customElements.define(Q,A)}):customElements.define(Q,A)};const FA=globalThis,XA=FA.ShadowRoot&&(FA.ShadyCSS===void 0||FA.ShadyCSS.nativeShadow)&&"adoptedStyleSheets"in Document.prototype&&"replace"in CSSStyleSheet.prototype,wI=Symbol(),SI=new WeakMap;let wg=class{constructor(A,I,g){if(this._$cssResult$=!0,g!==wI)throw Error("CSSResult is not constructable. Use `unsafeCSS` or `css` instead.");this.cssText=A,this.t=I}get styleSheet(){let A=this.o;const I=this.t;if(XA&&A===void 0){const g=I!==void 0&&I.length===1;g&&(A=SI.get(I)),A===void 0&&((this.o=A=new CSSStyleSheet).replaceSync(this.cssText),g&&SI.set(I,A))}return A}toString(){return this.cssText}};const Sg=Q=>new wg(typeof Q=="string"?Q:Q+"",void 0,wI),sg=(Q,A)=>{if(XA)Q.adoptedStyleSheets=A.map(I=>I instanceof CSSStyleSheet?I:I.styleSheet);else for(const I of A){const g=document.createElement("style"),E=FA.litNonce;E!==void 0&&g.setAttribute("nonce",E),g.textContent=I.cssText,Q.appendChild(g)}},sI=XA?Q=>Q:Q=>Q instanceof CSSStyleSheet?(A=>{let I="";for(const g of A.cssRules)I+=g.cssText;return Sg(I)})(Q):Q;const{is:ag,defineProperty:Kg,getOwnPropertyDescriptor:yg,getOwnPropertyNames:hg,getOwnPropertySymbols:Mg,getPrototypeOf:Gg}=Object,JA=globalThis,aI=JA.trustedTypes,Rg=aI?aI.emptyScript:"",Ng=JA.reactiveElementPolyfillSupport,sA=(Q,A)=>Q,UA={toAttribute(Q,A){switch(A){case Boolean:Q=Q?Rg:null;break;case Object:case Array:Q=Q==null?Q:JSON.stringify(Q)}return Q},fromAttribute(Q,A){let I=Q;switch(A){case Boolean:I=Q!==null;break;case Number:I=Q===null?null:Number(Q);break;case Object:case Array:try{I=JSON.parse(Q)}catch{I=null}}return I}},PA=(Q,A)=>!ag(Q,A),KI={attribute:!0,type:String,converter:UA,reflect:!1,useDefault:!1,hasChanged:PA};Symbol.metadata??=Symbol("metadata"),JA.litPropertyMetadata??=new WeakMap;class aA extends HTMLElement{static addInitializer(A){this._$Ei(),(this.l??=[]).push(A)}static get observedAttributes(){return this.finalize(),this._$Eh&&[...this._$Eh.keys()]}static createProperty(A,I=KI){if(I.state&&(I.attribute=!1),this._$Ei(),this.prototype.hasOwnProperty(A)&&((I=Object.create(I)).wrapped=!0),this.elementProperties.set(A,I),!I.noAccessor){const g=Symbol(),E=this.getPropertyDescriptor(A,g,I);E!==void 0&&Kg(this.prototype,A,E)}}static getPropertyDescriptor(A,I,g){const{get:E,set:D}=yg(this.prototype,A)??{get(){return this[I]},set(S){this[I]=S}};return{get:E,set(S){const a=E?.call(this);D?.call(this,S),this.requestUpdate(A,a,g)},configurable:!0,enumerable:!0}}static getPropertyOptions(A){return this.elementProperties.get(A)??KI}static _$Ei(){if(this.hasOwnProperty(sA("elementProperties")))return;const A=Gg(this);A.finalize(),A.l!==void 0&&(this.l=[...A.l]),this.elementProperties=new Map(A.elementProperties)}static finalize(){if(this.hasOwnProperty(sA("finalized")))return;if(this.finalized=!0,this._$Ei(),this.hasOwnProperty(sA("properties"))){const I=this.properties,g=[...hg(I),...Mg(I)];for(const E of g)this.createProperty(E,I[E])}const A=this[Symbol.metadata];if(A!==null){const I=litPropertyMetadata.get(A);if(I!==void 0)for(const[g,E]of I)this.elementProperties.set(g,E)}this._$Eh=new Map;for(const[I,g]of this.elementProperties){const E=this._$Eu(I,g);E!==void 0&&this._$Eh.set(E,I)}this.elementStyles=this.finalizeStyles(this.styles)}static finalizeStyles(A){const I=[];if(Array.isArray(A)){const g=new Set(A.flat(1/0).reverse());for(const E of g)I.unshift(sI(E))}else A!==void 0&&I.push(sI(A));return I}static _$Eu(A,I){const g=I.attribute;return g===!1?void 0:typeof g=="string"?g:typeof A=="string"?A.toLowerCase():void 0}constructor(){super(),this._$Ep=void 0,this.isUpdatePending=!1,this.hasUpdated=!1,this._$Em=null,this._$Ev()}_$Ev(){this._$ES=new Promise(A=>this.enableUpdating=A),this._$AL=new Map,this._$E_(),this.requestUpdate(),this.constructor.l?.forEach(A=>A(this))}addController(A){(this._$EO??=new Set).add(A),this.renderRoot!==void 0&&this.isConnected&&A.hostConnected?.()}removeController(A){this._$EO?.delete(A)}_$E_(){const A=new Map,I=this.constructor.elementProperties;for(const g of I.keys())this.hasOwnProperty(g)&&(A.set(g,this[g]),delete this[g]);A.size>0&&(this._$Ep=A)}createRenderRoot(){const A=this.shadowRoot??this.attachShadow(this.constructor.shadowRootOptions);return sg(A,this.constructor.elementStyles),A}connectedCallback(){this.renderRoot??=this.createRenderRoot(),this.enableUpdating(!0),this._$EO?.forEach(A=>A.hostConnected?.())}enableUpdating(A){}disconnectedCallback(){this._$EO?.forEach(A=>A.hostDisconnected?.())}attributeChangedCallback(A,I,g){this._$AK(A,g)}_$ET(A,I){const g=this.constructor.elementProperties.get(A),E=this.constructor._$Eu(A,g);if(E!==void 0&&g.reflect===!0){const D=(g.converter?.toAttribute!==void 0?g.converter:UA).toAttribute(I,g.type);this._$Em=A,D==null?this.removeAttribute(E):this.setAttribute(E,D),this._$Em=null}}_$AK(A,I){const g=this.constructor,E=g._$Eh.get(A);if(E!==void 0&&this._$Em!==E){const D=g.getPropertyOptions(E),S=typeof D.converter=="function"?{fromAttribute:D.converter}:D.converter?.fromAttribute!==void 0?D.converter:UA;this._$Em=E;const a=S.fromAttribute(I,D.type);this[E]=a??this._$Ej?.get(E)??a,this._$Em=null}}requestUpdate(A,I,g,E=!1,D){if(A!==void 0){const S=this.constructor;if(E===!1&&(D=this[A]),g??=S.getPropertyOptions(A),!((g.hasChanged??PA)(D,I)||g.useDefault&&g.reflect&&D===this._$Ej?.get(A)&&!this.hasAttribute(S._$Eu(A,g))))return;this.C(A,I,g)}this.isUpdatePending===!1&&(this._$ES=this._$EP())}C(A,I,{useDefault:g,reflect:E,wrapped:D},S){g&&!(this._$Ej??=new Map).has(A)&&(this._$Ej.set(A,S??I??this[A]),D!==!0||S!==void 0)||(this._$AL.has(A)||(this.hasUpdated||g||(I=void 0),this._$AL.set(A,I)),E===!0&&this._$Em!==A&&(this._$Eq??=new Set).add(A))}async _$EP(){this.isUpdatePending=!0;try{await this._$ES}catch(I){Promise.reject(I)}const A=this.scheduleUpdate();return A!=null&&await A,!this.isUpdatePending}scheduleUpdate(){return this.performUpdate()}performUpdate(){if(!this.isUpdatePending)return;if(!this.hasUpdated){if(this.renderRoot??=this.createRenderRoot(),this._$Ep){for(const[E,D]of this._$Ep)this[E]=D;this._$Ep=void 0}const g=this.constructor.elementProperties;if(g.size>0)for(const[E,D]of g){const{wrapped:S}=D,a=this[E];S!==!0||this._$AL.has(E)||a===void 0||this.C(E,void 0,D,a)}}let A=!1;const I=this._$AL;try{A=this.shouldUpdate(I),A?(this.willUpdate(I),this._$EO?.forEach(g=>g.hostUpdate?.()),this.update(I)):this._$EM()}catch(g){throw A=!1,this._$EM(),g}A&&this._$AE(I)}willUpdate(A){}_$AE(A){this._$EO?.forEach(I=>I.hostUpdated?.()),this.hasUpdated||(this.hasUpdated=!0,this.firstUpdated(A)),this.updated(A)}_$EM(){this._$AL=new Map,this.isUpdatePending=!1}get updateComplete(){return this.getUpdateComplete()}getUpdateComplete(){return this._$ES}shouldUpdate(A){return!0}update(A){this._$Eq&&=this._$Eq.forEach(I=>this._$ET(I,this[I])),this._$EM()}updated(A){}firstUpdated(A){}}aA.elementStyles=[],aA.shadowRootOptions={mode:"open"},aA[sA("elementProperties")]=new Map,aA[sA("finalized")]=new Map,Ng?.({ReactiveElement:aA}),(JA.reactiveElementVersions??=[]).push("2.1.2");const kg={attribute:!0,type:String,converter:UA,reflect:!1,hasChanged:PA},tg=(Q=kg,A,I)=>{const{kind:g,metadata:E}=I;let D=globalThis.litPropertyMetadata.get(E);if(D===void 0&&globalThis.litPropertyMetadata.set(E,D=new Map),g==="setter"&&((Q=Object.create(Q)).wrapped=!0),D.set(I.name,Q),g==="accessor"){const{name:S}=I;return{set(a){const h=A.get.call(this);A.set.call(this,a),this.requestUpdate(S,h,Q,!0,a)},init(a){return a!==void 0&&this.C(S,void 0,Q,a),a}}}if(g==="setter"){const{name:S}=I;return function(a){const h=this[S];A.call(this,a),this.requestUpdate(S,h,Q,!0,a)}}throw Error("Unsupported decorator location: "+g)};function Fg(Q){return(A,I)=>typeof I=="object"?tg(Q,A,I):((g,E,D)=>{const S=E.hasOwnProperty(D);return E.constructor.createProperty(D,g),S?Object.getOwnPropertyDescriptor(E,D):void 0})(Q,A,I)}const Jg=(Q,A,I)=>(I.configurable=!0,I.enumerable=!0,Reflect.decorate&&typeof A!="object"&&Object.defineProperty(Q,A,I),I);function Ug(Q,A){return(I,g,E)=>{const D=S=>S.renderRoot?.querySelector(Q)??null;return Jg(I,g,{get(){return D(this)}})}}var R=(Q=>(Q.INITIAL="initial",Q.DISCONNECTED="disconnected",Q.FINISHED="finished",Q.CONNECTING="connecting",Q.WAITING_FOR_DEVICE_SELECTION="waiting_for_device_selection",Q.CONNECTED_PHYSICAL="connected_physical",Q.CONNECTED_MOUSE_FALLBACK="connected_mouse_fallback",Q.SIGNING_ACTIVE="signing_active",Q.PROCESSING_OK="processing_ok",Q.PROCESSING_CLEAR="processing_clear",Q.PROCESSING_CANCEL="processing_cancel",Q.DISCONNECTING="disconnecting",Q.ERROR="error",Q))(R||{}),Y=(Q=>(Q.SIGN_PEN="sign-pen",Q.SIGN_OK="sign-ok",Q.SIGN_CLEAR="sign-clear",Q.SIGN_CANCEL="sign-cancel",Q.SIGN_ERROR="sign-error",Q.SIGN_CONNECT="sign-connect",Q.SIGN_DISCONNECT="sign-disconnect",Q))(Y||{}),yI=(Q=>(Q.OK="OK",Q.CLEAR="CLEAR",Q.CANCEL="CANCEL",Q.CLEAR_SIGNATURE="CLEAR_SIGNATURE",Q.DISCONNECT="DISCONNECT",Q.CONNECT_SIGNPAD="CONNECT_SIGNPAD",Q))(yI||{}),L=(Q=>(Q.AUTO_CONNECTING="AUTO_CONNECTING",Q.CONNECTING_TO_DEVICE="CONNECTING_TO_DEVICE",Q.DISCONNECTING_DEVICE="DISCONNECTING_DEVICE",Q.COMPONENT_INITIALIZED="COMPONENT_INITIALIZED",Q.TEXT_START_SIGNING="TEXT_START_SIGNING",Q.TEXT_SIGN_WITH_PHYSICAL="TEXT_SIGN_WITH_PHYSICAL",Q.TEXT_SIGN_WITH_MOUSE="TEXT_SIGN_WITH_MOUSE",Q.TEXT_SIGN_GENERIC="TEXT_SIGN_GENERIC",Q.TEXT_SIGNING_WITH_DEVICE="TEXT_SIGNING_WITH_DEVICE",Q.NO_DEVICE_FOUND="NO_DEVICE_FOUND",Q.CONNECTION_ERROR="CONNECTION_ERROR",Q.ERROR_DISCONNECTION="ERROR_DISCONNECTION",Q.ERROR_INSTANTIATING_DRIVER="ERROR_INSTANTIATING_DRIVER",Q.SIGNPAD_DISCONNECTED="SIGNPAD_DISCONNECTED",Q.DEVICE_UNEXPECTEDLY_DISCONNECTED="DEVICE_UNEXPECTEDLY_DISCONNECTED",Q.SIGN_SUCCESSFUL="SIGN_SUCCESSFUL",Q.SIGN_CANCELLED="SIGN_CANCELLED",Q.SIGN_CLEARED="SIGN_CLEARED",Q.MISSING_LICENSE_KEY="MISSING_LICENSE_KEY",Q.READY_TO_CONNECT="READY_TO_CONNECT",Q.SIGNPAD_DETECTED="SIGNPAD_DETECTED",Q.NO_LICENSE_KEY="NO_LICENSE_KEY",Q))(L||{}),X=(Q=>(Q.NOT_CONNECTED="NOT_CONNECTED",Q.CONNECTED="CONNECTED",Q.CONNECTING="CONNECTING",Q.MOUSE="MOUSE",Q.CONNECTED_UNKNOWN="CONNECTED_UNKNOWN_DEVICE",Q))(X||{});class Lg{constructor(A){this.component=A}async handleClear(){await this.executeAction(R.PROCESSING_CLEAR,async()=>{await this.component.connectionManager.clearSignature(),await this.component.config.actionHandlers?.handleClear?.(),this.component.dispatch(Y.SIGN_CLEAR)})}async handleOk(){return await this.executeAction(R.PROCESSING_OK,async()=>{const A=await this.component.connectionManager.stopSigning();return await this.component.config.actionHandlers?.handleOk?.(A),this.component.dispatch(Y.SIGN_OK,A),A})}async handleCancel(){await this.executeAction(R.PROCESSING_CANCEL,async()=>{await this.component.config.actionHandlers?.handleCancel?.(),this.component.dispatch(Y.SIGN_CANCEL)})}async startSigning(A){const I=this.component.connectionManager,g=this.component.canvasRef;if(!I.hasSignatureLayer()||!g){this.handleStartSigningError();return}this.component.stateManager.transitionTo(R.CONNECTING,"Preparing session...");try{this.component.resetDrawingState(),await I.startSigning(g,A);const E=await this.getReadyState(),D=E===R.CONNECTED_MOUSE_FALLBACK?"READY_TO_SIGN_MOUSE":"READY_TO_SIGN_PHYSICAL";this.component.stateManager.transitionTo(E,D)}catch(E){this.handleError("Error starting signing session",E)}}async stopSigning(){return this.component.connectionManager.stopSigning()}async executeAction(A,I){this.component.stateManager.transitionTo(A,"Processing...");try{const g=await I();return this.component.resetDrawingState(),await this.finalizePostAction(),g}catch(g){throw this.handleError("Error during action processing",g),g}}async getReadyState(){const A=this.component.connectionManager.isDeviceConnected(),I=await this.component.connectionManager.getDeviceInfo();return this.component.connectionManager.isFallback(I,A,!0)?R.CONNECTED_MOUSE_FALLBACK:R.CONNECTED_PHYSICAL}async finalizePostAction(){const A=await this.getReadyState();this.component.config.autoconnectOptions?.autoRestartSigningAfterAction?await this.startSigning():this.component.stateManager.transitionTo(A,"Ready.")}handleStartSigningError(){this.component.currentState===R.CONNECTED_MOUSE_FALLBACK&&(this.component.resetDrawingState(),this.component.mouseManager?.addListeners(),this.component.stateManager.transitionTo(R.CONNECTED_MOUSE_FALLBACK))}handleError(A,I){console.error(`Signosoft Signpad: ${A}`,I),this.component.stateManager.transitionTo(R.ERROR,A,I)}}class cg{constructor(A,I={minWidth:1,maxWidth:3,color:"#000000"}){this.lastDrawPoint=null,this.canvas=A;const g=A.getContext("2d");if(!g)throw new Error("Could not get 2D rendering context for canvas.");this.ctx=g,this.currentDrawingOptions=I,this.configureCanvasForDPI(),this.applyDrawingStyles(this.currentDrawingOptions)}get drawingOptions(){return{...this.currentDrawingOptions}}updateDrawingOptions(A){this.currentDrawingOptions=A,this.applyDrawingStyles(this.currentDrawingOptions)}drawSegment(A){const I=this.ctx,g=this.canvas,E=this.currentDrawingOptions,D=A.relativeX??0,S=A.relativeY??0,a=D*g.width,h=S*g.height,F=this.drawingOptions.minWidth+(this.drawingOptions.maxWidth-this.drawingOptions.minWidth)*(A.pressure??0);I.strokeStyle=E.color??"#000000",I.lineWidth=F,A.inContact?this.lastDrawPoint?(I.beginPath(),I.moveTo(this.lastDrawPoint.x,this.lastDrawPoint.y),I.lineTo(a,h),I.stroke(),this.lastDrawPoint={x:a,y:h}):this.lastDrawPoint={x:a,y:h}:this.lastDrawPoint=null}clear(){this.ctx.clearRect(0,0,this.canvas.width,this.canvas.height),this.lastDrawPoint=null}configureCanvasForDPI(){const A=window.devicePixelRatio||1,I=this.canvas.getBoundingClientRect(),g=I.width||this.canvas.clientWidth||0,E=I.height||this.canvas.clientHeight||0;if(g<=0||E<=0)return;const D=Math.round(g*A),S=Math.round(E*A);this.canvas.width===D&&this.canvas.height===S||(this.canvas.width=D,this.canvas.height=S)}applyDrawingStyles(A){this.ctx.strokeStyle=A.color??"#000000",this.ctx.lineCap="round",this.ctx.lineJoin="round",this.ctx.globalCompositeOperation="source-over"}}class Yg{constructor(A){this.sigLayer=null,this.debugCallbackRegistrationCount=0,this.cachedDeviceInfo=null,this.lastPenDispatchTime=0,this.penDataToDispatch=null,this.throttleDelayMs=16,this.component=A}async connect(A=!1,I=!1){this.component.stateManager.transitionTo(R.CONNECTING,A?L.AUTO_CONNECTING:L.CONNECTING_TO_DEVICE);try{const g=await this.sigLayer?.connect(A),E=this.sigLayer?.isConnected()??!1,D=!!(g&&E),S=D?this.normalizeDeviceInfo(await this.sigLayer?.getDeviceInfo()):null;this.cachedDeviceInfo=S??null;const a=D&&(S?.deviceName??S?.name??null)==="Pointer Input (Fallback Mode)",h=this.component.canvasRef;let F,l;if(D&&!a){const f=S?.deviceName??S?.name??X.CONNECTED_UNKNOWN;this.component.setDeviceStatusText(f),F=R.CONNECTED_PHYSICAL,l=L.TEXT_SIGN_WITH_PHYSICAL,this.component.mouseManager?.areListenersAttached()&&this.component.mouseManager?.removeListeners()}else if(D&&a||!D&&I)this.component.setDeviceStatusText(X.MOUSE),F=R.CONNECTED_MOUSE_FALLBACK,l=L.TEXT_SIGN_WITH_MOUSE;else return this.component.stateManager.transitionTo(R.DISCONNECTED,L.NO_DEVICE_FOUND),!1;const p=this.component.configManager.getDrawingOptions();return this.sigLayer?.isInSigningMode?.()&&await this.sigLayer.stopSigning(),await this.sigLayer?.startSigning(h,!0,p),this.component.stateManager.transitionTo(F,l),this.component.dispatch(Y.SIGN_CONNECT,{deviceInfo:S}),!0}catch(g){return console.error("Signosoft Signpad: Error in connect method:",g),this.component.stateManager.transitionTo(R.ERROR,L.CONNECTION_ERROR,g),!1}}async disconnect(){this.component.stateManager.transitionTo(R.DISCONNECTING,L.DISCONNECTING_DEVICE);try{await this.sigLayer?.disconnect(),this.sigLayer=null,this.cachedDeviceInfo=null}catch(A){console.error("Signosoft Signpad: Error during disconnect",A),this.component.stateManager.transitionTo(R.ERROR,L.ERROR_DISCONNECTION,A)}}hasSignatureLayer(){return this.sigLayer!==null}async getDeviceInfo(){if(this.cachedDeviceInfo)return this.cachedDeviceInfo;const A=this.normalizeDeviceInfo(await this.sigLayer?.getDeviceInfo());return this.cachedDeviceInfo=A??null,A}isDeviceConnected(){return this.sigLayer?.isConnected()??!1}isSigningActive(){return this.sigLayer?.isInSigningMode?.()??!1}async startSigning(A,I){if(!this.sigLayer)return!1;const g=I??this.component.configManager.getDrawingOptions();return await this.sigLayer.startSigning(A,!0,g),!0}async stopSigning(){try{if(this.sigLayer)return await this.sigLayer.stopSigning()}catch(A){console.warn("Signosoft Signpad: SigLayer stop failed, continuing cleanup",A)}finally{this.component.mouseManager?.removeListeners(),this.component.resetDrawingState(),console.log("[ConnectionManager] Signing stopped and mouse listeners removed.")}}async clearSignature(){this.sigLayer?.isInSigningMode&&await this.sigLayer.clearSignature()}async ensureSignatureLayer(){if(!this.sigLayer)try{this.sigLayer=new SignatureLayer,this.setupCallbacks()}catch(A){throw console.error("Signosoft Signpad: Error instantiating driver",A),this.component.stateManager.transitionTo(R.ERROR,L.ERROR_INSTANTIATING_DRIVER,A),A}}setupCallbacks(){this.sigLayer&&(this.debugCallbackRegistrationCount+=1,console.log(`[Signpad Debug] SignatureLayer callbacks registered (${this.debugCallbackRegistrationCount})`),this.sigLayer.onOK(()=>this.component.buttonManager.handleOk()),this.sigLayer.onClear(()=>this.component.buttonManager.handleClear()),this.sigLayer.onCancel(()=>this.component.buttonManager.handleCancel()),this.sigLayer.onPen(A=>{A.inContact&&!this.component.hasStartedDrawing&&this.component.stateManager.setDrawingStarted(!0),this.runThrottledPenDispatch(A)}),this.sigLayer.onUnexpectedDisconnect(()=>{const A=this.component.currentState;A!==R.DISCONNECTING&&A!==R.INITIAL&&A!==R.DISCONNECTED&&A!==R.ERROR&&(this.component.stateManager.transitionTo(R.DISCONNECTED,L.DEVICE_UNEXPECTEDLY_DISCONNECTED),this.component.dispatch(Y.SIGN_DISCONNECT))}))}runThrottledPenDispatch(A){if(this.component.stateManager.isBusy||this.component.stateManager.isError)return;this.penDataToDispatch=A;const I=performance.now();I-this.lastPenDispatchTime>this.throttleDelayMs&&(this.component.dispatch(Y.SIGN_PEN,this.penDataToDispatch),this.lastPenDispatchTime=I,this.penDataToDispatch=null)}async initWithLease(A){await this.ensureSignatureLayer(),this.sigLayer&&await this.sigLayer.initialize(A)}isFallback(A,I,g){const D=(A?.deviceName??A?.name??null)==="Pointer Input (Fallback Mode)",S=this.component.currentState===R.CONNECTED_MOUSE_FALLBACK,a=this.component.deviceStatusText===X.MOUSE;return D||S||a||g&&!I}normalizeDeviceInfo(A){return A?!A.deviceName&&A.name?{...A,deviceName:A.name}:A:null}}class eg{constructor(A){this.component=A}get deviceStatusKey(){return this.component.currentState===R.CONNECTED_MOUSE_FALLBACK?X.MOUSE:this.isConnected?this.component.deviceStatusText||X.CONNECTED_UNKNOWN:X.NOT_CONNECTED}get statusMessageKey(){return this.component.statusMessage||""}get additionalTextKey(){const A=R,I=L;switch(this.component.currentState){case A.INITIAL:case A.DISCONNECTED:case A.ERROR:return I.TEXT_START_SIGNING;case A.CONNECTED_PHYSICAL:return I.TEXT_SIGN_WITH_PHYSICAL;case A.CONNECTED_MOUSE_FALLBACK:return I.TEXT_SIGN_WITH_MOUSE;case A.SIGNING_ACTIVE:return I.TEXT_SIGNING_WITH_DEVICE;default:return I.TEXT_SIGN_GENERIC}}get isConnected(){const A=this.component.currentState;return A===R.CONNECTED_PHYSICAL||A===R.CONNECTED_MOUSE_FALLBACK||A===R.SIGNING_ACTIVE||A===R.PROCESSING_OK||A===R.PROCESSING_CLEAR||A===R.PROCESSING_CANCEL}get isBusy(){const A=this.component.currentState;return A===R.CONNECTING||A===R.WAITING_FOR_DEVICE_SELECTION||A===R.PROCESSING_OK||A===R.PROCESSING_CLEAR||A===R.PROCESSING_CANCEL||A===R.DISCONNECTING}get isError(){return this.component.currentState===R.ERROR}get actionButtonsDisabled(){return!this.isConnected||!this.component.hasStartedDrawing||this.isBusy}get connectButtonDisabled(){return this.isBusy||this.isConnected}get disconnectButtonDisabled(){const A=this.component.currentState;return A===R.DISCONNECTED||A===R.INITIAL||this.isBusy}transitionTo(A,I="",g){const E=this.component.currentState;E===A&&this.component.statusMessage===I&&!g||(this.component.setCurrentState(A),this.component.setStatusMessage(I),this.handleSideEffects(A,E),g&&this.component.dispatch(Y.SIGN_ERROR,g))}setDrawingStarted(A){this.component.hasStartedDrawing!==A&&this.component.setHasStartedDrawing(A)}handleSideEffects(A,I){const g=E=>E===R.INITIAL||E===R.DISCONNECTED||E===R.ERROR;g(A)?(this.component.setDeviceStatusText(X.NOT_CONNECTED),g(I)||(this.component.resetDrawingState(),this.component.mouseManager?.removeListeners())):(A===R.CONNECTED_PHYSICAL||A===R.CONNECTED_MOUSE_FALLBACK)&&(A===R.CONNECTED_MOUSE_FALLBACK?I===R.PROCESSING_OK||I===R.PROCESSING_CLEAR||I===R.PROCESSING_CANCEL||this.component.mouseManager?.addListeners():I===R.CONNECTED_MOUSE_FALLBACK&&this.component.mouseManager?.removeListeners())}}class ng{constructor(A,I){this.isDrawing=!1,this.sequenceCounter=0,this.sessionStartTime=null,this.debugListenerRegistrationCount=0,this.listenersAttached=!1,this.canvas=A,this.onPenData=I,this.boundHandleMouseDown=this.handleMouseDown.bind(this),this.boundHandleMouseMove=this.handleMouseMove.bind(this),this.boundHandleMouseUp=this.handleMouseUp.bind(this),this.boundHandleMouseLeave=this.handleMouseLeave.bind(this)}get isCurrentlyDrawing(){return this.isDrawing}addListeners(){if(this.listenersAttached){console.log("[Signpad Debug] Mouse listeners already registered");return}this.listenersAttached=!0,this.debugListenerRegistrationCount+=1,console.log(`[Signpad Debug] Mouse listeners registered (${this.debugListenerRegistrationCount})`),this.canvas.addEventListener("mousedown",this.boundHandleMouseDown),this.canvas.addEventListener("mousemove",this.boundHandleMouseMove),this.canvas.addEventListener("mouseup",this.boundHandleMouseUp),this.canvas.addEventListener("mouseleave",this.boundHandleMouseLeave)}removeListeners(){if(!this.listenersAttached){console.log("[Signpad Debug] Mouse listeners already removed");return}this.listenersAttached=!1,console.log("[Signpad Debug] Mouse listeners removed"),this.canvas.removeEventListener("mousedown",this.boundHandleMouseDown),this.canvas.removeEventListener("mousemove",this.boundHandleMouseMove),this.canvas.removeEventListener("mouseup",this.boundHandleMouseUp),this.canvas.removeEventListener("mouseleave",this.boundHandleMouseLeave),this.isDrawing=!1,this.sequenceCounter=0}areListenersAttached(){return this.listenersAttached}resetSession(){this.isDrawing=!1,this.sequenceCounter=0,this.sessionStartTime=null}handleMouseDown(A){this.isDrawing=!0,this.sequenceCounter=0,this.sessionStartTime===null&&(this.sessionStartTime=Date.now()),this.processMouseEvent(A,!0)}handleMouseMove(A){this.isDrawing&&(this.sequenceCounter++,this.processMouseEvent(A,!0))}handleMouseUp(A){this.isDrawing&&(this.isDrawing=!1,this.processMouseEvent(A,!1),this.sequenceCounter=0)}handleMouseLeave(A){this.isDrawing&&(this.isDrawing=!1,this.processMouseEvent(A,!1),this.sequenceCounter=0)}processMouseEvent(A,I){const{x:g,y:E}=this.getNormalizedCoordinates(A),D={relativeX:g,relativeY:E,pressure:I?.5:0,inContact:I,timestamp:this.timestampToSeconds()};this.onPenData(D)}getNormalizedCoordinates(A){const I=this.canvas.getBoundingClientRect(),g=(A.clientX-I.left)/I.width,E=(A.clientY-I.top)/I.height;return{x:g,y:E}}timestampToSeconds(){this.sessionStartTime===null&&(this.sessionStartTime=Date.now());const I=(Date.now()-this.sessionStartTime)/1e3;return Number(I.toFixed(3))}}const LA={en:{OK:"OK",CLEAR:"Clear",CANCEL:"Cancel",CLEAR_SIGNATURE:"Clear signature",DISCONNECT:"Disconnect",CONNECT_SIGNPAD:"Connect Signpad",NOT_CONNECTED:"Not Connected",CONNECTED:"Connected",CONNECTING:"Connecting...",MOUSE:"Mouse",CONNECTED_UNKNOWN_DEVICE:"Connected (Unknown Device)",AUTO_CONNECTING:"Auto-connecting to device...",CONNECTING_TO_DEVICE:"Connecting to your device...",DISCONNECTING_DEVICE:"Disconnecting device...",COMPONENT_INITIALIZED:"Component initialized.",TEXT_START_SIGNING:"Connect your device.",TEXT_SIGN_WITH_PHYSICAL:"Please sign using the device pen.",TEXT_SIGN_WITH_MOUSE:"Please sign using your mouse.",TEXT_SIGN_GENERIC:"Sign in the area above using mouse or pen.",TEXT_SIGNING_WITH_DEVICE:"Signing with {device}",NO_DEVICE_FOUND:"No device found.",CONNECTION_ERROR:"Connection error.",ERROR_DISCONNECTION:"Error during disconnection.",ERROR_INSTANTIATING_DRIVER:"Error instantiating driver.",SIGNPAD_DISCONNECTED:"Signpad disconnected.",DEVICE_UNEXPECTEDLY_DISCONNECTED:"Device unexpectedly disconnected.",SIGN_SUCCESSFUL:"Signature saved successfully.",SIGN_CANCELLED:"Signing cancelled.",SIGN_CLEARED:"Signature cleared.",MISSING_LICENSE_KEY:"No license key provided. Please provide a license key to connect.",READY_TO_CONNECT:"Ready to connect.",SIGNPAD_DETECTED:"Signpad detected. Click 'Connect Signpad' to begin.",NO_LICENSE_KEY:"Device connected, but no license key provided."},cs:{OK:"OK",CLEAR:"Smazat",CANCEL:"Zrušit",CLEAR_SIGNATURE:"Smazat podpis",DISCONNECT:"Odpojit",CONNECT_SIGNPAD:"Připojit Signpad",NOT_CONNECTED:"Nepřipojeno",CONNECTED:"Připojeno",CONNECTING:"Připojování...",MOUSE:"Myš",CONNECTED_UNKNOWN_DEVICE:"Připojeno (neznámé zařízení)",AUTO_CONNECTING:"Automatické připojování k zařízení...",CONNECTING_TO_DEVICE:"Připojování k vašemu zařízení...",DISCONNECTING_DEVICE:"Odpojování zařízení...",COMPONENT_INITIALIZED:"Komponenta byla inicializována.",TEXT_START_SIGNING:"Připojte své zařízení.",TEXT_SIGN_WITH_PHYSICAL:"Podepište se perem zařízení.",TEXT_SIGN_WITH_MOUSE:"Podepište se pomocí myši.",TEXT_SIGN_GENERIC:"Podepište se v oblasti výše pomocí myši nebo pera.",TEXT_SIGNING_WITH_DEVICE:"Podepisování pomocí: {device}",NO_DEVICE_FOUND:"Zařízení nebylo nalezeno.",CONNECTION_ERROR:"Chyba připojení.",ERROR_DISCONNECTION:"Chyba při odpojování.",ERROR_INSTANTIATING_DRIVER:"Chyba při inicializaci ovladače.",SIGNPAD_DISCONNECTED:"Signpad byl odpojen.",DEVICE_UNEXPECTEDLY_DISCONNECTED:"Zařízení bylo neočekávaně odpojeno.",SIGN_SUCCESSFUL:"Podpis byl úspěšně uložen.",SIGN_CANCELLED:"Podepisování bylo zrušeno.",SIGN_CLEARED:"Podpis byl vymazán.",MISSING_LICENSE_KEY:"Nebyl poskytnut licenční klíč. Pro připojení prosím zadejte licenční klíč.",READY_TO_CONNECT:"Připraveno k připojení.",SIGNPAD_DETECTED:"Signpad byl nalezen. Klikněte na 'Připojit Signpad' pro spuštění.",NO_LICENSE_KEY:"Zařízení je připojeno, ale nebyl poskytnut licenční klíč."}};class Hg{constructor(A){this.translations=LA.en,this.currentLang="",this.currentPath=void 0,this.component=A}t(A,I={}){let g=this.translations[A]||A;for(const[E,D]of Object.entries(I))g=g.replace(new RegExp(`{${E}}`,"g"),D);return g}async loadLanguage(A,I,g){const E=I?.trim();if(A===this.currentLang&&E===this.currentPath)return;let D=this.getBaselineTranslations(A);const S=this.resolveInlineTranslations(A,g);if(S){this.translations={...D,...S},this.currentLang=A,this.currentPath=E,this.component.requestUpdate();return}if(!E){this.translations=D,this.currentLang=A,this.currentPath=E,this.component.requestUpdate();return}const a=this.constructUrl(A,E);try{const h=await fetch(a);if(h.ok){const F=await h.json();D={...D,...F},console.log(`signosoft-signpad: External translations loaded from ${a}`)}else I&&console.info(`signosoft-signpad: Custom path provided, but file not found at ${a}`)}catch(h){console.warn(`signosoft-signpad: Failed to load external translations from ${a}. Using built-in defaults.`,h)}this.translations=D,this.currentLang=A,this.currentPath=E,this.component.requestUpdate()}getBaselineTranslations(A){const I=LA.en;return A!=="en"&&LA.hasOwnProperty(A)?{...I,...LA[A]}:{...I}}resolveInlineTranslations(A,I){return I?typeof Object.values(I)[0]=="string"?I:I[A]:void 0}constructUrl(A,I){const g=I.trim();let E="";return g.endsWith(".json")?E=g:E=`${g.replace(/\/+$/,"")}/${A}.json`,E}}class rg{constructor(A){this.configEventHandlers={},this.customEventListenerCache=new WeakMap,this.component=A}apply(A){const I=this.component.config;if(!I){this.clearConfigEventHandlers();return}this.applyLocalization(A,I),this.applyDrawingOptions(A,I),this.syncConfigEventHandlers(I)}getUiVisibilityOptions(){const A=this.component.config.uiVisibilityOptions;return{topBarVisible:A?.topBarVisible??!0,topBarClearButtonVisible:A?.topBarClearButtonVisible??!1,topBarConnectButtonVisible:A?.topBarConnectButtonVisible??!0,bottomBarVisible:A?.bottomBarVisible??!0,okButtonVisible:A?.okButtonVisible??!0,clearButtonVisible:A?.clearButtonVisible??!0,cancelButtonVisible:A?.cancelButtonVisible??!0,canvasLineVisible:A?.canvasLineVisible??!0,deviceStatusTextVisible:A?.deviceStatusTextVisible??!0,additionalTextVisible:A?.additionalTextVisible??!0}}getDrawingOptions(){const A=this.component.config.canvasAndDrawingOptions;return{minWidth:A?.minWidth??1,maxWidth:A?.maxWidth??3,color:A?.color??"#000000"}}applyLocalization(A,I){const g=A?.languageOptions,E=I.languageOptions;(!A||g?.lang!==E?.lang||g?.langPath!==E?.langPath||g?.translations!==E?.translations)&&this.component.localizationManager.loadLanguage(E?.lang??"en",E?.langPath,E?.translations)}applyDrawingOptions(A,I){const g=A?.canvasAndDrawingOptions,E=I.canvasAndDrawingOptions;this.component.canvasManager&&(!A||g?.minWidth!==E?.minWidth||g?.maxWidth!==E?.maxWidth||g?.color!==E?.color)&&this.component.canvasManager.updateDrawingOptions(this.getDrawingOptions())}syncConfigEventHandlers(A){const I=S=>{if(!S)return;const a=this.customEventListenerCache.get(S);if(a)return a;const h=F=>{S(F)};return this.customEventListenerCache.set(S,h),h},g=A.eventCallbacks,E={[Y.SIGN_CONNECT]:I(g?.onConnect),[Y.SIGN_DISCONNECT]:I(g?.onDisconnect),[Y.SIGN_PEN]:I(g?.onPen),[Y.SIGN_OK]:I(g?.onOk),[Y.SIGN_CLEAR]:I(g?.onClear),[Y.SIGN_CANCEL]:I(g?.onCancel),[Y.SIGN_ERROR]:I(g?.onError)},D=new Set([...Object.keys(this.configEventHandlers),...Object.keys(E)]);for(const S of D){const a=this.configEventHandlers[S],h=E[S];a&&a!==h&&this.component.removeEventListener(S,a),h&&a!==h&&this.component.addEventListener(S,h),h?this.configEventHandlers[S]=h:delete this.configEventHandlers[S]}}clearConfigEventHandlers(){for(const[A,I]of Object.entries(this.configEventHandlers))I&&this.component.removeEventListener(A,I);this.configEventHandlers={}}}const qg=":host{--primary-color-0: #4e56ea;--primary-color-10: #7178ee;--background-color-0: #f1f2fd;--background-color-10: #e3e4fc;--text-color-0: #333e4a;--white-color: #ffffff;--grey-color: #b5b9be;--min-height: 48px;--spacing-constraints: 16px 24px;--sign-font-family: Arial, Helvetica, sans-serif;--sign-top-bar-bg-base: var(--background-color-10);--sign-top-bar-text-base: var(--primary-color-0);--sign-top-bar-padding: var(--spacing-constraints);--sign-top-bar-min-height: var(--min-height);--sign-canvas-bg-base: var(--background-color-0);--sign-line-height: 22px;--sign-line-margin-bottom: 16px;--sign-line-border-base: var(--primary-color-10);--sign-line-additional-text-color: var(--text-color-0);--sign-line-margin: 0px 24px var(--sign-line-margin-bottom) 24px;--sign-canvas-line-text-font-size: 12px;--sign-canvas-height-offset: var(--sign-line-height);--sign-bottom-bar-bg-base: var(--background-color-10);--sign-bottom-bar-padding: var(--spacing-constraints);--sign-bottom-bar-min-height: var(--min-height);--sign-bottom-bar-gap: 12px;--sign-button-font-size: 16px;--sign-button-padding: 14px 16px;--sign-button-min-height: var(--min-height);--sign-button-border-radius: 8px;--sign-button-font-weight: 500;--sign-button-primary-bg-base: var(--primary-color-0);--sign-button-primary-bg-hover: var(--primary-color-10);--sign-button-primary-bg-disabled: var(--grey-color);--sign-button-primary-text-base: var(--white-color);--sign-button-primary-text-hover: var(--white-color);--sign-button-primary-text-disabled: var(--white-color);--sign-button-link-bg-base: transparent;--sign-button-link-bg-hover: var(--background-color-10);--sign-button-link-bg-disabled: transparent;--sign-button-link-text-base: var(--primary-color-0);--sign-button-link-text-hover: var(--primary-color-10);--sign-button-link-text-disabled: var(--grey-color);--sign-button-link-border-base: 1px solid var(--primary-color-0);--sign-button-link-border-hover: 1px solid var(--primary-color-10);--sign-button-link-border-disabled: 1px solid var(--grey-color);--sign-device-state-text-color-connected: green;--sign-device-state-text-color-disconnected: red;--sign-loading-overlay-bg-color: rgba(255, 255, 255, .8);--sign-loading-overlay-text-color: var(--text-color-0);--sign-loading-overlay-spinner-color: var(--primary-color-0);--sign-loading-overlay-spinner-border-color: rgba(78, 86, 234, .1);--sign-loading-overlay-spinner-size: 30px}html{font-family:var(--sign-font-family)!important}.signpad-canvas-container{display:flex;flex-direction:column;width:100%;height:100%;min-width:380px}.signpad-top-bar{display:flex;justify-content:space-between;padding:var(--sign-top-bar-padding);min-height:var(--sign-top-bar-min-height);background-color:var(--sign-top-bar-bg-base);color:var(--sign-top-bar-text-base);align-items:center}.signpad-top-left-actions,.signpad-top-right-actions{display:flex;gap:var(--sign-bottom-bar-gap)}.signpad-top-left-actions{justify-content:flex-start}.signpad-top-right-actions{justify-content:flex-end}.signpad-canvas-wrapper{position:relative;width:100%;padding-top:16px;padding-bottom:56.25%;height:0;background-color:var(--sign-canvas-bg-base);box-sizing:border-box;overflow:hidden}.signpad-canvas{position:absolute;width:100%;height:calc(100% - (var(--sign-canvas-height-offset) + var(--sign-line-margin-bottom)));left:0;top:0}.signpad-canvas-line-container{position:absolute;bottom:0;left:0;right:0;display:flex;justify-content:space-between;align-items:center;height:var(--sign-line-height);border-top:2px solid var(--sign-line-border-base);box-sizing:border-box;padding-top:6px;margin:var(--sign-line-margin)}.signpad-canvas-line-additional-text,.signpad-canvas-line-state,.signpad-canvas-line-state.connected{font-family:var(--sign-font-family);font-size:var(--sign-canvas-line-text-font-size)}.signpad-canvas-line-additional-text{color:var(--sign-line-additional-text-color);margin:0}.signpad-canvas-line-state{color:var(--sign-device-state-text-color-disconnected);margin:0}.signpad-canvas-line-state.connected{color:var(--sign-device-state-text-color-connected)}.signpad-bottom-bar{display:flex;flex-direction:row;gap:var(--sign-bottom-bar-gap);padding:var(--sign-bottom-bar-padding);min-height:var(--sign-bottom-bar-min-height);background-color:var(--sign-bottom-bar-bg-base)}.btn{font-family:var(--sign-font-family);min-height:var(--sign-button-min-height);padding:var(--sign-button-padding);margin:0;font-weight:var(--sign-button-font-weight);width:100%;font-size:var(--sign-button-font-size);border-radius:var(--sign-button-border-radius);transition:background-color .3s ease,color .3s ease,transform .1s ease}.btn:hover:not(:disabled){cursor:pointer}.btn:focus:not(:disabled){outline:none}.btn-primary{background-color:var(--sign-button-primary-bg-base);color:var(--sign-button-primary-text-base);border:1px solid var(--sign-button-primary-bg-base)}.btn-primary:hover:not(:disabled){background-color:var(--sign-button-primary-bg-hover);color:var(--sign-button-primary-text-hover);border:1px solid var(--sign-button-primary-bg-hover)}.btn-primary:disabled{background-color:var(--sign-button-primary-bg-disabled);color:var(--sign-button-primary-text-disabled);border:1px solid var(--sign-button-primary-bg-disabled)}.btn-link{background-color:var(--sign-button-link-bg-base);color:var(--sign-button-link-text-base);border:var(--sign-button-link-border-base)}.btn-link:hover:not(:disabled){background-color:var(--sign-button-link-bg-hover);color:var(--sign-button-link-text-hover);border:var(--sign-button-link-border-hover)}.btn-link:disabled{background-color:var(--sign-button-link-bg-disabled);color:var(--sign-button-link-text-disabled);border:var(--sign-button-link-border-disabled)}.signpad-loading-overlay{position:absolute;top:0;left:0;width:100%;height:100%;background-color:var(--sign-loading-overlay-bg-color);display:flex;flex-direction:column;justify-content:center;align-items:center;z-index:10;text-align:center;gap:10px}.signpad-loading-overlay .spinner{border:4px solid var(--sign-loading-overlay-spinner-border-color);border-left-color:var(--sign-loading-overlay-spinner-color);border-radius:50%;width:var(--sign-loading-overlay-spinner-size);height:var(--sign-loading-overlay-spinner-size);animation:spin 1s linear infinite}.signpad-loading-overlay-text{font-family:var(--sign-font-family);color:var(--sign-loading-overlay-text-color);font-size:14px;margin:16px 0 0}@keyframes spin{to{transform:rotate(360deg)}}";let hI=class{constructor(){this._device=null,this._isWasmInitialized=!1,this._module=null,this._disconnectHandler=null,this._eventCallbacks=new Map,this._callbackToHandle=new Map,this._masterCallback=null,this._penAspectCorrector=null,this._unexpectedDisconnectCallbacks=new Set}get device(){return this._device}get isWasmInitialized(){return this._isWasmInitialized}get Module(){return this._module}};typeof hI<"u"&&(window.TabletDriver=hI);var MI=(()=>{var Q=typeof document<"u"?document.currentScript?.src:void 0;return(async function(A={}){var I,g=A,E,D,S=new Promise((C,B)=>{E=C,D=B}),a=typeof window=="object",h=typeof WorkerGlobalScope<"u",F=typeof process=="object"&&process.versions?.node&&process.type!="renderer";typeof __filename<"u"?Q=__filename:h&&(Q=self.location.href);var l="",p,f;if(F){var $={};l=__dirname+"/",f=C=>(C=dA(C)?new URL(C):C,$.readFileSync(C)),p=async C=>(C=dA(C)?new URL(C):C,$.readFileSync(C,void 0)),process.argv.slice(2)}else if(a||h){try{l=new URL(".",Q).href}catch{}h&&(f=C=>{var B=new XMLHttpRequest;return B.open("GET",C,!1),B.responseType="arraybuffer",B.send(null),new Uint8Array(B.response)}),p=async C=>{if(dA(C))return new Promise((i,o)=>{var w=new XMLHttpRequest;w.open("GET",C,!0),w.responseType="arraybuffer",w.onload=()=>{w.status==200||w.status==0&&w.response?i(w.response):o(w.status)},w.onerror=o,w.send(null)});var B=await fetch(C,{credentials:"same-origin"});if(B.ok)return B.arrayBuffer();throw Error(B.status+" : "+B.url)}}console.log.bind(console);var z=console.error.bind(console),AA,oA,lA=!1,IA,O,DA,gA,CA,H,YI,_A,eI,nI,dA=C=>C.startsWith("file://");function HI(){var C=oA.buffer;IA=new Int8Array(C),DA=new Int16Array(C),g.HEAPU8=O=new Uint8Array(C),gA=new Uint16Array(C),CA=new Int32Array(C),H=new Uint32Array(C),YI=new Float32Array(C),nI=new Float64Array(C),_A=new BigInt64Array(C),eI=new BigUint64Array(C)}var BA=0,hA=null;function rI(C){throw g.onAbort?.(C),C="Aborted("+C+")",z(C),lA=!0,C=new WebAssembly.RuntimeError(C+". Build with -sASSERTIONS for more info."),D(C),C}var $A;async function fg(C){if(!AA)try{var B=await p(C);return new Uint8Array(B)}catch{}if(C==$A&&AA)C=new Uint8Array(AA);else if(f)C=f(C);else throw"both async and sync fetching of the wasm failed";return C}async function pg(C,B){try{var i=await fg(C);return await WebAssembly.instantiate(i,B)}catch(o){z(`failed to asynchronously prepare wasm: ${o}`),rI(o)}}async function Og(C){var B=$A;if(!AA&&typeof WebAssembly.instantiateStreaming=="function"&&!dA(B)&&!F)try{var i=fetch(B,{credentials:"same-origin"});return await WebAssembly.instantiateStreaming(i,C)}catch(o){z(`wasm streaming compile failed: ${o}`),z("falling back to ArrayBuffer instantiation")}return pg(B,C)}var qI=C=>{for(;0<C.length;)C.shift()(g)},lI=[],dI=[],xg=()=>{var C=g.preRun.shift();dI.push(C)};class Tg{constructor(B){this.Z=B-24}}var fI=0,fA={},AI=C=>{for(;C.length;){var B=C.pop();C.pop()(B)}};function MA(C){return this.fromWireType(H[C>>2])}var wA={},QA={},pA={},OA=class extends Error{constructor(C){super(C),this.name="InternalError"}},GA=(C,B,i)=>{function o(y){if(y=i(y),y.length!==C.length)throw new OA("Mismatched type converter count");for(var N=0;N<C.length;++N)Z(C[N],y[N])}C.forEach(y=>pA[y]=B);var w=Array(B.length),s=[],K=0;B.forEach((y,N)=>{QA.hasOwnProperty(y)?w[N]=QA[y]:(s.push(y),wA.hasOwnProperty(y)||(wA[y]=[]),wA[y].push(()=>{w[N]=QA[y],++K,K===s.length&&o(w)}))}),s.length===0&&o(w)},pI,r=C=>{for(var B="";O[C];)B+=pI[O[C++]];return B},k=class extends Error{constructor(C){super(C),this.name="BindingError"}},jg=C=>{throw new k(C)};function Wg(C,B,i={}){var o=B.name;if(!C)throw new k(`type "${o}" must have a positive integer typeid pointer`);if(QA.hasOwnProperty(C)){if(i.Ga)return;throw new k(`Cannot register type '${o}' twice`)}QA[C]=B,delete pA[C],wA.hasOwnProperty(C)&&(B=wA[C],delete wA[C],B.forEach(w=>w()))}function Z(C,B,i={}){return Wg(C,B,i)}var OI=(C,B,i)=>{switch(B){case 1:return i?o=>IA[o]:o=>O[o];case 2:return i?o=>DA[o>>1]:o=>gA[o>>1];case 4:return i?o=>CA[o>>2]:o=>H[o>>2];case 8:return i?o=>_A[o>>3]:o=>eI[o>>3];default:throw new TypeError(`invalid integer width (${B}): ${C}`)}},II=C=>{throw new k(C.Y.aa.$.name+" instance already deleted")},gI=!1,xI=()=>{},RA=C=>typeof FinalizationRegistry>"u"?(RA=B=>B,C):(gI=new FinalizationRegistry(B=>{B=B.Y,--B.count.value,B.count.value===0&&(B.da?B.ha.ia(B.da):B.aa.$.ia(B.Z))}),RA=B=>{var i=B.Y;return i.da&&gI.register(B,{Y:i},B),B},xI=B=>{gI.unregister(B)},RA(C));function xA(){}var TA=(C,B)=>Object.defineProperty(B,"name",{value:C}),TI={},jI=(C,B,i)=>{if(C[B].ba===void 0){var o=C[B];C[B]=function(...w){if(!C[B].ba.hasOwnProperty(w.length))throw new k(`Function '${i}' called with an invalid number of arguments (${w.length}) - expects one of (${C[B].ba})!`);return C[B].ba[w.length].apply(this,w)},C[B].ba=[],C[B].ba[o.la]=o}},CI=(C,B,i)=>{if(g.hasOwnProperty(C)){if(i===void 0||g[C].ba!==void 0&&g[C].ba[i]!==void 0)throw new k(`Cannot register public name '${C}' twice`);if(jI(g,C,C),g[C].ba.hasOwnProperty(i))throw new k(`Cannot register multiple overloads of a function with the same number of arguments (${i})!`);g[C].ba[i]=B}else g[C]=B,g[C].la=i},bg=C=>{C=C.replace(/[^a-zA-Z0-9_]/g,"$");var B=C.charCodeAt(0);return 48<=B&&57>=B?`_${C}`:C};function mg(C,B,i,o,w,s,K,y){this.name=C,this.constructor=B,this.ka=i,this.ia=o,this.ea=w,this.Ba=s,this.oa=K,this.za=y,this.Ja=[]}var BI=(C,B,i)=>{for(;B!==i;){if(!B.oa)throw new k(`Expected null or instance of ${i.name}, got an instance of ${B.name}`);C=B.oa(C),B=B.ea}return C},QI=C=>{if(C===null)return"null";var B=typeof C;return B==="object"||B==="array"||B==="function"?C.toString():""+C};function Zg(C,B){if(B===null){if(this.ra)throw new k(`null is not a valid ${this.name}`);return 0}if(!B.Y)throw new k(`Cannot pass "${QI(B)}" as a ${this.name}`);if(!B.Y.Z)throw new k(`Cannot pass deleted object as a pointer of type ${this.name}`);return BI(B.Y.Z,B.Y.aa.$,this.$)}function ug(C,B){if(B===null){if(this.ra)throw new k(`null is not a valid ${this.name}`);if(this.qa){var i=this.sa();return C!==null&&C.push(this.ia,i),i}return 0}if(!B||!B.Y)throw new k(`Cannot pass "${QI(B)}" as a ${this.name}`);if(!B.Y.Z)throw new k(`Cannot pass deleted object as a pointer of type ${this.name}`);if(!this.pa&&B.Y.aa.pa)throw new k(`Cannot convert argument of type ${B.Y.ha?B.Y.ha.name:B.Y.aa.name} to parameter type ${this.name}`);if(i=BI(B.Y.Z,B.Y.aa.$,this.$),this.qa){if(B.Y.da===void 0)throw new k("Passing raw pointer to smart pointer is illegal");switch(this.Oa){case 0:if(B.Y.ha===this)i=B.Y.da;else throw new k(`Cannot convert argument of type ${B.Y.ha?B.Y.ha.name:B.Y.aa.name} to parameter type ${this.name}`);break;case 1:i=B.Y.da;break;case 2:if(B.Y.ha===this)i=B.Y.da;else{var o=B.clone();i=this.Ka(i,u(()=>o.delete())),C!==null&&C.push(this.ia,i)}break;default:throw new k("Unsupporting sharing policy")}}return i}function Xg(C,B){if(B===null){if(this.ra)throw new k(`null is not a valid ${this.name}`);return 0}if(!B.Y)throw new k(`Cannot pass "${QI(B)}" as a ${this.name}`);if(!B.Y.Z)throw new k(`Cannot pass deleted object as a pointer of type ${this.name}`);if(B.Y.aa.pa)throw new k(`Cannot convert argument of type ${B.Y.aa.name} to parameter type ${this.name}`);return BI(B.Y.Z,B.Y.aa.$,this.$)}var WI=(C,B,i)=>B===i?C:i.ea===void 0?null:(C=WI(C,B,i.ea),C===null?null:i.za(C)),Pg={},Vg=(C,B)=>{if(B===void 0)throw new k("ptr should not be undefined");for(;C.ea;)B=C.oa(B),C=C.ea;return Pg[B]},jA=(C,B)=>{if(!B.aa||!B.Z)throw new OA("makeClassHandle requires ptr and ptrType");if(!!B.ha!=!!B.da)throw new OA("Both smartPtrType and smartPtr must be specified");return B.count={value:1},RA(Object.create(C,{Y:{value:B,writable:!0}}))};function WA(C,B,i,o,w,s,K,y,N,M,G){this.name=C,this.$=B,this.ra=i,this.pa=o,this.qa=w,this.Ia=s,this.Oa=K,this.xa=y,this.sa=N,this.Ka=M,this.ia=G,w||B.ea!==void 0?this.toWireType=ug:(this.toWireType=o?Zg:Xg,this.fa=null)}var bI=(C,B,i)=>{if(!g.hasOwnProperty(C))throw new OA("Replacing nonexistent public symbol");g[C].ba!==void 0&&i!==void 0?g[C].ba[i]=B:(g[C]=B,g[C].la=i)},mI=[],ZI,P=(C,B)=>{C=r(C);var i;if((i=mI[B])||(mI[B]=i=ZI.get(B)),typeof i!="function")throw new k(`unknown function pointer with signature ${C}: ${B}`);return i};class zg extends Error{}var uI=C=>{C=wC(C);var B=r(C);return iA(C),B},EI=(C,B)=>{function i(s){w[s]||QA[s]||(pA[s]?pA[s].forEach(i):(o.push(s),w[s]=!0))}var o=[],w={};throw B.forEach(i),new zg(`${C}: `+o.map(uI).join([", "]))};function XI(C){for(var B=1;B<C.length;++B)if(C[B]!==null&&C[B].fa===void 0)return!0;return!1}function PI(C,B,i,o,w,s){var K=B.length;if(2>K)throw new k("argTypes array size mismatch! Must at least get return value and 'this' types!");var y=B[1]!==null&&i!==null,N=XI(B);for(i=B[0].name!=="void",o=[C,jg,o,w,AI,B[0],B[1]],w=0;w<K-2;++w)o.push(B[w+2]);if(!N)for(w=y?1:2;w<B.length;++w)B[w].fa!==null&&o.push(B[w].fa);N=XI(B),w=B.length-2;var M=[],G=["fn"];for(y&&G.push("thisWired"),K=0;K<w;++K)M.push(`arg${K}`),G.push(`arg${K}Wired`);M=M.join(","),G=G.join(","),M=`return function (${M}) {
|
|
1
|
+
(function(q,U){typeof exports=="object"&&typeof module<"u"?U(exports,require("lit")):typeof define=="function"&&define.amd?define(["exports","lit"],U):(q=typeof globalThis<"u"?globalThis:q||self,U(q.SignosoftSignpad={},q.lit))})(this,(function(q,U){"use strict";const Dg=Q=>(A,I)=>{I!==void 0?I.addInitializer(()=>{customElements.define(Q,A)}):customElements.define(Q,A)};const FA=globalThis,XA=FA.ShadowRoot&&(FA.ShadyCSS===void 0||FA.ShadyCSS.nativeShadow)&&"adoptedStyleSheets"in Document.prototype&&"replace"in CSSStyleSheet.prototype,wI=Symbol(),SI=new WeakMap;let wg=class{constructor(A,I,g){if(this._$cssResult$=!0,g!==wI)throw Error("CSSResult is not constructable. Use `unsafeCSS` or `css` instead.");this.cssText=A,this.t=I}get styleSheet(){let A=this.o;const I=this.t;if(XA&&A===void 0){const g=I!==void 0&&I.length===1;g&&(A=SI.get(I)),A===void 0&&((this.o=A=new CSSStyleSheet).replaceSync(this.cssText),g&&SI.set(I,A))}return A}toString(){return this.cssText}};const Sg=Q=>new wg(typeof Q=="string"?Q:Q+"",void 0,wI),sg=(Q,A)=>{if(XA)Q.adoptedStyleSheets=A.map(I=>I instanceof CSSStyleSheet?I:I.styleSheet);else for(const I of A){const g=document.createElement("style"),E=FA.litNonce;E!==void 0&&g.setAttribute("nonce",E),g.textContent=I.cssText,Q.appendChild(g)}},sI=XA?Q=>Q:Q=>Q instanceof CSSStyleSheet?(A=>{let I="";for(const g of A.cssRules)I+=g.cssText;return Sg(I)})(Q):Q;const{is:ag,defineProperty:Kg,getOwnPropertyDescriptor:yg,getOwnPropertyNames:hg,getOwnPropertySymbols:Mg,getPrototypeOf:Gg}=Object,JA=globalThis,aI=JA.trustedTypes,Rg=aI?aI.emptyScript:"",Ng=JA.reactiveElementPolyfillSupport,sA=(Q,A)=>Q,UA={toAttribute(Q,A){switch(A){case Boolean:Q=Q?Rg:null;break;case Object:case Array:Q=Q==null?Q:JSON.stringify(Q)}return Q},fromAttribute(Q,A){let I=Q;switch(A){case Boolean:I=Q!==null;break;case Number:I=Q===null?null:Number(Q);break;case Object:case Array:try{I=JSON.parse(Q)}catch{I=null}}return I}},PA=(Q,A)=>!ag(Q,A),KI={attribute:!0,type:String,converter:UA,reflect:!1,useDefault:!1,hasChanged:PA};Symbol.metadata??=Symbol("metadata"),JA.litPropertyMetadata??=new WeakMap;class aA extends HTMLElement{static addInitializer(A){this._$Ei(),(this.l??=[]).push(A)}static get observedAttributes(){return this.finalize(),this._$Eh&&[...this._$Eh.keys()]}static createProperty(A,I=KI){if(I.state&&(I.attribute=!1),this._$Ei(),this.prototype.hasOwnProperty(A)&&((I=Object.create(I)).wrapped=!0),this.elementProperties.set(A,I),!I.noAccessor){const g=Symbol(),E=this.getPropertyDescriptor(A,g,I);E!==void 0&&Kg(this.prototype,A,E)}}static getPropertyDescriptor(A,I,g){const{get:E,set:D}=yg(this.prototype,A)??{get(){return this[I]},set(S){this[I]=S}};return{get:E,set(S){const a=E?.call(this);D?.call(this,S),this.requestUpdate(A,a,g)},configurable:!0,enumerable:!0}}static getPropertyOptions(A){return this.elementProperties.get(A)??KI}static _$Ei(){if(this.hasOwnProperty(sA("elementProperties")))return;const A=Gg(this);A.finalize(),A.l!==void 0&&(this.l=[...A.l]),this.elementProperties=new Map(A.elementProperties)}static finalize(){if(this.hasOwnProperty(sA("finalized")))return;if(this.finalized=!0,this._$Ei(),this.hasOwnProperty(sA("properties"))){const I=this.properties,g=[...hg(I),...Mg(I)];for(const E of g)this.createProperty(E,I[E])}const A=this[Symbol.metadata];if(A!==null){const I=litPropertyMetadata.get(A);if(I!==void 0)for(const[g,E]of I)this.elementProperties.set(g,E)}this._$Eh=new Map;for(const[I,g]of this.elementProperties){const E=this._$Eu(I,g);E!==void 0&&this._$Eh.set(E,I)}this.elementStyles=this.finalizeStyles(this.styles)}static finalizeStyles(A){const I=[];if(Array.isArray(A)){const g=new Set(A.flat(1/0).reverse());for(const E of g)I.unshift(sI(E))}else A!==void 0&&I.push(sI(A));return I}static _$Eu(A,I){const g=I.attribute;return g===!1?void 0:typeof g=="string"?g:typeof A=="string"?A.toLowerCase():void 0}constructor(){super(),this._$Ep=void 0,this.isUpdatePending=!1,this.hasUpdated=!1,this._$Em=null,this._$Ev()}_$Ev(){this._$ES=new Promise(A=>this.enableUpdating=A),this._$AL=new Map,this._$E_(),this.requestUpdate(),this.constructor.l?.forEach(A=>A(this))}addController(A){(this._$EO??=new Set).add(A),this.renderRoot!==void 0&&this.isConnected&&A.hostConnected?.()}removeController(A){this._$EO?.delete(A)}_$E_(){const A=new Map,I=this.constructor.elementProperties;for(const g of I.keys())this.hasOwnProperty(g)&&(A.set(g,this[g]),delete this[g]);A.size>0&&(this._$Ep=A)}createRenderRoot(){const A=this.shadowRoot??this.attachShadow(this.constructor.shadowRootOptions);return sg(A,this.constructor.elementStyles),A}connectedCallback(){this.renderRoot??=this.createRenderRoot(),this.enableUpdating(!0),this._$EO?.forEach(A=>A.hostConnected?.())}enableUpdating(A){}disconnectedCallback(){this._$EO?.forEach(A=>A.hostDisconnected?.())}attributeChangedCallback(A,I,g){this._$AK(A,g)}_$ET(A,I){const g=this.constructor.elementProperties.get(A),E=this.constructor._$Eu(A,g);if(E!==void 0&&g.reflect===!0){const D=(g.converter?.toAttribute!==void 0?g.converter:UA).toAttribute(I,g.type);this._$Em=A,D==null?this.removeAttribute(E):this.setAttribute(E,D),this._$Em=null}}_$AK(A,I){const g=this.constructor,E=g._$Eh.get(A);if(E!==void 0&&this._$Em!==E){const D=g.getPropertyOptions(E),S=typeof D.converter=="function"?{fromAttribute:D.converter}:D.converter?.fromAttribute!==void 0?D.converter:UA;this._$Em=E;const a=S.fromAttribute(I,D.type);this[E]=a??this._$Ej?.get(E)??a,this._$Em=null}}requestUpdate(A,I,g,E=!1,D){if(A!==void 0){const S=this.constructor;if(E===!1&&(D=this[A]),g??=S.getPropertyOptions(A),!((g.hasChanged??PA)(D,I)||g.useDefault&&g.reflect&&D===this._$Ej?.get(A)&&!this.hasAttribute(S._$Eu(A,g))))return;this.C(A,I,g)}this.isUpdatePending===!1&&(this._$ES=this._$EP())}C(A,I,{useDefault:g,reflect:E,wrapped:D},S){g&&!(this._$Ej??=new Map).has(A)&&(this._$Ej.set(A,S??I??this[A]),D!==!0||S!==void 0)||(this._$AL.has(A)||(this.hasUpdated||g||(I=void 0),this._$AL.set(A,I)),E===!0&&this._$Em!==A&&(this._$Eq??=new Set).add(A))}async _$EP(){this.isUpdatePending=!0;try{await this._$ES}catch(I){Promise.reject(I)}const A=this.scheduleUpdate();return A!=null&&await A,!this.isUpdatePending}scheduleUpdate(){return this.performUpdate()}performUpdate(){if(!this.isUpdatePending)return;if(!this.hasUpdated){if(this.renderRoot??=this.createRenderRoot(),this._$Ep){for(const[E,D]of this._$Ep)this[E]=D;this._$Ep=void 0}const g=this.constructor.elementProperties;if(g.size>0)for(const[E,D]of g){const{wrapped:S}=D,a=this[E];S!==!0||this._$AL.has(E)||a===void 0||this.C(E,void 0,D,a)}}let A=!1;const I=this._$AL;try{A=this.shouldUpdate(I),A?(this.willUpdate(I),this._$EO?.forEach(g=>g.hostUpdate?.()),this.update(I)):this._$EM()}catch(g){throw A=!1,this._$EM(),g}A&&this._$AE(I)}willUpdate(A){}_$AE(A){this._$EO?.forEach(I=>I.hostUpdated?.()),this.hasUpdated||(this.hasUpdated=!0,this.firstUpdated(A)),this.updated(A)}_$EM(){this._$AL=new Map,this.isUpdatePending=!1}get updateComplete(){return this.getUpdateComplete()}getUpdateComplete(){return this._$ES}shouldUpdate(A){return!0}update(A){this._$Eq&&=this._$Eq.forEach(I=>this._$ET(I,this[I])),this._$EM()}updated(A){}firstUpdated(A){}}aA.elementStyles=[],aA.shadowRootOptions={mode:"open"},aA[sA("elementProperties")]=new Map,aA[sA("finalized")]=new Map,Ng?.({ReactiveElement:aA}),(JA.reactiveElementVersions??=[]).push("2.1.2");const kg={attribute:!0,type:String,converter:UA,reflect:!1,hasChanged:PA},tg=(Q=kg,A,I)=>{const{kind:g,metadata:E}=I;let D=globalThis.litPropertyMetadata.get(E);if(D===void 0&&globalThis.litPropertyMetadata.set(E,D=new Map),g==="setter"&&((Q=Object.create(Q)).wrapped=!0),D.set(I.name,Q),g==="accessor"){const{name:S}=I;return{set(a){const h=A.get.call(this);A.set.call(this,a),this.requestUpdate(S,h,Q,!0,a)},init(a){return a!==void 0&&this.C(S,void 0,Q,a),a}}}if(g==="setter"){const{name:S}=I;return function(a){const h=this[S];A.call(this,a),this.requestUpdate(S,h,Q,!0,a)}}throw Error("Unsupported decorator location: "+g)};function Fg(Q){return(A,I)=>typeof I=="object"?tg(Q,A,I):((g,E,D)=>{const S=E.hasOwnProperty(D);return E.constructor.createProperty(D,g),S?Object.getOwnPropertyDescriptor(E,D):void 0})(Q,A,I)}const Jg=(Q,A,I)=>(I.configurable=!0,I.enumerable=!0,Reflect.decorate&&typeof A!="object"&&Object.defineProperty(Q,A,I),I);function Ug(Q,A){return(I,g,E)=>{const D=S=>S.renderRoot?.querySelector(Q)??null;return Jg(I,g,{get(){return D(this)}})}}var R=(Q=>(Q.INITIAL="initial",Q.DISCONNECTED="disconnected",Q.FINISHED="finished",Q.CONNECTING="connecting",Q.WAITING_FOR_DEVICE_SELECTION="waiting_for_device_selection",Q.CONNECTED_PHYSICAL="connected_physical",Q.CONNECTED_MOUSE_FALLBACK="connected_mouse_fallback",Q.SIGNING_ACTIVE="signing_active",Q.PROCESSING_OK="processing_ok",Q.PROCESSING_CLEAR="processing_clear",Q.PROCESSING_CANCEL="processing_cancel",Q.DISCONNECTING="disconnecting",Q.ERROR="error",Q))(R||{}),Y=(Q=>(Q.SIGN_PEN="sign-pen",Q.SIGN_OK="sign-ok",Q.SIGN_CLEAR="sign-clear",Q.SIGN_CANCEL="sign-cancel",Q.SIGN_ERROR="sign-error",Q.SIGN_CONNECT="sign-connect",Q.SIGN_DISCONNECT="sign-disconnect",Q))(Y||{}),yI=(Q=>(Q.OK="OK",Q.CLEAR="CLEAR",Q.CANCEL="CANCEL",Q.CLEAR_SIGNATURE="CLEAR_SIGNATURE",Q.DISCONNECT="DISCONNECT",Q.CONNECT_SIGNPAD="CONNECT_SIGNPAD",Q))(yI||{}),L=(Q=>(Q.AUTO_CONNECTING="AUTO_CONNECTING",Q.CONNECTING_TO_DEVICE="CONNECTING_TO_DEVICE",Q.DISCONNECTING_DEVICE="DISCONNECTING_DEVICE",Q.COMPONENT_INITIALIZED="COMPONENT_INITIALIZED",Q.TEXT_START_SIGNING="TEXT_START_SIGNING",Q.TEXT_SIGN_WITH_PHYSICAL="TEXT_SIGN_WITH_PHYSICAL",Q.TEXT_SIGN_WITH_MOUSE="TEXT_SIGN_WITH_MOUSE",Q.TEXT_SIGN_GENERIC="TEXT_SIGN_GENERIC",Q.TEXT_SIGNING_WITH_DEVICE="TEXT_SIGNING_WITH_DEVICE",Q.NO_DEVICE_FOUND="NO_DEVICE_FOUND",Q.CONNECTION_ERROR="CONNECTION_ERROR",Q.ERROR_DISCONNECTION="ERROR_DISCONNECTION",Q.ERROR_INSTANTIATING_DRIVER="ERROR_INSTANTIATING_DRIVER",Q.SIGNPAD_DISCONNECTED="SIGNPAD_DISCONNECTED",Q.DEVICE_UNEXPECTEDLY_DISCONNECTED="DEVICE_UNEXPECTEDLY_DISCONNECTED",Q.SIGN_SUCCESSFUL="SIGN_SUCCESSFUL",Q.SIGN_CANCELLED="SIGN_CANCELLED",Q.SIGN_CLEARED="SIGN_CLEARED",Q.MISSING_LICENSE_KEY="MISSING_LICENSE_KEY",Q.READY_TO_CONNECT="READY_TO_CONNECT",Q.SIGNPAD_DETECTED="SIGNPAD_DETECTED",Q.NO_LICENSE_KEY="NO_LICENSE_KEY",Q))(L||{}),X=(Q=>(Q.NOT_CONNECTED="NOT_CONNECTED",Q.CONNECTED="CONNECTED",Q.CONNECTING="CONNECTING",Q.MOUSE="MOUSE",Q.CONNECTED_UNKNOWN="CONNECTED_UNKNOWN_DEVICE",Q))(X||{});class Lg{constructor(A){this.component=A}async handleClear(){await this.executeAction(R.PROCESSING_CLEAR,async()=>{await this.component.connectionManager.clearSignature(),await this.component.config.actionHandlers?.handleClear?.(),this.component.dispatch(Y.SIGN_CLEAR)})}async handleOk(){return await this.executeAction(R.PROCESSING_OK,async()=>{const A=await this.component.connectionManager.stopSigning();return await this.component.config.actionHandlers?.handleOk?.(A),this.component.dispatch(Y.SIGN_OK,A),A})}async handleCancel(){await this.executeAction(R.PROCESSING_CANCEL,async()=>{await this.component.config.actionHandlers?.handleCancel?.(),this.component.dispatch(Y.SIGN_CANCEL)})}async startSigning(A){const I=this.component.connectionManager,g=this.component.canvasRef;if(!I.hasSignatureLayer()||!g){this.handleStartSigningError();return}this.component.stateManager.transitionTo(R.CONNECTING,"Preparing session...");try{this.component.resetDrawingState(),await I.startSigning(g,A);const E=await this.getReadyState(),D=E===R.CONNECTED_MOUSE_FALLBACK?"READY_TO_SIGN_MOUSE":"READY_TO_SIGN_PHYSICAL";this.component.stateManager.transitionTo(E,D)}catch(E){this.handleError("Error starting signing session",E)}}async stopSigning(){return this.component.connectionManager.stopSigning()}async executeAction(A,I){this.component.stateManager.transitionTo(A,"Processing...");try{const g=await I();return this.component.resetDrawingState(),await this.finalizePostAction(),g}catch(g){throw this.handleError("Error during action processing",g),g}}async getReadyState(){const A=this.component.connectionManager.isDeviceConnected(),I=await this.component.connectionManager.getDeviceInfo();return this.component.connectionManager.isFallback(I,A,!0)?R.CONNECTED_MOUSE_FALLBACK:R.CONNECTED_PHYSICAL}async finalizePostAction(){const A=await this.getReadyState();this.component.config.autoconnectOptions?.autoRestartSigningAfterAction?await this.startSigning():this.component.stateManager.transitionTo(A,"Ready.")}handleStartSigningError(){this.component.currentState===R.CONNECTED_MOUSE_FALLBACK&&(this.component.resetDrawingState(),this.component.mouseManager?.addListeners(),this.component.stateManager.transitionTo(R.CONNECTED_MOUSE_FALLBACK))}handleError(A,I){console.error(`Signosoft Signpad: ${A}`,I),this.component.stateManager.transitionTo(R.ERROR,A,I)}}class cg{constructor(A,I={minWidth:1,maxWidth:3,color:"#000000"}){this.lastDrawPoint=null,this.canvas=A;const g=A.getContext("2d");if(!g)throw new Error("Could not get 2D rendering context for canvas.");this.ctx=g,this.currentDrawingOptions=I,this.configureCanvasForDPI(),this.applyDrawingStyles(this.currentDrawingOptions)}get drawingOptions(){return{...this.currentDrawingOptions}}updateDrawingOptions(A){this.currentDrawingOptions=A,this.applyDrawingStyles(this.currentDrawingOptions)}drawSegment(A){const I=this.ctx,g=this.canvas,E=this.currentDrawingOptions,D=A.relativeX??0,S=A.relativeY??0,a=D*g.width,h=S*g.height,F=this.drawingOptions.minWidth+(this.drawingOptions.maxWidth-this.drawingOptions.minWidth)*(A.pressure??0);I.strokeStyle=E.color??"#000000",I.lineWidth=F,A.inContact?this.lastDrawPoint?(I.beginPath(),I.moveTo(this.lastDrawPoint.x,this.lastDrawPoint.y),I.lineTo(a,h),I.stroke(),this.lastDrawPoint={x:a,y:h}):this.lastDrawPoint={x:a,y:h}:this.lastDrawPoint=null}clear(){this.ctx.clearRect(0,0,this.canvas.width,this.canvas.height),this.lastDrawPoint=null}configureCanvasForDPI(){const A=window.devicePixelRatio||1,I=this.canvas.getBoundingClientRect(),g=I.width||this.canvas.clientWidth||0,E=I.height||this.canvas.clientHeight||0;if(g<=0||E<=0)return;const D=Math.round(g*A),S=Math.round(E*A);this.canvas.width===D&&this.canvas.height===S||(this.canvas.width=D,this.canvas.height=S)}applyDrawingStyles(A){this.ctx.strokeStyle=A.color??"#000000",this.ctx.lineCap="round",this.ctx.lineJoin="round",this.ctx.globalCompositeOperation="source-over"}}class Yg{constructor(A){this.sigLayer=null,this.debugCallbackRegistrationCount=0,this.cachedDeviceInfo=null,this.lastPenDispatchTime=0,this.penDataToDispatch=null,this.throttleDelayMs=16,this.component=A}async connect(A=!1,I=!1){this.component.stateManager.transitionTo(R.CONNECTING,A?L.AUTO_CONNECTING:L.CONNECTING_TO_DEVICE);try{const g=await this.sigLayer?.connect(A),E=this.sigLayer?.isConnected()??!1,D=!!(g&&E),S=D?this.normalizeDeviceInfo(await this.sigLayer?.getDeviceInfo()):null;this.cachedDeviceInfo=S??null;const a=D&&(S?.deviceName??S?.name??null)==="Pointer Input (Fallback Mode)",h=this.component.canvasRef;let F,l;if(D&&!a){const f=S?.deviceName??S?.name??X.CONNECTED_UNKNOWN;this.component.setDeviceStatusText(f),F=R.CONNECTED_PHYSICAL,l=L.TEXT_SIGN_WITH_PHYSICAL,this.component.mouseManager?.areListenersAttached()&&this.component.mouseManager?.removeListeners()}else if(D&&a||!D&&I)this.component.setDeviceStatusText(X.MOUSE),F=R.CONNECTED_MOUSE_FALLBACK,l=L.TEXT_SIGN_WITH_MOUSE;else return this.component.stateManager.transitionTo(R.DISCONNECTED,L.NO_DEVICE_FOUND),!1;const p=this.component.configManager.getDrawingOptions();return this.sigLayer?.isInSigningMode?.()&&await this.sigLayer.stopSigning(),await this.sigLayer?.startSigning(h,!0,p),this.component.stateManager.transitionTo(F,l),this.component.dispatch(Y.SIGN_CONNECT,{deviceInfo:S}),!0}catch(g){return console.error("Signosoft Signpad: Error in connect method:",g),this.component.stateManager.transitionTo(R.ERROR,L.CONNECTION_ERROR,g),!1}}async disconnect(){this.component.stateManager.transitionTo(R.DISCONNECTING,L.DISCONNECTING_DEVICE);try{await this.sigLayer?.disconnect(),this.sigLayer=null,this.cachedDeviceInfo=null}catch(A){console.error("Signosoft Signpad: Error during disconnect",A),this.component.stateManager.transitionTo(R.ERROR,L.ERROR_DISCONNECTION,A)}}hasSignatureLayer(){return this.sigLayer!==null}async getDeviceInfo(){if(this.cachedDeviceInfo)return this.cachedDeviceInfo;const A=this.normalizeDeviceInfo(await this.sigLayer?.getDeviceInfo());return this.cachedDeviceInfo=A??null,A}isDeviceConnected(){return this.sigLayer?.isConnected()??!1}isSigningActive(){return this.sigLayer?.isInSigningMode?.()??!1}async startSigning(A,I){if(!this.sigLayer)return!1;const g=I??this.component.configManager.getDrawingOptions();return await this.sigLayer.startSigning(A,!0,g),!0}async stopSigning(){try{if(this.sigLayer)return await this.sigLayer.stopSigning()}catch(A){console.warn("Signosoft Signpad: SigLayer stop failed, continuing cleanup",A)}finally{this.component.mouseManager?.removeListeners(),this.component.resetDrawingState(),console.log("[ConnectionManager] Signing stopped and mouse listeners removed.")}}async clearSignature(){this.sigLayer?.isInSigningMode&&await this.sigLayer.clearSignature()}async ensureSignatureLayer(){if(!this.sigLayer)try{this.sigLayer=new SignatureLayer,this.setupCallbacks()}catch(A){throw console.error("Signosoft Signpad: Error instantiating driver",A),this.component.stateManager.transitionTo(R.ERROR,L.ERROR_INSTANTIATING_DRIVER,A),A}}setupCallbacks(){this.sigLayer&&(this.debugCallbackRegistrationCount+=1,console.log(`[Signpad Debug] SignatureLayer callbacks registered (${this.debugCallbackRegistrationCount})`),this.sigLayer.onOK(()=>this.component.buttonManager.handleOk()),this.sigLayer.onClear(()=>this.component.buttonManager.handleClear()),this.sigLayer.onCancel(()=>this.component.buttonManager.handleCancel()),this.sigLayer.onPen(A=>{A.inContact&&!this.component.hasStartedDrawing&&this.component.stateManager.setDrawingStarted(!0),this.runThrottledPenDispatch(A)}),this.sigLayer.onUnexpectedDisconnect(()=>{const A=this.component.currentState;A!==R.DISCONNECTING&&A!==R.INITIAL&&A!==R.DISCONNECTED&&A!==R.ERROR&&(this.component.stateManager.transitionTo(R.DISCONNECTED,L.DEVICE_UNEXPECTEDLY_DISCONNECTED),this.component.dispatch(Y.SIGN_DISCONNECT))}))}runThrottledPenDispatch(A){if(this.component.stateManager.isBusy||this.component.stateManager.isError)return;this.penDataToDispatch=A;const I=performance.now();I-this.lastPenDispatchTime>this.throttleDelayMs&&(this.component.dispatch(Y.SIGN_PEN,this.penDataToDispatch),this.lastPenDispatchTime=I,this.penDataToDispatch=null)}async initWithLease(A){await this.ensureSignatureLayer(),this.sigLayer&&await this.sigLayer.initialize(A)}isFallback(A,I,g){const D=(A?.deviceName??A?.name??null)==="Pointer Input (Fallback Mode)",S=this.component.currentState===R.CONNECTED_MOUSE_FALLBACK,a=this.component.deviceStatusText===X.MOUSE;return D||S||a||g&&!I}normalizeDeviceInfo(A){return A?!A.deviceName&&A.name?{...A,deviceName:A.name}:A:null}}class eg{constructor(A){this.component=A}get deviceStatusKey(){return this.component.currentState===R.CONNECTED_MOUSE_FALLBACK?X.MOUSE:this.isConnected?this.component.deviceStatusText||X.CONNECTED_UNKNOWN:X.NOT_CONNECTED}get statusMessageKey(){return this.component.statusMessage||""}get additionalTextKey(){const A=R,I=L;switch(this.component.currentState){case A.INITIAL:case A.DISCONNECTED:case A.ERROR:return I.TEXT_START_SIGNING;case A.CONNECTED_PHYSICAL:return I.TEXT_SIGN_WITH_PHYSICAL;case A.CONNECTED_MOUSE_FALLBACK:return I.TEXT_SIGN_WITH_MOUSE;case A.SIGNING_ACTIVE:return I.TEXT_SIGNING_WITH_DEVICE;default:return I.TEXT_SIGN_GENERIC}}get isConnected(){const A=this.component.currentState;return A===R.CONNECTED_PHYSICAL||A===R.CONNECTED_MOUSE_FALLBACK||A===R.SIGNING_ACTIVE||A===R.PROCESSING_OK||A===R.PROCESSING_CLEAR||A===R.PROCESSING_CANCEL}get isBusy(){const A=this.component.currentState;return A===R.CONNECTING||A===R.WAITING_FOR_DEVICE_SELECTION||A===R.PROCESSING_OK||A===R.PROCESSING_CLEAR||A===R.PROCESSING_CANCEL||A===R.DISCONNECTING}get isError(){return this.component.currentState===R.ERROR}get actionButtonsDisabled(){return!this.isConnected||!this.component.hasStartedDrawing||this.isBusy}get connectButtonDisabled(){return this.isBusy||this.isConnected}get disconnectButtonDisabled(){const A=this.component.currentState;return A===R.DISCONNECTED||A===R.INITIAL||this.isBusy}transitionTo(A,I="",g){const E=this.component.currentState;E===A&&this.component.statusMessage===I&&!g||(this.component.setCurrentState(A),this.component.setStatusMessage(I),this.handleSideEffects(A,E),g&&this.component.dispatch(Y.SIGN_ERROR,g))}setDrawingStarted(A){this.component.hasStartedDrawing!==A&&this.component.setHasStartedDrawing(A)}handleSideEffects(A,I){const g=E=>E===R.INITIAL||E===R.DISCONNECTED||E===R.ERROR;g(A)?(this.component.setDeviceStatusText(X.NOT_CONNECTED),g(I)||(this.component.resetDrawingState(),this.component.mouseManager?.removeListeners())):(A===R.CONNECTED_PHYSICAL||A===R.CONNECTED_MOUSE_FALLBACK)&&(A===R.CONNECTED_MOUSE_FALLBACK?I===R.PROCESSING_OK||I===R.PROCESSING_CLEAR||I===R.PROCESSING_CANCEL||this.component.mouseManager?.addListeners():I===R.CONNECTED_MOUSE_FALLBACK&&this.component.mouseManager?.removeListeners())}}class ng{constructor(A,I){this.isDrawing=!1,this.sequenceCounter=0,this.sessionStartTime=null,this.debugListenerRegistrationCount=0,this.listenersAttached=!1,this.canvas=A,this.onPenData=I,this.boundHandleMouseDown=this.handleMouseDown.bind(this),this.boundHandleMouseMove=this.handleMouseMove.bind(this),this.boundHandleMouseUp=this.handleMouseUp.bind(this),this.boundHandleMouseLeave=this.handleMouseLeave.bind(this)}get isCurrentlyDrawing(){return this.isDrawing}addListeners(){if(this.listenersAttached){console.log("[Signpad Debug] Mouse listeners already registered");return}this.listenersAttached=!0,this.debugListenerRegistrationCount+=1,console.log(`[Signpad Debug] Mouse listeners registered (${this.debugListenerRegistrationCount})`),this.canvas.addEventListener("mousedown",this.boundHandleMouseDown),this.canvas.addEventListener("mousemove",this.boundHandleMouseMove),this.canvas.addEventListener("mouseup",this.boundHandleMouseUp),this.canvas.addEventListener("mouseleave",this.boundHandleMouseLeave)}removeListeners(){if(!this.listenersAttached){console.log("[Signpad Debug] Mouse listeners already removed");return}this.listenersAttached=!1,console.log("[Signpad Debug] Mouse listeners removed"),this.canvas.removeEventListener("mousedown",this.boundHandleMouseDown),this.canvas.removeEventListener("mousemove",this.boundHandleMouseMove),this.canvas.removeEventListener("mouseup",this.boundHandleMouseUp),this.canvas.removeEventListener("mouseleave",this.boundHandleMouseLeave),this.isDrawing=!1,this.sequenceCounter=0}areListenersAttached(){return this.listenersAttached}resetSession(){this.isDrawing=!1,this.sequenceCounter=0,this.sessionStartTime=null}handleMouseDown(A){this.isDrawing=!0,this.sequenceCounter=0,this.sessionStartTime===null&&(this.sessionStartTime=Date.now()),this.processMouseEvent(A,!0)}handleMouseMove(A){this.isDrawing&&(this.sequenceCounter++,this.processMouseEvent(A,!0))}handleMouseUp(A){this.isDrawing&&(this.isDrawing=!1,this.processMouseEvent(A,!1),this.sequenceCounter=0)}handleMouseLeave(A){this.isDrawing&&(this.isDrawing=!1,this.processMouseEvent(A,!1),this.sequenceCounter=0)}processMouseEvent(A,I){const{x:g,y:E}=this.getNormalizedCoordinates(A),D={relativeX:g,relativeY:E,pressure:I?.5:0,inContact:I,timestamp:this.timestampToSeconds()};this.onPenData(D)}getNormalizedCoordinates(A){const I=this.canvas.getBoundingClientRect(),g=(A.clientX-I.left)/I.width,E=(A.clientY-I.top)/I.height;return{x:g,y:E}}timestampToSeconds(){this.sessionStartTime===null&&(this.sessionStartTime=Date.now());const I=(Date.now()-this.sessionStartTime)/1e3;return Number(I.toFixed(3))}}const LA={en:{OK:"OK",CLEAR:"Clear",CANCEL:"Cancel",CLEAR_SIGNATURE:"Clear signature",DISCONNECT:"Disconnect",CONNECT_SIGNPAD:"Connect Signpad",NOT_CONNECTED:"Not Connected",CONNECTED:"Connected",CONNECTING:"Connecting...",MOUSE:"Mouse",CONNECTED_UNKNOWN_DEVICE:"Connected (Unknown Device)",AUTO_CONNECTING:"Auto-connecting to device...",CONNECTING_TO_DEVICE:"Connecting to your device...",DISCONNECTING_DEVICE:"Disconnecting device...",COMPONENT_INITIALIZED:"Component initialized.",TEXT_START_SIGNING:"Connect your device.",TEXT_SIGN_WITH_PHYSICAL:"Please sign using the device pen.",TEXT_SIGN_WITH_MOUSE:"Please sign using your mouse.",TEXT_SIGN_GENERIC:"Sign in the area above using mouse or pen.",TEXT_SIGNING_WITH_DEVICE:"Signing with {device}",NO_DEVICE_FOUND:"No device found.",CONNECTION_ERROR:"Connection error.",ERROR_DISCONNECTION:"Error during disconnection.",ERROR_INSTANTIATING_DRIVER:"Error instantiating driver.",SIGNPAD_DISCONNECTED:"Signpad disconnected.",DEVICE_UNEXPECTEDLY_DISCONNECTED:"Device unexpectedly disconnected.",SIGN_SUCCESSFUL:"Signature saved successfully.",SIGN_CANCELLED:"Signing cancelled.",SIGN_CLEARED:"Signature cleared.",MISSING_LICENSE_KEY:"No license key provided. Please provide a license key to connect.",READY_TO_CONNECT:"Ready to connect.",SIGNPAD_DETECTED:"Signpad detected. Click 'Connect Signpad' to begin.",NO_LICENSE_KEY:"Device connected, but no license key provided."},cs:{OK:"OK",CLEAR:"Smazat",CANCEL:"Zrušit",CLEAR_SIGNATURE:"Smazat podpis",DISCONNECT:"Odpojit",CONNECT_SIGNPAD:"Připojit Signpad",NOT_CONNECTED:"Nepřipojeno",CONNECTED:"Připojeno",CONNECTING:"Připojování...",MOUSE:"Myš",CONNECTED_UNKNOWN_DEVICE:"Připojeno (neznámé zařízení)",AUTO_CONNECTING:"Automatické připojování k zařízení...",CONNECTING_TO_DEVICE:"Připojování k vašemu zařízení...",DISCONNECTING_DEVICE:"Odpojování zařízení...",COMPONENT_INITIALIZED:"Komponenta byla inicializována.",TEXT_START_SIGNING:"Připojte své zařízení.",TEXT_SIGN_WITH_PHYSICAL:"Podepište se perem zařízení.",TEXT_SIGN_WITH_MOUSE:"Podepište se pomocí myši.",TEXT_SIGN_GENERIC:"Podepište se v oblasti výše pomocí myši nebo pera.",TEXT_SIGNING_WITH_DEVICE:"Podepisování pomocí: {device}",NO_DEVICE_FOUND:"Zařízení nebylo nalezeno.",CONNECTION_ERROR:"Chyba připojení.",ERROR_DISCONNECTION:"Chyba při odpojování.",ERROR_INSTANTIATING_DRIVER:"Chyba při inicializaci ovladače.",SIGNPAD_DISCONNECTED:"Signpad byl odpojen.",DEVICE_UNEXPECTEDLY_DISCONNECTED:"Zařízení bylo neočekávaně odpojeno.",SIGN_SUCCESSFUL:"Podpis byl úspěšně uložen.",SIGN_CANCELLED:"Podepisování bylo zrušeno.",SIGN_CLEARED:"Podpis byl vymazán.",MISSING_LICENSE_KEY:"Nebyl poskytnut licenční klíč. Pro připojení prosím zadejte licenční klíč.",READY_TO_CONNECT:"Připraveno k připojení.",SIGNPAD_DETECTED:"Signpad byl nalezen. Klikněte na 'Připojit Signpad' pro spuštění.",NO_LICENSE_KEY:"Zařízení je připojeno, ale nebyl poskytnut licenční klíč."}};class Hg{constructor(A){this.translations=LA.en,this.currentLang="",this.currentPath=void 0,this.component=A}t(A,I={}){let g=this.translations[A]||A;for(const[E,D]of Object.entries(I))g=g.replace(new RegExp(`{${E}}`,"g"),D);return g}async loadLanguage(A,I,g){const E=I?.trim();if(A===this.currentLang&&E===this.currentPath)return;let D=this.getBaselineTranslations(A);const S=this.resolveInlineTranslations(A,g);if(S){this.translations={...D,...S},this.currentLang=A,this.currentPath=E,this.component.requestUpdate();return}if(!E){this.translations=D,this.currentLang=A,this.currentPath=E,this.component.requestUpdate();return}const a=this.constructUrl(A,E);try{const h=await fetch(a);if(h.ok){const F=await h.json();D={...D,...F},console.log(`signosoft-signpad: External translations loaded from ${a}`)}else I&&console.info(`signosoft-signpad: Custom path provided, but file not found at ${a}`)}catch(h){console.warn(`signosoft-signpad: Failed to load external translations from ${a}. Using built-in defaults.`,h)}this.translations=D,this.currentLang=A,this.currentPath=E,this.component.requestUpdate()}getBaselineTranslations(A){const I=LA.en;return A!=="en"&&LA.hasOwnProperty(A)?{...I,...LA[A]}:{...I}}resolveInlineTranslations(A,I){return I?typeof Object.values(I)[0]=="string"?I:I[A]:void 0}constructUrl(A,I){const g=I.trim();let E="";return g.endsWith(".json")?E=g:E=`${g.replace(/\/+$/,"")}/${A}.json`,E}}class rg{constructor(A){this.configEventHandlers={},this.customEventListenerCache=new WeakMap,this.component=A}apply(A){const I=this.component.config;if(!I){this.clearConfigEventHandlers();return}this.applyLocalization(A,I),this.applyDrawingOptions(A,I),this.syncConfigEventHandlers(I)}getUiVisibilityOptions(){const A=this.component.config.uiVisibilityOptions;return{topBarVisible:A?.topBarVisible??!0,topBarClearButtonVisible:A?.topBarClearButtonVisible??!1,topBarConnectButtonVisible:A?.topBarConnectButtonVisible??!0,bottomBarVisible:A?.bottomBarVisible??!0,okButtonVisible:A?.okButtonVisible??!0,clearButtonVisible:A?.clearButtonVisible??!0,cancelButtonVisible:A?.cancelButtonVisible??!0,canvasLineVisible:A?.canvasLineVisible??!0,deviceStatusTextVisible:A?.deviceStatusTextVisible??!0,additionalTextVisible:A?.additionalTextVisible??!0}}getDrawingOptions(){const A=this.component.config.canvasAndDrawingOptions;return{minWidth:A?.minWidth??1,maxWidth:A?.maxWidth??3,color:A?.color??"#000000"}}applyLocalization(A,I){const g=A?.languageOptions,E=I.languageOptions;(!A||g?.lang!==E?.lang||g?.langPath!==E?.langPath||g?.translations!==E?.translations)&&this.component.localizationManager.loadLanguage(E?.lang??"en",E?.langPath,E?.translations)}applyDrawingOptions(A,I){const g=A?.canvasAndDrawingOptions,E=I.canvasAndDrawingOptions;this.component.canvasManager&&(!A||g?.minWidth!==E?.minWidth||g?.maxWidth!==E?.maxWidth||g?.color!==E?.color)&&this.component.canvasManager.updateDrawingOptions(this.getDrawingOptions())}syncConfigEventHandlers(A){const I=S=>{if(!S)return;const a=this.customEventListenerCache.get(S);if(a)return a;const h=F=>{S(F)};return this.customEventListenerCache.set(S,h),h},g=A.eventCallbacks,E={[Y.SIGN_CONNECT]:I(g?.onConnect),[Y.SIGN_DISCONNECT]:I(g?.onDisconnect),[Y.SIGN_PEN]:I(g?.onPen),[Y.SIGN_OK]:I(g?.onOk),[Y.SIGN_CLEAR]:I(g?.onClear),[Y.SIGN_CANCEL]:I(g?.onCancel),[Y.SIGN_ERROR]:I(g?.onError)},D=new Set([...Object.keys(this.configEventHandlers),...Object.keys(E)]);for(const S of D){const a=this.configEventHandlers[S],h=E[S];a&&a!==h&&this.component.removeEventListener(S,a),h&&a!==h&&this.component.addEventListener(S,h),h?this.configEventHandlers[S]=h:delete this.configEventHandlers[S]}}clearConfigEventHandlers(){for(const[A,I]of Object.entries(this.configEventHandlers))I&&this.component.removeEventListener(A,I);this.configEventHandlers={}}}const qg=":host{--primary-color-0: #4e56ea;--primary-color-10: #7178ee;--background-color-0: #f1f2fd;--background-color-10: #e3e4fc;--text-color-0: #333e4a;--white-color: #ffffff;--grey-color: #b5b9be;--min-height: 48px;--spacing-constraints: 16px 24px;--sign-font-family: Arial, Helvetica, sans-serif;--sign-common-border-radius: 8px;--sign-top-bar-bg-base: var(--background-color-10);--sign-top-bar-text-base: var(--primary-color-0);--sign-top-bar-padding: var(--spacing-constraints);--sign-top-bar-min-height: var(--min-height);--sign-top-bar-border-top-left-radius: var(--sign-common-border-radius);--sign-top-bar-border-top-right-radius: var(--sign-common-border-radius);--sign-top-bar-border-bottom-left-radius: 0;--sign-top-bar-border-bottom-right-radius: 0;--sign-canvas-bg-base: var(--background-color-0);--sign-canvas-wrapper-border-top-left-radius: 0;--sign-canvas-wrapper-border-top-right-radius: 0;--sign-canvas-wrapper-border-bottom-left-radius: 0;--sign-canvas-wrapper-border-bottom-right-radius: 0;--sign-line-height: 22px;--sign-line-margin-bottom: 16px;--sign-line-border-base: var(--primary-color-10);--sign-line-additional-text-color: var(--text-color-0);--sign-line-margin: 0px 24px var(--sign-line-margin-bottom) 24px;--sign-canvas-line-text-font-size: 12px;--sign-canvas-height-offset: var(--sign-line-height);--sign-bottom-bar-bg-base: var(--background-color-10);--sign-bottom-bar-padding: var(--spacing-constraints);--sign-bottom-bar-min-height: var(--min-height);--sign-bottom-bar-gap: 12px;--sign-bottom-bar-border-top-left-radius: 0;--sign-bottom-bar-border-top-right-radius: 0;--sign-bottom-bar-border-bottom-left-radius: var(--sign-common-border-radius);--sign-bottom-bar-border-bottom-right-radius: var( --sign-common-border-radius );--sign-button-font-size: 16px;--sign-button-padding: 14px 16px;--sign-button-min-height: var(--min-height);--sign-button-border-radius: var(--sign-common-border-radius);--sign-button-font-weight: 500;--sign-button-primary-bg-base: var(--primary-color-0);--sign-button-primary-bg-hover: var(--primary-color-10);--sign-button-primary-bg-disabled: var(--grey-color);--sign-button-primary-text-base: var(--white-color);--sign-button-primary-text-hover: var(--white-color);--sign-button-primary-text-disabled: var(--white-color);--sign-button-primary-border-base: 1px solid var(--primary-color-0);--sign-button-primary-border-hover: 1px solid var(--primary-color-10);--sign-button-primary-border-disabled: 1px solid var(--grey-color);--sign-button-link-bg-base: transparent;--sign-button-link-bg-hover: var(--background-color-10);--sign-button-link-bg-disabled: transparent;--sign-button-link-text-base: var(--primary-color-0);--sign-button-link-text-hover: var(--primary-color-10);--sign-button-link-text-disabled: var(--grey-color);--sign-button-link-border-base: 1px solid var(--primary-color-0);--sign-button-link-border-hover: 1px solid var(--primary-color-10);--sign-button-link-border-disabled: 1px solid var(--grey-color);--sign-device-state-text-color-connected: green;--sign-device-state-text-color-disconnected: red;--sign-loading-overlay-bg-color: rgba(255, 255, 255, .8);--sign-loading-overlay-text-color: var(--text-color-0);--sign-loading-overlay-spinner-color: var(--primary-color-0);--sign-loading-overlay-spinner-border-color: rgba(78, 86, 234, .1);--sign-loading-overlay-spinner-size: 30px}html{font-family:var(--sign-font-family)!important}.signpad-canvas-container{display:flex;flex-direction:column;width:100%;height:100%;min-width:380px}.signpad-top-bar{display:flex;justify-content:space-between;padding:var(--sign-top-bar-padding);min-height:var(--sign-top-bar-min-height);background-color:var(--sign-top-bar-bg-base);color:var(--sign-top-bar-text-base);align-items:center;border-top-left-radius:var(--sign-top-bar-border-top-left-radius);border-top-right-radius:var(--sign-top-bar-border-top-right-radius);border-bottom-left-radius:var(--sign-top-bar-border-bottom-left-radius);border-bottom-right-radius:var(--sign-top-bar-border-bottom-right-radius)}.signpad-top-left-actions,.signpad-top-right-actions{display:flex;gap:var(--sign-bottom-bar-gap)}.signpad-top-left-actions{justify-content:flex-start}.signpad-top-right-actions{justify-content:flex-end}.signpad-canvas-wrapper{position:relative;width:100%;padding-top:16px;padding-bottom:56.25%;height:0;background-color:var(--sign-canvas-bg-base);box-sizing:border-box;overflow:hidden;border-top-left-radius:var(--sign-canvas-wrapper-border-top-left-radius);border-top-right-radius:var(--sign-canvas-wrapper-border-top-right-radius);border-bottom-left-radius:var( --sign-canvas-wrapper-border-bottom-left-radius );border-bottom-right-radius:var( --sign-canvas-wrapper-border-bottom-right-radius )}.signpad-canvas-container>.signpad-canvas-wrapper:first-child{--sign-canvas-wrapper-border-top-left-radius: var( --sign-common-border-radius );--sign-canvas-wrapper-border-top-right-radius: var( --sign-common-border-radius )}.signpad-canvas-container>.signpad-canvas-wrapper:last-child{--sign-canvas-wrapper-border-bottom-left-radius: var( --sign-common-border-radius );--sign-canvas-wrapper-border-bottom-right-radius: var( --sign-common-border-radius )}.signpad-canvas{position:absolute;width:100%;height:calc(100% - (var(--sign-canvas-height-offset) + var(--sign-line-margin-bottom)));left:0;top:0}.signpad-canvas-line-container{position:absolute;bottom:0;left:0;right:0;display:flex;justify-content:space-between;align-items:center;height:var(--sign-line-height);border-top:2px solid var(--sign-line-border-base);box-sizing:border-box;padding-top:6px;margin:var(--sign-line-margin)}.signpad-canvas-line-additional-text,.signpad-canvas-line-state,.signpad-canvas-line-state.connected{font-family:var(--sign-font-family);font-size:var(--sign-canvas-line-text-font-size)}.signpad-canvas-line-additional-text{color:var(--sign-line-additional-text-color);margin:0}.signpad-canvas-line-state{color:var(--sign-device-state-text-color-disconnected);margin:0}.signpad-canvas-line-state.connected{color:var(--sign-device-state-text-color-connected)}.signpad-bottom-bar{display:flex;flex-direction:row;gap:var(--sign-bottom-bar-gap);padding:var(--sign-bottom-bar-padding);min-height:var(--sign-bottom-bar-min-height);background-color:var(--sign-bottom-bar-bg-base);border-top-left-radius:var(--sign-bottom-bar-border-top-left-radius);border-top-right-radius:var(--sign-bottom-bar-border-top-right-radius);border-bottom-left-radius:var(--sign-bottom-bar-border-bottom-left-radius);border-bottom-right-radius:var(--sign-bottom-bar-border-bottom-right-radius)}.btn{font-family:var(--sign-font-family);min-height:var(--sign-button-min-height);padding:var(--sign-button-padding);margin:0;font-weight:var(--sign-button-font-weight);width:100%;font-size:var(--sign-button-font-size);border-radius:var(--sign-button-border-radius);transition:background-color .3s ease,color .3s ease,transform .1s ease}.btn:hover:not(:disabled){cursor:pointer}.btn:focus:not(:disabled){outline:none}.btn-primary{background-color:var(--sign-button-primary-bg-base);color:var(--sign-button-primary-text-base);border:var(--sign-button-primary-border-base)}.btn-primary:hover:not(:disabled){background-color:var(--sign-button-primary-bg-hover);color:var(--sign-button-primary-text-hover);border:var(--sign-button-primary-border-hover)}.btn-primary:disabled{background-color:var(--sign-button-primary-bg-disabled);color:var(--sign-button-primary-text-disabled);border:var(--sign-button-primary-border-disabled)}.btn-link{background-color:var(--sign-button-link-bg-base);color:var(--sign-button-link-text-base);border:var(--sign-button-link-border-base)}.btn-link:hover:not(:disabled){background-color:var(--sign-button-link-bg-hover);color:var(--sign-button-link-text-hover);border:var(--sign-button-link-border-hover)}.btn-link:disabled{background-color:var(--sign-button-link-bg-disabled);color:var(--sign-button-link-text-disabled);border:var(--sign-button-link-border-disabled)}.signpad-loading-overlay{position:absolute;top:0;left:0;width:100%;height:100%;background-color:var(--sign-loading-overlay-bg-color);display:flex;flex-direction:column;justify-content:center;align-items:center;z-index:10;text-align:center;gap:10px}.signpad-loading-overlay .spinner{border:4px solid var(--sign-loading-overlay-spinner-border-color);border-left-color:var(--sign-loading-overlay-spinner-color);border-radius:50%;width:var(--sign-loading-overlay-spinner-size);height:var(--sign-loading-overlay-spinner-size);animation:spin 1s linear infinite}.signpad-loading-overlay-text{font-family:var(--sign-font-family);color:var(--sign-loading-overlay-text-color);font-size:14px;margin:16px 0 0}@keyframes spin{to{transform:rotate(360deg)}}";let hI=class{constructor(){this._device=null,this._isWasmInitialized=!1,this._module=null,this._disconnectHandler=null,this._eventCallbacks=new Map,this._callbackToHandle=new Map,this._masterCallback=null,this._penAspectCorrector=null,this._unexpectedDisconnectCallbacks=new Set}get device(){return this._device}get isWasmInitialized(){return this._isWasmInitialized}get Module(){return this._module}};typeof hI<"u"&&(window.TabletDriver=hI);var MI=(()=>{var Q=typeof document<"u"?document.currentScript?.src:void 0;return(async function(A={}){var I,g=A,E,D,S=new Promise((C,B)=>{E=C,D=B}),a=typeof window=="object",h=typeof WorkerGlobalScope<"u",F=typeof process=="object"&&process.versions?.node&&process.type!="renderer";typeof __filename<"u"?Q=__filename:h&&(Q=self.location.href);var l="",p,f;if(F){var $={};l=__dirname+"/",f=C=>(C=dA(C)?new URL(C):C,$.readFileSync(C)),p=async C=>(C=dA(C)?new URL(C):C,$.readFileSync(C,void 0)),process.argv.slice(2)}else if(a||h){try{l=new URL(".",Q).href}catch{}h&&(f=C=>{var B=new XMLHttpRequest;return B.open("GET",C,!1),B.responseType="arraybuffer",B.send(null),new Uint8Array(B.response)}),p=async C=>{if(dA(C))return new Promise((i,o)=>{var w=new XMLHttpRequest;w.open("GET",C,!0),w.responseType="arraybuffer",w.onload=()=>{w.status==200||w.status==0&&w.response?i(w.response):o(w.status)},w.onerror=o,w.send(null)});var B=await fetch(C,{credentials:"same-origin"});if(B.ok)return B.arrayBuffer();throw Error(B.status+" : "+B.url)}}console.log.bind(console);var z=console.error.bind(console),AA,oA,lA=!1,IA,O,DA,gA,CA,H,YI,_A,eI,nI,dA=C=>C.startsWith("file://");function HI(){var C=oA.buffer;IA=new Int8Array(C),DA=new Int16Array(C),g.HEAPU8=O=new Uint8Array(C),gA=new Uint16Array(C),CA=new Int32Array(C),H=new Uint32Array(C),YI=new Float32Array(C),nI=new Float64Array(C),_A=new BigInt64Array(C),eI=new BigUint64Array(C)}var BA=0,hA=null;function rI(C){throw g.onAbort?.(C),C="Aborted("+C+")",z(C),lA=!0,C=new WebAssembly.RuntimeError(C+". Build with -sASSERTIONS for more info."),D(C),C}var $A;async function fg(C){if(!AA)try{var B=await p(C);return new Uint8Array(B)}catch{}if(C==$A&&AA)C=new Uint8Array(AA);else if(f)C=f(C);else throw"both async and sync fetching of the wasm failed";return C}async function pg(C,B){try{var i=await fg(C);return await WebAssembly.instantiate(i,B)}catch(o){z(`failed to asynchronously prepare wasm: ${o}`),rI(o)}}async function Og(C){var B=$A;if(!AA&&typeof WebAssembly.instantiateStreaming=="function"&&!dA(B)&&!F)try{var i=fetch(B,{credentials:"same-origin"});return await WebAssembly.instantiateStreaming(i,C)}catch(o){z(`wasm streaming compile failed: ${o}`),z("falling back to ArrayBuffer instantiation")}return pg(B,C)}var qI=C=>{for(;0<C.length;)C.shift()(g)},lI=[],dI=[],xg=()=>{var C=g.preRun.shift();dI.push(C)};class Tg{constructor(B){this.Z=B-24}}var fI=0,fA={},AI=C=>{for(;C.length;){var B=C.pop();C.pop()(B)}};function MA(C){return this.fromWireType(H[C>>2])}var wA={},QA={},pA={},OA=class extends Error{constructor(C){super(C),this.name="InternalError"}},GA=(C,B,i)=>{function o(y){if(y=i(y),y.length!==C.length)throw new OA("Mismatched type converter count");for(var N=0;N<C.length;++N)Z(C[N],y[N])}C.forEach(y=>pA[y]=B);var w=Array(B.length),s=[],K=0;B.forEach((y,N)=>{QA.hasOwnProperty(y)?w[N]=QA[y]:(s.push(y),wA.hasOwnProperty(y)||(wA[y]=[]),wA[y].push(()=>{w[N]=QA[y],++K,K===s.length&&o(w)}))}),s.length===0&&o(w)},pI,r=C=>{for(var B="";O[C];)B+=pI[O[C++]];return B},k=class extends Error{constructor(C){super(C),this.name="BindingError"}},jg=C=>{throw new k(C)};function Wg(C,B,i={}){var o=B.name;if(!C)throw new k(`type "${o}" must have a positive integer typeid pointer`);if(QA.hasOwnProperty(C)){if(i.Ga)return;throw new k(`Cannot register type '${o}' twice`)}QA[C]=B,delete pA[C],wA.hasOwnProperty(C)&&(B=wA[C],delete wA[C],B.forEach(w=>w()))}function Z(C,B,i={}){return Wg(C,B,i)}var OI=(C,B,i)=>{switch(B){case 1:return i?o=>IA[o]:o=>O[o];case 2:return i?o=>DA[o>>1]:o=>gA[o>>1];case 4:return i?o=>CA[o>>2]:o=>H[o>>2];case 8:return i?o=>_A[o>>3]:o=>eI[o>>3];default:throw new TypeError(`invalid integer width (${B}): ${C}`)}},II=C=>{throw new k(C.Y.aa.$.name+" instance already deleted")},gI=!1,xI=()=>{},RA=C=>typeof FinalizationRegistry>"u"?(RA=B=>B,C):(gI=new FinalizationRegistry(B=>{B=B.Y,--B.count.value,B.count.value===0&&(B.da?B.ha.ia(B.da):B.aa.$.ia(B.Z))}),RA=B=>{var i=B.Y;return i.da&&gI.register(B,{Y:i},B),B},xI=B=>{gI.unregister(B)},RA(C));function xA(){}var TA=(C,B)=>Object.defineProperty(B,"name",{value:C}),TI={},jI=(C,B,i)=>{if(C[B].ba===void 0){var o=C[B];C[B]=function(...w){if(!C[B].ba.hasOwnProperty(w.length))throw new k(`Function '${i}' called with an invalid number of arguments (${w.length}) - expects one of (${C[B].ba})!`);return C[B].ba[w.length].apply(this,w)},C[B].ba=[],C[B].ba[o.la]=o}},CI=(C,B,i)=>{if(g.hasOwnProperty(C)){if(i===void 0||g[C].ba!==void 0&&g[C].ba[i]!==void 0)throw new k(`Cannot register public name '${C}' twice`);if(jI(g,C,C),g[C].ba.hasOwnProperty(i))throw new k(`Cannot register multiple overloads of a function with the same number of arguments (${i})!`);g[C].ba[i]=B}else g[C]=B,g[C].la=i},bg=C=>{C=C.replace(/[^a-zA-Z0-9_]/g,"$");var B=C.charCodeAt(0);return 48<=B&&57>=B?`_${C}`:C};function mg(C,B,i,o,w,s,K,y){this.name=C,this.constructor=B,this.ka=i,this.ia=o,this.ea=w,this.Ba=s,this.oa=K,this.za=y,this.Ja=[]}var BI=(C,B,i)=>{for(;B!==i;){if(!B.oa)throw new k(`Expected null or instance of ${i.name}, got an instance of ${B.name}`);C=B.oa(C),B=B.ea}return C},QI=C=>{if(C===null)return"null";var B=typeof C;return B==="object"||B==="array"||B==="function"?C.toString():""+C};function Zg(C,B){if(B===null){if(this.ra)throw new k(`null is not a valid ${this.name}`);return 0}if(!B.Y)throw new k(`Cannot pass "${QI(B)}" as a ${this.name}`);if(!B.Y.Z)throw new k(`Cannot pass deleted object as a pointer of type ${this.name}`);return BI(B.Y.Z,B.Y.aa.$,this.$)}function ug(C,B){if(B===null){if(this.ra)throw new k(`null is not a valid ${this.name}`);if(this.qa){var i=this.sa();return C!==null&&C.push(this.ia,i),i}return 0}if(!B||!B.Y)throw new k(`Cannot pass "${QI(B)}" as a ${this.name}`);if(!B.Y.Z)throw new k(`Cannot pass deleted object as a pointer of type ${this.name}`);if(!this.pa&&B.Y.aa.pa)throw new k(`Cannot convert argument of type ${B.Y.ha?B.Y.ha.name:B.Y.aa.name} to parameter type ${this.name}`);if(i=BI(B.Y.Z,B.Y.aa.$,this.$),this.qa){if(B.Y.da===void 0)throw new k("Passing raw pointer to smart pointer is illegal");switch(this.Oa){case 0:if(B.Y.ha===this)i=B.Y.da;else throw new k(`Cannot convert argument of type ${B.Y.ha?B.Y.ha.name:B.Y.aa.name} to parameter type ${this.name}`);break;case 1:i=B.Y.da;break;case 2:if(B.Y.ha===this)i=B.Y.da;else{var o=B.clone();i=this.Ka(i,u(()=>o.delete())),C!==null&&C.push(this.ia,i)}break;default:throw new k("Unsupporting sharing policy")}}return i}function Xg(C,B){if(B===null){if(this.ra)throw new k(`null is not a valid ${this.name}`);return 0}if(!B.Y)throw new k(`Cannot pass "${QI(B)}" as a ${this.name}`);if(!B.Y.Z)throw new k(`Cannot pass deleted object as a pointer of type ${this.name}`);if(B.Y.aa.pa)throw new k(`Cannot convert argument of type ${B.Y.aa.name} to parameter type ${this.name}`);return BI(B.Y.Z,B.Y.aa.$,this.$)}var WI=(C,B,i)=>B===i?C:i.ea===void 0?null:(C=WI(C,B,i.ea),C===null?null:i.za(C)),Pg={},Vg=(C,B)=>{if(B===void 0)throw new k("ptr should not be undefined");for(;C.ea;)B=C.oa(B),C=C.ea;return Pg[B]},jA=(C,B)=>{if(!B.aa||!B.Z)throw new OA("makeClassHandle requires ptr and ptrType");if(!!B.ha!=!!B.da)throw new OA("Both smartPtrType and smartPtr must be specified");return B.count={value:1},RA(Object.create(C,{Y:{value:B,writable:!0}}))};function WA(C,B,i,o,w,s,K,y,N,M,G){this.name=C,this.$=B,this.ra=i,this.pa=o,this.qa=w,this.Ia=s,this.Oa=K,this.xa=y,this.sa=N,this.Ka=M,this.ia=G,w||B.ea!==void 0?this.toWireType=ug:(this.toWireType=o?Zg:Xg,this.fa=null)}var bI=(C,B,i)=>{if(!g.hasOwnProperty(C))throw new OA("Replacing nonexistent public symbol");g[C].ba!==void 0&&i!==void 0?g[C].ba[i]=B:(g[C]=B,g[C].la=i)},mI=[],ZI,P=(C,B)=>{C=r(C);var i;if((i=mI[B])||(mI[B]=i=ZI.get(B)),typeof i!="function")throw new k(`unknown function pointer with signature ${C}: ${B}`);return i};class zg extends Error{}var uI=C=>{C=wC(C);var B=r(C);return iA(C),B},EI=(C,B)=>{function i(s){w[s]||QA[s]||(pA[s]?pA[s].forEach(i):(o.push(s),w[s]=!0))}var o=[],w={};throw B.forEach(i),new zg(`${C}: `+o.map(uI).join([", "]))};function XI(C){for(var B=1;B<C.length;++B)if(C[B]!==null&&C[B].fa===void 0)return!0;return!1}function PI(C,B,i,o,w,s){var K=B.length;if(2>K)throw new k("argTypes array size mismatch! Must at least get return value and 'this' types!");var y=B[1]!==null&&i!==null,N=XI(B);for(i=B[0].name!=="void",o=[C,jg,o,w,AI,B[0],B[1]],w=0;w<K-2;++w)o.push(B[w+2]);if(!N)for(w=y?1:2;w<B.length;++w)B[w].fa!==null&&o.push(B[w].fa);N=XI(B),w=B.length-2;var M=[],G=["fn"];for(y&&G.push("thisWired"),K=0;K<w;++K)M.push(`arg${K}`),G.push(`arg${K}Wired`);M=M.join(","),G=G.join(","),M=`return function (${M}) {
|
|
2
2
|
`,N&&(M+=`var destructors = [];
|
|
3
3
|
`);var t=N?"destructors":"null",e="humanName throwBindingError invoker fn runDestructors retType classParam".split(" ");for(y&&(M+=`var thisWired = classParam['toWireType'](${t}, this);
|
|
4
4
|
`),K=0;K<w;++K)M+=`var arg${K}Wired = argType${K}['toWireType'](${t}, arg${K});
|
package/package.json
CHANGED
|
@@ -19,6 +19,10 @@ html {
|
|
|
19
19
|
background-color: var(--sign-top-bar-bg-base);
|
|
20
20
|
color: var(--sign-top-bar-text-base);
|
|
21
21
|
align-items: center;
|
|
22
|
+
border-top-left-radius: var(--sign-top-bar-border-top-left-radius);
|
|
23
|
+
border-top-right-radius: var(--sign-top-bar-border-top-right-radius);
|
|
24
|
+
border-bottom-left-radius: var(--sign-top-bar-border-bottom-left-radius);
|
|
25
|
+
border-bottom-right-radius: var(--sign-top-bar-border-bottom-right-radius);
|
|
22
26
|
}
|
|
23
27
|
|
|
24
28
|
.signpad-top-left-actions,
|
|
@@ -44,6 +48,32 @@ html {
|
|
|
44
48
|
background-color: var(--sign-canvas-bg-base);
|
|
45
49
|
box-sizing: border-box;
|
|
46
50
|
overflow: hidden;
|
|
51
|
+
border-top-left-radius: var(--sign-canvas-wrapper-border-top-left-radius);
|
|
52
|
+
border-top-right-radius: var(--sign-canvas-wrapper-border-top-right-radius);
|
|
53
|
+
border-bottom-left-radius: var(
|
|
54
|
+
--sign-canvas-wrapper-border-bottom-left-radius
|
|
55
|
+
);
|
|
56
|
+
border-bottom-right-radius: var(
|
|
57
|
+
--sign-canvas-wrapper-border-bottom-right-radius
|
|
58
|
+
);
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
.signpad-canvas-container > .signpad-canvas-wrapper:first-child {
|
|
62
|
+
--sign-canvas-wrapper-border-top-left-radius: var(
|
|
63
|
+
--sign-common-border-radius
|
|
64
|
+
);
|
|
65
|
+
--sign-canvas-wrapper-border-top-right-radius: var(
|
|
66
|
+
--sign-common-border-radius
|
|
67
|
+
);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
.signpad-canvas-container > .signpad-canvas-wrapper:last-child {
|
|
71
|
+
--sign-canvas-wrapper-border-bottom-left-radius: var(
|
|
72
|
+
--sign-common-border-radius
|
|
73
|
+
);
|
|
74
|
+
--sign-canvas-wrapper-border-bottom-right-radius: var(
|
|
75
|
+
--sign-common-border-radius
|
|
76
|
+
);
|
|
47
77
|
}
|
|
48
78
|
.signpad-canvas {
|
|
49
79
|
position: absolute;
|
|
@@ -95,6 +125,10 @@ html {
|
|
|
95
125
|
padding: var(--sign-bottom-bar-padding);
|
|
96
126
|
min-height: var(--sign-bottom-bar-min-height);
|
|
97
127
|
background-color: var(--sign-bottom-bar-bg-base);
|
|
128
|
+
border-top-left-radius: var(--sign-bottom-bar-border-top-left-radius);
|
|
129
|
+
border-top-right-radius: var(--sign-bottom-bar-border-top-right-radius);
|
|
130
|
+
border-bottom-left-radius: var(--sign-bottom-bar-border-bottom-left-radius);
|
|
131
|
+
border-bottom-right-radius: var(--sign-bottom-bar-border-bottom-right-radius);
|
|
98
132
|
}
|
|
99
133
|
.btn {
|
|
100
134
|
font-family: var(--sign-font-family);
|
|
@@ -120,17 +154,17 @@ html {
|
|
|
120
154
|
.btn-primary {
|
|
121
155
|
background-color: var(--sign-button-primary-bg-base);
|
|
122
156
|
color: var(--sign-button-primary-text-base);
|
|
123
|
-
border:
|
|
157
|
+
border: var(--sign-button-primary-border-base);
|
|
124
158
|
}
|
|
125
159
|
.btn-primary:hover:not(:disabled) {
|
|
126
160
|
background-color: var(--sign-button-primary-bg-hover);
|
|
127
161
|
color: var(--sign-button-primary-text-hover);
|
|
128
|
-
border:
|
|
162
|
+
border: var(--sign-button-primary-border-hover);
|
|
129
163
|
}
|
|
130
164
|
.btn-primary:disabled {
|
|
131
165
|
background-color: var(--sign-button-primary-bg-disabled);
|
|
132
166
|
color: var(--sign-button-primary-text-disabled);
|
|
133
|
-
border:
|
|
167
|
+
border: var(--sign-button-primary-border-disabled);
|
|
134
168
|
}
|
|
135
169
|
.btn-link {
|
|
136
170
|
background-color: var(--sign-button-link-bg-base);
|
|
@@ -14,15 +14,24 @@
|
|
|
14
14
|
|
|
15
15
|
/* CSS Variables */
|
|
16
16
|
--sign-font-family: Arial, Helvetica, sans-serif;
|
|
17
|
+
--sign-common-border-radius: 8px;
|
|
17
18
|
|
|
18
19
|
/* Top Bar */
|
|
19
20
|
--sign-top-bar-bg-base: var(--background-color-10);
|
|
20
21
|
--sign-top-bar-text-base: var(--primary-color-0);
|
|
21
22
|
--sign-top-bar-padding: var(--spacing-constraints);
|
|
22
23
|
--sign-top-bar-min-height: var(--min-height);
|
|
24
|
+
--sign-top-bar-border-top-left-radius: var(--sign-common-border-radius);
|
|
25
|
+
--sign-top-bar-border-top-right-radius: var(--sign-common-border-radius);
|
|
26
|
+
--sign-top-bar-border-bottom-left-radius: 0;
|
|
27
|
+
--sign-top-bar-border-bottom-right-radius: 0;
|
|
23
28
|
|
|
24
29
|
/* Canvas Area */
|
|
25
30
|
--sign-canvas-bg-base: var(--background-color-0);
|
|
31
|
+
--sign-canvas-wrapper-border-top-left-radius: 0;
|
|
32
|
+
--sign-canvas-wrapper-border-top-right-radius: 0;
|
|
33
|
+
--sign-canvas-wrapper-border-bottom-left-radius: 0;
|
|
34
|
+
--sign-canvas-wrapper-border-bottom-right-radius: 0;
|
|
26
35
|
|
|
27
36
|
/* Line */
|
|
28
37
|
--sign-line-height: 22px;
|
|
@@ -38,12 +47,18 @@
|
|
|
38
47
|
--sign-bottom-bar-padding: var(--spacing-constraints);
|
|
39
48
|
--sign-bottom-bar-min-height: var(--min-height);
|
|
40
49
|
--sign-bottom-bar-gap: 12px;
|
|
50
|
+
--sign-bottom-bar-border-top-left-radius: 0;
|
|
51
|
+
--sign-bottom-bar-border-top-right-radius: 0;
|
|
52
|
+
--sign-bottom-bar-border-bottom-left-radius: var(--sign-common-border-radius);
|
|
53
|
+
--sign-bottom-bar-border-bottom-right-radius: var(
|
|
54
|
+
--sign-common-border-radius
|
|
55
|
+
);
|
|
41
56
|
|
|
42
57
|
/* Button general settings */
|
|
43
58
|
--sign-button-font-size: 16px;
|
|
44
59
|
--sign-button-padding: 14px 16px;
|
|
45
60
|
--sign-button-min-height: var(--min-height);
|
|
46
|
-
--sign-button-border-radius:
|
|
61
|
+
--sign-button-border-radius: var(--sign-common-border-radius);
|
|
47
62
|
--sign-button-font-weight: 500;
|
|
48
63
|
|
|
49
64
|
/* Primary Buttons (OK, Clear, Cancel) */
|
|
@@ -53,6 +68,9 @@
|
|
|
53
68
|
--sign-button-primary-text-base: var(--white-color);
|
|
54
69
|
--sign-button-primary-text-hover: var(--white-color);
|
|
55
70
|
--sign-button-primary-text-disabled: var(--white-color);
|
|
71
|
+
--sign-button-primary-border-base: 1px solid var(--primary-color-0);
|
|
72
|
+
--sign-button-primary-border-hover: 1px solid var(--primary-color-10);
|
|
73
|
+
--sign-button-primary-border-disabled: 1px solid var(--grey-color);
|
|
56
74
|
|
|
57
75
|
/* Link Buttons (Connect signpad) */
|
|
58
76
|
--sign-button-link-bg-base: transparent;
|