@simplysm/solid 13.0.39 → 13.0.41
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 +28 -7
- package/dist/components/feedback/print/PrintContext.d.ts +12 -0
- package/dist/components/feedback/print/PrintContext.d.ts.map +1 -0
- package/dist/components/feedback/print/PrintContext.js +12 -0
- package/dist/components/feedback/print/PrintContext.js.map +6 -0
- package/dist/components/feedback/print/PrintProvider.d.ts +12 -0
- package/dist/components/feedback/print/PrintProvider.d.ts.map +1 -0
- package/dist/components/feedback/print/PrintProvider.js +249 -0
- package/dist/components/feedback/print/PrintProvider.js.map +6 -0
- package/dist/components/form-control/Button.js +5 -1
- package/dist/components/form-control/Button.js.map +1 -1
- package/dist/hooks/usePrint.d.ts +2 -10
- package/dist/hooks/usePrint.d.ts.map +1 -1
- package/dist/hooks/usePrint.js +1 -206
- package/dist/hooks/usePrint.js.map +1 -1
- package/dist/index.d.ts +4 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -2
- package/dist/index.js.map +1 -1
- package/dist/providers/SystemProvider.d.ts +8 -0
- package/dist/providers/SystemProvider.d.ts.map +1 -0
- package/dist/providers/{InitializeProvider.js → SystemProvider.js} +4 -9
- package/dist/providers/SystemProvider.js.map +6 -0
- package/docs/disclosure.md +1 -1
- package/docs/feedback.md +10 -1
- package/docs/hooks.md +1 -1
- package/docs/providers.md +78 -9
- package/package.json +3 -3
- package/src/components/feedback/print/PrintContext.ts +20 -0
- package/src/components/feedback/print/PrintProvider.tsx +280 -0
- package/src/components/form-control/Button.tsx +1 -1
- package/src/hooks/usePrint.ts +2 -282
- package/src/index.ts +5 -3
- package/src/providers/{InitializeProvider.tsx → SystemProvider.tsx} +2 -30
- package/tailwind.config.ts +2 -3
- package/dist/providers/InitializeProvider.d.ts +0 -33
- package/dist/providers/InitializeProvider.d.ts.map +0 -1
- package/dist/providers/InitializeProvider.js.map +0 -6
package/dist/index.d.ts
CHANGED
|
@@ -49,12 +49,15 @@ export * from "./components/disclosure/Dropdown";
|
|
|
49
49
|
export * from "./components/disclosure/Dialog";
|
|
50
50
|
export * from "./components/disclosure/DialogContext";
|
|
51
51
|
export * from "./components/disclosure/DialogInstanceContext";
|
|
52
|
+
export * from "./components/disclosure/DialogProvider";
|
|
52
53
|
export * from "./components/disclosure/Tabs";
|
|
53
54
|
export * from "./components/feedback/notification/NotificationContext";
|
|
54
55
|
export * from "./components/feedback/notification/NotificationBell";
|
|
55
56
|
export * from "./components/feedback/notification/NotificationBanner";
|
|
56
57
|
export * from "./components/feedback/busy/BusyContext";
|
|
57
58
|
export * from "./components/feedback/busy/BusyContainer";
|
|
59
|
+
export * from "./components/feedback/print/PrintContext";
|
|
60
|
+
export * from "./components/feedback/print/PrintProvider";
|
|
58
61
|
export * from "./components/feedback/print/Print";
|
|
59
62
|
export * from "./components/feedback/print/PrintInstanceContext";
|
|
60
63
|
export * from "./components/feedback/Progress";
|
|
@@ -67,11 +70,10 @@ export { type ServiceClientContextValue, ServiceClientContext, useServiceClient,
|
|
|
67
70
|
export type { SharedDataDefinition, SharedDataAccessor, SharedDataValue, } from "./providers/shared-data/SharedDataContext";
|
|
68
71
|
export { SharedDataContext, useSharedData } from "./providers/shared-data/SharedDataContext";
|
|
69
72
|
export * from "./providers/shared-data/SharedDataChangeEvent";
|
|
70
|
-
export * from "./providers/
|
|
73
|
+
export * from "./providers/SystemProvider";
|
|
71
74
|
export * from "./hooks/useLocalStorage";
|
|
72
75
|
export * from "./hooks/useSyncConfig";
|
|
73
76
|
export * from "./hooks/useLogger";
|
|
74
|
-
export * from "./hooks/usePrint";
|
|
75
77
|
export { createControllableSignal } from "./hooks/createControllableSignal";
|
|
76
78
|
export { createIMEHandler } from "./hooks/createIMEHandler";
|
|
77
79
|
export { createMountTransition } from "./hooks/createMountTransition";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["..\\src\\index.ts"],"names":[],"mappings":"AAGA,cAAc,kCAAkC,CAAC;AAGjD,cAAc,yCAAyC,CAAC;AAGxD,cAAc,6CAA6C,CAAC;AAG5D,cAAc,2CAA2C,CAAC;AAC1D,cAAc,6CAA6C,CAAC;AAC5D,cAAc,4CAA4C,CAAC;AAC3D,cAAc,gDAAgD,CAAC;AAC/D,cAAc,4CAA4C,CAAC;AAC3D,cAAc,0CAA0C,CAAC;AACzD,cAAc,8CAA8C,CAAC;AAG7D,cAAc,6CAA6C,CAAC;AAC5D,cAAc,oDAAoD,CAAC;AACnE,cAAc,0CAA0C,CAAC;AACzD,cAAc,kDAAkD,CAAC;AACjE,cAAc,+CAA+C,CAAC;AAG9D,cAAc,oDAAoD,CAAC;AACnE,cAAc,6DAA6D,CAAC;AAC5E,cAAc,iDAAiD,CAAC;AAChE,cAAc,yCAAyC,CAAC;AACxD,cAAc,oDAAoD,CAAC;AACnE,cAAc,uCAAuC,CAAC;AACtD,cAAc,mCAAmC,CAAC;AAMlD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,qCAAqC,CAAC;AACpD,cAAc,4CAA4C,CAAC;AAC3D,cAAc,mCAAmC,CAAC;AAMlD,cAAc,yBAAyB,CAAC;AACxC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,oCAAoC,CAAC;AACnD,cAAc,wCAAwC,CAAC;AACvD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,mCAAmC,CAAC;AAClD,cAAc,0CAA0C,CAAC;AACzD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,qCAAqC,CAAC;AACpD,cAAc,oDAAoD,CAAC;AACnE,cAAc,iCAAiC,CAAC;AAChD,cAAc,wCAAwC,CAAC;AAMvD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,0BAA0B,CAAC;AACzC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,4BAA4B,CAAC;AAM3C,cAAc,kCAAkC,CAAC;AACjD,cAAc,kCAAkC,CAAC;AACjD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,uCAAuC,CAAC;AACtD,cAAc,+CAA+C,CAAC;AAC9D,cAAc,8BAA8B,CAAC;AAO7C,cAAc,wDAAwD,CAAC;AACvE,cAAc,qDAAqD,CAAC;AACpE,cAAc,uDAAuD,CAAC;AAGtE,cAAc,wCAAwC,CAAC;AACvD,cAAc,0CAA0C,CAAC;AAGzD,cAAc,mCAAmC,CAAC;AAClD,cAAc,kDAAkD,CAAC;AACjE,cAAc,gCAAgC,CAAC;AAO/C,OAAO,EAAE,KAAK,SAAS,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAGrF,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,uBAAuB,EAC5B,kBAAkB,EAClB,cAAc,GACf,MAAM,gCAAgC,CAAC;AAGxC,OAAO,EAAE,KAAK,UAAU,EAAE,KAAK,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAGrF,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACpD,YAAY,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAGzE,OAAO,EACL,KAAK,yBAAyB,EAC9B,oBAAoB,EACpB,gBAAgB,GACjB,MAAM,kCAAkC,CAAC;AAG1C,YAAY,EACV,oBAAoB,EACpB,kBAAkB,EAClB,eAAe,GAChB,MAAM,2CAA2C,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,2CAA2C,CAAC;AAC7F,cAAc,+CAA+C,CAAC;AAG9D,cAAc,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["..\\src\\index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -49,12 +49,15 @@ export * from "./components/disclosure/Dropdown.js";
|
|
|
49
49
|
export * from "./components/disclosure/Dialog.js";
|
|
50
50
|
export * from "./components/disclosure/DialogContext.js";
|
|
51
51
|
export * from "./components/disclosure/DialogInstanceContext.js";
|
|
52
|
+
export * from "./components/disclosure/DialogProvider.js";
|
|
52
53
|
export * from "./components/disclosure/Tabs.js";
|
|
53
54
|
export * from "./components/feedback/notification/NotificationContext.js";
|
|
54
55
|
export * from "./components/feedback/notification/NotificationBell.js";
|
|
55
56
|
export * from "./components/feedback/notification/NotificationBanner.js";
|
|
56
57
|
export * from "./components/feedback/busy/BusyContext.js";
|
|
57
58
|
export * from "./components/feedback/busy/BusyContainer.js";
|
|
59
|
+
export * from "./components/feedback/print/PrintContext.js";
|
|
60
|
+
export * from "./components/feedback/print/PrintProvider.js";
|
|
58
61
|
export * from "./components/feedback/print/Print.js";
|
|
59
62
|
export * from "./components/feedback/print/PrintInstanceContext.js";
|
|
60
63
|
export * from "./components/feedback/Progress.js";
|
|
@@ -71,11 +74,10 @@ import {
|
|
|
71
74
|
} from "./providers/ServiceClientContext.js";
|
|
72
75
|
import { SharedDataContext, useSharedData } from "./providers/shared-data/SharedDataContext.js";
|
|
73
76
|
export * from "./providers/shared-data/SharedDataChangeEvent.js";
|
|
74
|
-
export * from "./providers/
|
|
77
|
+
export * from "./providers/SystemProvider.js";
|
|
75
78
|
export * from "./hooks/useLocalStorage.js";
|
|
76
79
|
export * from "./hooks/useSyncConfig.js";
|
|
77
80
|
export * from "./hooks/useLogger.js";
|
|
78
|
-
export * from "./hooks/usePrint.js";
|
|
79
81
|
import { createControllableSignal } from "./hooks/createControllableSignal.js";
|
|
80
82
|
import { createIMEHandler } from "./hooks/createIMEHandler.js";
|
|
81
83
|
import { createMountTransition } from "./hooks/createMountTransition.js";
|
package/dist/index.js.map
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/index.ts"],
|
|
4
|
-
"mappings": "AAGA,cAAc;AAGd,cAAc;AAGd,cAAc;AAGd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AAGd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AAGd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AAMd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AAMd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AAMd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AAMd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AAOd,cAAc;AACd,cAAc;AACd,cAAc;AAGd,cAAc;AACd,cAAc;AAGd,cAAc;AACd,cAAc;AACd,cAAc;AAOd,SAAyB,eAAe,iBAAiB;AAGzD;AAAA,EAGE;AAAA,EACA;AAAA,OACK;AAGP,eAAyD;AAGzD,SAAS,gBAAgB;AAIzB;AAAA,EAEE;AAAA,EACA;AAAA,OACK;AAQP,SAAS,mBAAmB,qBAAqB;AACjD,cAAc;AAGd,cAAc;AAMd,cAAc;AACd,cAAc;AACd,cAAc;AACd,
|
|
4
|
+
"mappings": "AAGA,cAAc;AAGd,cAAc;AAGd,cAAc;AAGd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AAGd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AAGd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AAMd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AAMd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AAMd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AAMd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AAOd,cAAc;AACd,cAAc;AACd,cAAc;AAGd,cAAc;AACd,cAAc;AAGd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AAOd,SAAyB,eAAe,iBAAiB;AAGzD;AAAA,EAGE;AAAA,EACA;AAAA,OACK;AAGP,eAAyD;AAGzD,SAAS,gBAAgB;AAIzB;AAAA,EAEE;AAAA,EACA;AAAA,OACK;AAQP,SAAS,mBAAmB,qBAAqB;AACjD,cAAc;AAGd,cAAc;AAMd,cAAc;AACd,cAAc;AACd,cAAc;AACd,SAAS,gCAAgC;AACzC,SAAS,wBAAwB;AACjC,SAAS,6BAA6B;AACtC,SAAS,qBAAqB;AAM9B,cAAc;AACd,cAAc;AAMd,SAAS,cAAc;AAMvB,SAAS,mBAAmB;AAC5B,SAAS,kBAAkB;AAC3B,SAAS,0BAA0B;",
|
|
5
5
|
"names": []
|
|
6
6
|
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { type ParentComponent } from "solid-js";
|
|
2
|
+
import type { BusyVariant } from "../components/feedback/busy/BusyContext";
|
|
3
|
+
export type { BusyVariant };
|
|
4
|
+
export declare const SystemProvider: ParentComponent<{
|
|
5
|
+
clientName: string;
|
|
6
|
+
busyVariant?: BusyVariant;
|
|
7
|
+
}>;
|
|
8
|
+
//# sourceMappingURL=SystemProvider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SystemProvider.d.ts","sourceRoot":"","sources":["..\\..\\src\\providers\\SystemProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,UAAU,CAAC;AAahD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yCAAyC,CAAC;AAE3E,YAAY,EAAE,WAAW,EAAE,CAAC;AAE5B,eAAO,MAAM,cAAc,EAAE,eAAe,CAAC;IAC3C,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,WAAW,CAAC;CAC3B,CAyBA,CAAC"}
|
|
@@ -11,8 +11,7 @@ import { ThemeProvider } from "./ThemeContext.js";
|
|
|
11
11
|
import { ServiceClientProvider } from "./ServiceClientProvider.js";
|
|
12
12
|
import { SharedDataProvider } from "./shared-data/SharedDataProvider.js";
|
|
13
13
|
import { BusyProvider } from "../components/feedback/busy/BusyProvider.js";
|
|
14
|
-
|
|
15
|
-
const InitializeProvider = (props) => {
|
|
14
|
+
const SystemProvider = (props) => {
|
|
16
15
|
return _$createComponent(ConfigProvider, {
|
|
17
16
|
get clientName() {
|
|
18
17
|
return props.clientName;
|
|
@@ -41,11 +40,7 @@ const InitializeProvider = (props) => {
|
|
|
41
40
|
return props.busyVariant;
|
|
42
41
|
},
|
|
43
42
|
get children() {
|
|
44
|
-
return
|
|
45
|
-
get children() {
|
|
46
|
-
return props.children;
|
|
47
|
-
}
|
|
48
|
-
});
|
|
43
|
+
return props.children;
|
|
49
44
|
}
|
|
50
45
|
});
|
|
51
46
|
}
|
|
@@ -70,6 +65,6 @@ const InitializeProvider = (props) => {
|
|
|
70
65
|
});
|
|
71
66
|
};
|
|
72
67
|
export {
|
|
73
|
-
|
|
68
|
+
SystemProvider
|
|
74
69
|
};
|
|
75
|
-
//# sourceMappingURL=
|
|
70
|
+
//# sourceMappingURL=SystemProvider.js.map
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/providers/SystemProvider.tsx"],
|
|
4
|
+
"mappings": ";AACA,SAASA,sBAAsB;AAC/B,SAASC,2BAA2B;AACpC,SAASC,sBAAsB;AAC/B,SAASC,4BAA4B;AACrC,SAASC,0BAA0B;AACnC,SAASC,2BAA2B;AACpC,SAASC,yBAAyB;AAClC,SAASC,yBAAyB;AAClC,SAASC,qBAAqB;AAC9B,SAASC,6BAA6B;AACtC,SAASC,0BAA0B;AACnC,SAASC,oBAAoB;AAKtB,MAAMC,iBAGPC,WAAU;AACd,SAAAC,kBACGd,gBAAc;IAAA,IAACe,aAAU;AAAA,aAAEF,MAAME;IAAU;IAAA,IAAAC,WAAA;AAAA,aAAAF,kBACzCb,qBAAmB;QAAA,IAAAe,WAAA;AAAA,iBAAAF,kBACjBZ,gBAAc;YAAA,IAAAc,WAAA;AAAA,qBAAAF,kBACZX,sBAAoB;gBAAA,IAAAa,WAAA;AAAA,yBAAA,CAAAF,kBAClBV,oBAAkB,CAAA,CAAA,GAAAU,kBAClBT,qBAAmB;oBAAA,IAAAW,WAAA;AAAA,6BAAAF,kBACjBR,mBAAiB;wBAAA,IAAAU,WAAA;AAAA,iCAAAF,kBACfP,mBAAiB;4BAAA,IAAAS,WAAA;AAAA,qCAAAF,kBACfN,eAAa;gCAAA,IAAAQ,WAAA;AAAA,yCAAAF,kBACXL,uBAAqB;oCAAA,IAAAO,WAAA;AAAA,6CAAAF,kBACnBJ,oBAAkB;wCAAA,IAAAM,WAAA;AAAA,iDAAAF,kBAChBH,cAAY;4CAAA,IAACM,UAAO;AAAA,qDAAEJ,MAAMK;4CAAW;4CAAA,IAAAF,WAAA;AAAA,qDAAGH,MAAMG;4CAAQ;0CAAA,CAAA;wCAAA;sCAAA,CAAA;oCAAA;kCAAA,CAAA;gCAAA;8BAAA,CAAA;4BAAA;0BAAA,CAAA;wBAAA;sBAAA,CAAA;oBAAA;kBAAA,CAAA,CAAA;gBAAA;cAAA,CAAA;YAAA;UAAA,CAAA;QAAA;MAAA,CAAA;IAAA;EAAA,CAAA;AAYjF;",
|
|
5
|
+
"names": ["ConfigProvider", "SyncStorageProvider", "LoggerProvider", "NotificationProvider", "NotificationBanner", "ErrorLoggerProvider", "PwaUpdateProvider", "ClipboardProvider", "ThemeProvider", "ServiceClientProvider", "SharedDataProvider", "BusyProvider", "SystemProvider", "props", "_$createComponent", "clientName", "children", "variant", "busyVariant"]
|
|
6
|
+
}
|
package/docs/disclosure.md
CHANGED
|
@@ -212,7 +212,7 @@ function MyPage() {
|
|
|
212
212
|
|
|
213
213
|
**Dialog Defaults:**
|
|
214
214
|
|
|
215
|
-
`DialogDefaultsContext` and `DialogDefaults` are exported for advanced use cases such as providing default dialog options to a subtree.
|
|
215
|
+
`DialogDefaultsContext` and `DialogDefaults` are exported for advanced use cases such as providing default dialog options to a subtree. Add `<DialogProvider>` to your provider tree to enable `useDialog()`. See [Provider Placement Guide](providers.md#provider-placement-guide).
|
|
216
216
|
|
|
217
217
|
```typescript
|
|
218
218
|
import { DialogDefaultsContext, type DialogDefaults } from "@simplysm/solid";
|
package/docs/feedback.md
CHANGED
|
@@ -119,7 +119,16 @@ import { BusyContainer } from "@simplysm/solid";
|
|
|
119
119
|
|
|
120
120
|
## Print / usePrint
|
|
121
121
|
|
|
122
|
-
Browser printing and PDF generation.
|
|
122
|
+
Browser printing and PDF generation. Requires `<PrintProvider>` in the component tree.
|
|
123
|
+
|
|
124
|
+
```tsx
|
|
125
|
+
// Provider setup:
|
|
126
|
+
<SystemProvider clientName="my-app">
|
|
127
|
+
<PrintProvider>
|
|
128
|
+
<App />
|
|
129
|
+
</PrintProvider>
|
|
130
|
+
</SystemProvider>
|
|
131
|
+
```
|
|
123
132
|
|
|
124
133
|
```tsx
|
|
125
134
|
import { Print, usePrint } from "@simplysm/solid";
|
package/docs/hooks.md
CHANGED
|
@@ -115,7 +115,7 @@ Hook to access busy overlay. Must be used inside `BusyProvider`. See [Busy](feed
|
|
|
115
115
|
|
|
116
116
|
## usePrint
|
|
117
117
|
|
|
118
|
-
Hook for printing and PDF generation. See [Print / usePrint](feedback.md#print--useprint) for detailed API.
|
|
118
|
+
Hook for printing and PDF generation. Must be used inside `<PrintProvider>`. See [Print / usePrint](feedback.md#print--useprint) for detailed API.
|
|
119
119
|
|
|
120
120
|
---
|
|
121
121
|
|
package/docs/providers.md
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
# Providers
|
|
2
2
|
|
|
3
|
-
##
|
|
3
|
+
## SystemProvider
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
Infrastructure provider. Wraps all internal providers (config, theme, logger, notification, busy, service client, shared data) in the correct dependency order. Use this to set up your app.
|
|
6
6
|
|
|
7
7
|
```tsx
|
|
8
|
-
import {
|
|
8
|
+
import { SystemProvider } from "@simplysm/solid";
|
|
9
9
|
|
|
10
|
-
<
|
|
10
|
+
<SystemProvider clientName="my-app">
|
|
11
11
|
<AppRoot />
|
|
12
|
-
</
|
|
12
|
+
</SystemProvider>
|
|
13
13
|
```
|
|
14
14
|
|
|
15
15
|
Configuration is done via hooks inside child components:
|
|
@@ -40,16 +40,16 @@ ConfigProvider → SyncStorageProvider → LoggerProvider →
|
|
|
40
40
|
ErrorLoggerProvider → PwaUpdateProvider →
|
|
41
41
|
ClipboardProvider → ThemeProvider →
|
|
42
42
|
ServiceClientProvider → SharedDataProvider →
|
|
43
|
-
BusyProvider →
|
|
43
|
+
BusyProvider → {children}
|
|
44
44
|
```
|
|
45
45
|
|
|
46
|
-
|
|
46
|
+
Internal providers are not exported individually. `DialogProvider` and `PrintProvider` are exported separately for flexible placement in your provider tree.
|
|
47
47
|
|
|
48
48
|
---
|
|
49
49
|
|
|
50
50
|
## Exported Types & Hooks
|
|
51
51
|
|
|
52
|
-
The following types, context objects, and hooks are exported for use with `
|
|
52
|
+
The following types, context objects, and hooks are exported for use with `SystemProvider`:
|
|
53
53
|
|
|
54
54
|
| Export | Kind | Description |
|
|
55
55
|
|--------|------|-------------|
|
|
@@ -60,7 +60,6 @@ The following types, context objects, and hooks are exported for use with `Initi
|
|
|
60
60
|
| `useSharedData` | hook | Shared data subscription access |
|
|
61
61
|
| `useNotification` | hook | Notification system access |
|
|
62
62
|
| `useBusy` | hook | Busy overlay control |
|
|
63
|
-
| `useDialog` | hook | Programmatic dialog opening |
|
|
64
63
|
| `ConfigContext` | context | For mock injection in tests |
|
|
65
64
|
| `SyncStorageContext` | context | For mock injection in tests |
|
|
66
65
|
| `ServiceClientContext` | context | For mock injection in tests |
|
|
@@ -133,3 +132,73 @@ interface SharedDataDefinition<TData> {
|
|
|
133
132
|
```typescript
|
|
134
133
|
import { SharedDataChangeEvent } from "@simplysm/solid";
|
|
135
134
|
```
|
|
135
|
+
|
|
136
|
+
---
|
|
137
|
+
|
|
138
|
+
## DialogProvider
|
|
139
|
+
|
|
140
|
+
Programmatic dialog management. Must be placed inside `SystemProvider`. See [Dialog](disclosure.md#dialog) for full Dialog component and `useDialog` API.
|
|
141
|
+
|
|
142
|
+
```tsx
|
|
143
|
+
import { DialogProvider, useDialog } from "@simplysm/solid";
|
|
144
|
+
|
|
145
|
+
// In your provider tree:
|
|
146
|
+
<SystemProvider clientName="my-app">
|
|
147
|
+
<DialogProvider>
|
|
148
|
+
<App />
|
|
149
|
+
</DialogProvider>
|
|
150
|
+
</SystemProvider>
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
| Prop | Type | Default | Description |
|
|
154
|
+
|------|------|---------|-------------|
|
|
155
|
+
| `closeOnEscape` | `boolean` | `true` | Default: close dialogs on Escape key |
|
|
156
|
+
| `closeOnBackdrop` | `boolean` | - | Default: close dialogs on backdrop click |
|
|
157
|
+
|
|
158
|
+
---
|
|
159
|
+
|
|
160
|
+
## PrintProvider
|
|
161
|
+
|
|
162
|
+
Printing and PDF generation. Must be placed inside `SystemProvider` (depends on `useBusy()`). See [Print / usePrint](feedback.md#print--useprint) for full API.
|
|
163
|
+
|
|
164
|
+
```tsx
|
|
165
|
+
import { PrintProvider, usePrint } from "@simplysm/solid";
|
|
166
|
+
|
|
167
|
+
// In your provider tree:
|
|
168
|
+
<SystemProvider clientName="my-app">
|
|
169
|
+
<PrintProvider>
|
|
170
|
+
<App />
|
|
171
|
+
</PrintProvider>
|
|
172
|
+
</SystemProvider>
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
No additional props.
|
|
176
|
+
|
|
177
|
+
---
|
|
178
|
+
|
|
179
|
+
## Provider Placement Guide
|
|
180
|
+
|
|
181
|
+
`SystemProvider` provides all infrastructure. `DialogProvider` and `PrintProvider` are standalone and should be placed where their factory content needs context access.
|
|
182
|
+
|
|
183
|
+
**Recommended structure:**
|
|
184
|
+
|
|
185
|
+
```
|
|
186
|
+
<SystemProvider> ← Infrastructure (config, theme, logger, etc.)
|
|
187
|
+
<YourAuthProvider> ← Your providers
|
|
188
|
+
<YourDataProvider>
|
|
189
|
+
<DialogProvider> ← Dialog factories can access Auth + Data
|
|
190
|
+
<PrintProvider> ← Print factories can access Auth + Data
|
|
191
|
+
<App />
|
|
192
|
+
</PrintProvider>
|
|
193
|
+
</DialogProvider>
|
|
194
|
+
</YourDataProvider>
|
|
195
|
+
</YourAuthProvider>
|
|
196
|
+
</SystemProvider>
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
**Why this order?**
|
|
200
|
+
|
|
201
|
+
- `DialogProvider` and `PrintProvider` accept user components as factory functions (`dialog.show(() => <Form />)`, `print.toPrinter(() => <Report />)`)
|
|
202
|
+
- These factories are rendered inside the Provider's tree, not at the call site
|
|
203
|
+
- To access your app's contexts (auth, data, etc.), place `DialogProvider`/`PrintProvider` **below** those contexts
|
|
204
|
+
- `SystemProvider` must be outermost because `DialogProvider`/`PrintProvider` depend on `useBusy()` and other system hooks
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@simplysm/solid",
|
|
3
|
-
"version": "13.0.
|
|
3
|
+
"version": "13.0.41",
|
|
4
4
|
"description": "심플리즘 패키지 - SolidJS 라이브러리",
|
|
5
5
|
"author": "김석래",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -49,8 +49,8 @@
|
|
|
49
49
|
"solid-tiptap": "^0.8.0",
|
|
50
50
|
"tailwind-merge": "^3.5.0",
|
|
51
51
|
"tailwindcss": "^3.4.19",
|
|
52
|
-
"@simplysm/core-
|
|
53
|
-
"@simplysm/core-
|
|
52
|
+
"@simplysm/core-common": "13.0.41",
|
|
53
|
+
"@simplysm/core-browser": "13.0.41"
|
|
54
54
|
},
|
|
55
55
|
"devDependencies": {
|
|
56
56
|
"@solidjs/testing-library": "^0.8.10"
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { createContext, useContext } from "solid-js";
|
|
2
|
+
import type { JSX } from "solid-js";
|
|
3
|
+
|
|
4
|
+
export interface PrintOptions {
|
|
5
|
+
size?: string;
|
|
6
|
+
margin?: string;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export interface PrintContextValue {
|
|
10
|
+
toPrinter: (factory: () => JSX.Element, options?: PrintOptions) => Promise<void>;
|
|
11
|
+
toPdf: (factory: () => JSX.Element, options?: PrintOptions) => Promise<Uint8Array>;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export const PrintContext = createContext<PrintContextValue>();
|
|
15
|
+
|
|
16
|
+
export function usePrint(): PrintContextValue {
|
|
17
|
+
const ctx = useContext(PrintContext);
|
|
18
|
+
if (!ctx) throw new Error("usePrint must be used inside <PrintProvider>");
|
|
19
|
+
return ctx;
|
|
20
|
+
}
|
|
@@ -0,0 +1,280 @@
|
|
|
1
|
+
import { type ParentComponent, createSignal, Show, type JSX } from "solid-js";
|
|
2
|
+
import { Portal } from "solid-js/web";
|
|
3
|
+
import { jsPDF } from "jspdf";
|
|
4
|
+
import * as htmlToImage from "html-to-image";
|
|
5
|
+
import { useBusy } from "../busy/BusyContext";
|
|
6
|
+
import { PrintContext, type PrintContextValue, type PrintOptions } from "./PrintContext";
|
|
7
|
+
import { PrintInstanceContext, type PrintInstance } from "./PrintInstanceContext";
|
|
8
|
+
|
|
9
|
+
// --- Paper size constants (pt) ---
|
|
10
|
+
|
|
11
|
+
const PAPER_SIZES: Partial<Record<string, [number, number]>> = {
|
|
12
|
+
a3: [841.89, 1190.55],
|
|
13
|
+
a4: [595.28, 841.89],
|
|
14
|
+
a5: [419.53, 595.28],
|
|
15
|
+
letter: [612, 792],
|
|
16
|
+
legal: [612, 1008],
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
// --- Internal helpers ---
|
|
20
|
+
|
|
21
|
+
function parseDimension(dim: string): number {
|
|
22
|
+
const num = parseFloat(dim);
|
|
23
|
+
if (dim.endsWith("mm")) return num * 2.83465;
|
|
24
|
+
if (dim.endsWith("cm")) return num * 28.3465;
|
|
25
|
+
if (dim.endsWith("in")) return num * 72;
|
|
26
|
+
return num; // pt
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
function parseSize(size?: string): { width: number; height: number; orientation: "p" | "l" } {
|
|
30
|
+
const s = (size ?? "A4").toLowerCase().trim();
|
|
31
|
+
const landscape = s.includes("landscape");
|
|
32
|
+
const cleanSize = s.replace(/\s*(landscape|portrait)\s*/g, "").trim();
|
|
33
|
+
|
|
34
|
+
const paperSize = PAPER_SIZES[cleanSize];
|
|
35
|
+
if (paperSize) {
|
|
36
|
+
const [w, h] = paperSize;
|
|
37
|
+
if (landscape) return { width: h, height: w, orientation: "l" };
|
|
38
|
+
return { width: w, height: h, orientation: "p" };
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
const parts = cleanSize.split(/\s+/);
|
|
42
|
+
if (parts.length === 2) {
|
|
43
|
+
const w = parseDimension(parts[0]);
|
|
44
|
+
const h = parseDimension(parts[1]);
|
|
45
|
+
return { width: w, height: h, orientation: w > h ? "l" : "p" };
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
return { width: 595.28, height: 841.89, orientation: "p" };
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
function waitForImages(container: HTMLElement): Promise<void> {
|
|
52
|
+
const imgs = Array.from(container.querySelectorAll("img"));
|
|
53
|
+
return Promise.all(
|
|
54
|
+
imgs.map((img) =>
|
|
55
|
+
img.complete
|
|
56
|
+
? Promise.resolve()
|
|
57
|
+
: new Promise<void>((resolve) => {
|
|
58
|
+
img.addEventListener("load", () => resolve(), { once: true });
|
|
59
|
+
img.addEventListener("error", () => resolve(), { once: true });
|
|
60
|
+
}),
|
|
61
|
+
),
|
|
62
|
+
).then(() => undefined);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
// --- Job type for reactive rendering ---
|
|
66
|
+
|
|
67
|
+
interface PrintJob {
|
|
68
|
+
factory: () => JSX.Element;
|
|
69
|
+
instance: PrintInstance;
|
|
70
|
+
onRendered: (container: HTMLDivElement) => void;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* Print Provider
|
|
75
|
+
*
|
|
76
|
+
* @remarks
|
|
77
|
+
* - Factory content is rendered within the Provider's own reactive tree,
|
|
78
|
+
* so it can access all contexts above PrintProvider
|
|
79
|
+
* - Uses Portal + hidden div for off-screen rendering
|
|
80
|
+
* - BusyProvider must be an ancestor (useBusy dependency)
|
|
81
|
+
*/
|
|
82
|
+
export const PrintProvider: ParentComponent = (props) => {
|
|
83
|
+
const busy = useBusy();
|
|
84
|
+
const [currentJob, setCurrentJob] = createSignal<PrintJob | null>(null);
|
|
85
|
+
|
|
86
|
+
function renderAndWait(factory: () => JSX.Element): Promise<HTMLDivElement> {
|
|
87
|
+
return new Promise<HTMLDivElement>((resolve) => {
|
|
88
|
+
let resolveReady: (() => void) | undefined;
|
|
89
|
+
const state = { readyCalled: false };
|
|
90
|
+
|
|
91
|
+
const readyPromise = new Promise<void>((readyResolve) => {
|
|
92
|
+
resolveReady = readyResolve;
|
|
93
|
+
});
|
|
94
|
+
|
|
95
|
+
const instance: PrintInstance = {
|
|
96
|
+
ready: () => {
|
|
97
|
+
state.readyCalled = true;
|
|
98
|
+
resolveReady?.();
|
|
99
|
+
},
|
|
100
|
+
};
|
|
101
|
+
|
|
102
|
+
const onRendered = (container: HTMLDivElement): void => {
|
|
103
|
+
// Wait for mount + optional ready() call
|
|
104
|
+
const finalize = async (): Promise<void> => {
|
|
105
|
+
await Promise.resolve();
|
|
106
|
+
|
|
107
|
+
if (!state.readyCalled) {
|
|
108
|
+
await new Promise<void>((rAFResolve) => {
|
|
109
|
+
requestAnimationFrame(() => rAFResolve());
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
if (state.readyCalled) {
|
|
114
|
+
await readyPromise;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
await waitForImages(container);
|
|
118
|
+
resolve(container);
|
|
119
|
+
};
|
|
120
|
+
|
|
121
|
+
void finalize();
|
|
122
|
+
};
|
|
123
|
+
|
|
124
|
+
setCurrentJob({ factory, instance, onRendered });
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
const toPrinter = async (factory: () => JSX.Element, options?: PrintOptions): Promise<void> => {
|
|
129
|
+
busy.show();
|
|
130
|
+
let styleEl: HTMLStyleElement | undefined;
|
|
131
|
+
|
|
132
|
+
try {
|
|
133
|
+
const container = await renderAndWait(factory);
|
|
134
|
+
|
|
135
|
+
container.style.position = "static";
|
|
136
|
+
container.style.left = "auto";
|
|
137
|
+
container.classList.add("_sd-print-target");
|
|
138
|
+
|
|
139
|
+
styleEl = document.createElement("style");
|
|
140
|
+
styleEl.textContent = `
|
|
141
|
+
@page {
|
|
142
|
+
size: ${options?.size ?? "A4"};
|
|
143
|
+
margin: ${options?.margin ?? "0"};
|
|
144
|
+
}
|
|
145
|
+
body > ._sd-print-target { display: none; }
|
|
146
|
+
@media print {
|
|
147
|
+
html, body { -webkit-print-color-adjust: exact; background: white; }
|
|
148
|
+
body > * { display: none !important; }
|
|
149
|
+
body > ._sd-print-target { display: block !important; }
|
|
150
|
+
}
|
|
151
|
+
`;
|
|
152
|
+
document.head.appendChild(styleEl);
|
|
153
|
+
|
|
154
|
+
await new Promise<void>((resolve) => {
|
|
155
|
+
requestAnimationFrame(() => {
|
|
156
|
+
window.print();
|
|
157
|
+
resolve();
|
|
158
|
+
});
|
|
159
|
+
});
|
|
160
|
+
} finally {
|
|
161
|
+
styleEl?.remove();
|
|
162
|
+
setCurrentJob(null);
|
|
163
|
+
busy.hide();
|
|
164
|
+
}
|
|
165
|
+
};
|
|
166
|
+
|
|
167
|
+
const toPdf = async (factory: () => JSX.Element, options?: PrintOptions): Promise<Uint8Array> => {
|
|
168
|
+
busy.show();
|
|
169
|
+
|
|
170
|
+
try {
|
|
171
|
+
const container = await renderAndWait(factory);
|
|
172
|
+
|
|
173
|
+
const { width: pageWidth, height: pageHeight, orientation } = parseSize(options?.size);
|
|
174
|
+
|
|
175
|
+
const doc = new jsPDF(orientation, "pt", [pageWidth, pageHeight]);
|
|
176
|
+
doc.deletePage(1);
|
|
177
|
+
|
|
178
|
+
const pages = Array.from(container.querySelectorAll<HTMLElement>("[data-print-page]"));
|
|
179
|
+
|
|
180
|
+
if (pages.length > 0) {
|
|
181
|
+
for (const pageEl of pages) {
|
|
182
|
+
pageEl.style.width = pageWidth + "pt";
|
|
183
|
+
|
|
184
|
+
const canvas = await htmlToImage.toCanvas(pageEl, {
|
|
185
|
+
backgroundColor: "white",
|
|
186
|
+
pixelRatio: 4,
|
|
187
|
+
});
|
|
188
|
+
|
|
189
|
+
const imgWidth = pageWidth;
|
|
190
|
+
const imgHeight = canvas.height * (pageWidth / canvas.width);
|
|
191
|
+
|
|
192
|
+
doc.addPage([pageWidth, pageHeight], orientation);
|
|
193
|
+
doc.addImage({
|
|
194
|
+
imageData: canvas,
|
|
195
|
+
x: 0,
|
|
196
|
+
y: 0,
|
|
197
|
+
width: imgWidth,
|
|
198
|
+
height: imgHeight,
|
|
199
|
+
});
|
|
200
|
+
}
|
|
201
|
+
} else {
|
|
202
|
+
const target = (container.firstElementChild as HTMLElement | null) ?? container;
|
|
203
|
+
target.style.width = pageWidth + "pt";
|
|
204
|
+
|
|
205
|
+
const canvas = await htmlToImage.toCanvas(target, {
|
|
206
|
+
backgroundColor: "white",
|
|
207
|
+
pixelRatio: 4,
|
|
208
|
+
});
|
|
209
|
+
|
|
210
|
+
const scaleFactor = pageWidth / canvas.width;
|
|
211
|
+
const pageHeightPx = pageHeight / scaleFactor;
|
|
212
|
+
const totalPages = Math.ceil(canvas.height / pageHeightPx);
|
|
213
|
+
|
|
214
|
+
for (let i = 0; i < totalPages; i++) {
|
|
215
|
+
const sliceCanvas = document.createElement("canvas");
|
|
216
|
+
sliceCanvas.width = canvas.width;
|
|
217
|
+
sliceCanvas.height = Math.min(pageHeightPx, canvas.height - i * pageHeightPx);
|
|
218
|
+
|
|
219
|
+
const ctx = sliceCanvas.getContext("2d")!;
|
|
220
|
+
ctx.drawImage(
|
|
221
|
+
canvas,
|
|
222
|
+
0,
|
|
223
|
+
i * pageHeightPx,
|
|
224
|
+
canvas.width,
|
|
225
|
+
sliceCanvas.height,
|
|
226
|
+
0,
|
|
227
|
+
0,
|
|
228
|
+
canvas.width,
|
|
229
|
+
sliceCanvas.height,
|
|
230
|
+
);
|
|
231
|
+
|
|
232
|
+
const imgHeight = sliceCanvas.height * scaleFactor;
|
|
233
|
+
|
|
234
|
+
doc.addPage([pageWidth, pageHeight], orientation);
|
|
235
|
+
doc.addImage({
|
|
236
|
+
imageData: sliceCanvas,
|
|
237
|
+
x: 0,
|
|
238
|
+
y: 0,
|
|
239
|
+
width: pageWidth,
|
|
240
|
+
height: imgHeight,
|
|
241
|
+
});
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
const arrayBuffer = doc.output("arraybuffer");
|
|
246
|
+
return new Uint8Array(arrayBuffer);
|
|
247
|
+
} finally {
|
|
248
|
+
setCurrentJob(null);
|
|
249
|
+
busy.hide();
|
|
250
|
+
}
|
|
251
|
+
};
|
|
252
|
+
|
|
253
|
+
const contextValue: PrintContextValue = { toPrinter, toPdf };
|
|
254
|
+
|
|
255
|
+
return (
|
|
256
|
+
<PrintContext.Provider value={contextValue}>
|
|
257
|
+
{props.children}
|
|
258
|
+
<Portal>
|
|
259
|
+
<Show when={currentJob()}>
|
|
260
|
+
{(job) => (
|
|
261
|
+
<div
|
|
262
|
+
ref={(el) => {
|
|
263
|
+
job().onRendered(el);
|
|
264
|
+
}}
|
|
265
|
+
style={{
|
|
266
|
+
position: "fixed",
|
|
267
|
+
left: "-9999px",
|
|
268
|
+
top: "0",
|
|
269
|
+
}}
|
|
270
|
+
>
|
|
271
|
+
<PrintInstanceContext.Provider value={job().instance}>
|
|
272
|
+
{job().factory()}
|
|
273
|
+
</PrintInstanceContext.Provider>
|
|
274
|
+
</div>
|
|
275
|
+
)}
|
|
276
|
+
</Show>
|
|
277
|
+
</Portal>
|
|
278
|
+
</PrintContext.Provider>
|
|
279
|
+
);
|
|
280
|
+
};
|
|
@@ -35,7 +35,7 @@ const themeClasses = Object.fromEntries(
|
|
|
35
35
|
Object.entries(themeTokens).map(([theme, t]) => [
|
|
36
36
|
theme,
|
|
37
37
|
{
|
|
38
|
-
solid: clsx(t.solid, t.solidHover
|
|
38
|
+
solid: clsx(t.solid, t.solidHover /*, "shadow-md hover:shadow-lg"*/),
|
|
39
39
|
outline: clsx("bg-transparent", t.hoverBg, t.text, t.border),
|
|
40
40
|
ghost: clsx("bg-transparent", t.hoverBg, t.text),
|
|
41
41
|
},
|