@openpolicy/vue 0.0.16

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 ADDED
@@ -0,0 +1,70 @@
1
+ # `@openpolicy/vue`
2
+
3
+ > Vue components for rendering [OpenPolicy](https://openpolicy.sh) documents at runtime.
4
+
5
+ `@openpolicy/vue` provides headless Vue components that compile and render policies directly from config.
6
+
7
+ ## Install
8
+
9
+ ```sh
10
+ bun add @openpolicy/vue @openpolicy/sdk
11
+ ```
12
+
13
+ ## Usage
14
+
15
+ ```ts
16
+ // openpolicy.ts
17
+ import { defineConfig } from "@openpolicy/sdk";
18
+
19
+ export default defineConfig({
20
+ company: {
21
+ name: "Acme Inc.",
22
+ legalName: "Acme Corporation",
23
+ address: "123 Main St, Springfield, USA",
24
+ contact: "privacy@acme.com",
25
+ },
26
+ privacy: {
27
+ effectiveDate: "2026-01-01",
28
+ dataCollected: { "Account Information": ["Email", "Name"] },
29
+ legalBasis: "Legitimate interests and consent",
30
+ retention: { "Account data": "Until account deletion" },
31
+ cookies: { essential: true, analytics: false, marketing: false },
32
+ thirdParties: [],
33
+ userRights: ["access", "erasure"],
34
+ jurisdictions: ["us", "eu"],
35
+ },
36
+ });
37
+ ```
38
+
39
+ ```ts
40
+ // App.ts
41
+ import openpolicy from "./openpolicy";
42
+ import { OpenPolicy, PrivacyPolicy } from "@openpolicy/vue";
43
+
44
+ export default {
45
+ components: { OpenPolicy, PrivacyPolicy },
46
+ template: `
47
+ <OpenPolicy :config="openpolicy">
48
+ <PrivacyPolicy />
49
+ </OpenPolicy>
50
+ `,
51
+ data() {
52
+ return { openpolicy };
53
+ },
54
+ };
55
+ ```
56
+
57
+ ## Exports
58
+
59
+ - `OpenPolicy`
60
+ - `PrivacyPolicy`
61
+ - `TermsOfService`
62
+ - `CookiePolicy`
63
+ - `renderDocument`
64
+ - `defaultStyles`
65
+ - `./styles.css`
66
+
67
+ ## Links
68
+
69
+ - [GitHub](https://github.com/jamiedavenport/openpolicy)
70
+ - [openpolicy.sh](https://openpolicy.sh)
@@ -0,0 +1,401 @@
1
+ import * as vue from "vue";
2
+ import { CSSProperties, Component, PropType, VNodeChild } from "vue";
3
+
4
+ //#region ../core/dist/index.d.ts
5
+ type Jurisdiction = "us" | "eu" | "ca" | "au" | "nz" | "other";
6
+ type CompanyConfig = {
7
+ name: string;
8
+ legalName: string;
9
+ address: string;
10
+ contact: string;
11
+ };
12
+ type PrivacyPolicyConfig = {
13
+ effectiveDate: string;
14
+ company: CompanyConfig;
15
+ dataCollected: Record<string, string[]>;
16
+ legalBasis: string;
17
+ retention: Record<string, string>;
18
+ cookies: {
19
+ essential: boolean;
20
+ analytics: boolean;
21
+ marketing: boolean;
22
+ };
23
+ thirdParties: {
24
+ name: string;
25
+ purpose: string;
26
+ }[];
27
+ userRights: string[];
28
+ jurisdictions: Jurisdiction[];
29
+ children?: {
30
+ underAge: number;
31
+ noticeUrl?: string;
32
+ };
33
+ };
34
+ type DisputeResolutionMethod = "arbitration" | "litigation" | "mediation";
35
+ type TermsOfServiceConfig = {
36
+ effectiveDate: string;
37
+ company: CompanyConfig;
38
+ acceptance: {
39
+ methods: string[];
40
+ };
41
+ eligibility?: {
42
+ minimumAge: number;
43
+ jurisdictionRestrictions?: string[];
44
+ };
45
+ accounts?: {
46
+ registrationRequired: boolean;
47
+ userResponsibleForCredentials: boolean;
48
+ companyCanTerminate: boolean;
49
+ };
50
+ prohibitedUses?: string[];
51
+ userContent?: {
52
+ usersOwnContent: boolean;
53
+ licenseGrantedToCompany: boolean;
54
+ licenseDescription?: string;
55
+ companyCanRemoveContent: boolean;
56
+ };
57
+ intellectualProperty?: {
58
+ companyOwnsService: boolean;
59
+ usersMayNotCopy: boolean;
60
+ };
61
+ payments?: {
62
+ hasPaidFeatures: boolean;
63
+ refundPolicy?: string;
64
+ priceChangesNotice?: string;
65
+ };
66
+ availability?: {
67
+ noUptimeGuarantee: boolean;
68
+ maintenanceWindows?: string;
69
+ };
70
+ termination?: {
71
+ companyCanTerminate: boolean;
72
+ userCanTerminate: boolean;
73
+ effectOfTermination?: string;
74
+ };
75
+ disclaimers?: {
76
+ serviceProvidedAsIs: boolean;
77
+ noWarranties: boolean;
78
+ };
79
+ limitationOfLiability?: {
80
+ excludesIndirectDamages: boolean;
81
+ liabilityCap?: string;
82
+ };
83
+ indemnification?: {
84
+ userIndemnifiesCompany: boolean;
85
+ scope?: string;
86
+ };
87
+ thirdPartyServices?: {
88
+ name: string;
89
+ purpose: string;
90
+ }[];
91
+ disputeResolution?: {
92
+ method: DisputeResolutionMethod;
93
+ venue?: string;
94
+ classActionWaiver?: boolean;
95
+ };
96
+ governingLaw: {
97
+ jurisdiction: string;
98
+ };
99
+ changesPolicy?: {
100
+ noticeMethod: string;
101
+ noticePeriodDays?: number;
102
+ };
103
+ privacyPolicyUrl?: string;
104
+ };
105
+ type CookiePolicyConfig = {
106
+ effectiveDate: string;
107
+ company: CompanyConfig;
108
+ cookies: {
109
+ essential: boolean;
110
+ analytics: boolean;
111
+ functional: boolean;
112
+ marketing: boolean;
113
+ };
114
+ thirdParties?: {
115
+ name: string;
116
+ purpose: string;
117
+ policyUrl?: string;
118
+ }[];
119
+ trackingTechnologies?: string[];
120
+ consentMechanism?: {
121
+ hasBanner: boolean;
122
+ hasPreferencePanel: boolean;
123
+ canWithdraw: boolean;
124
+ };
125
+ jurisdictions: Jurisdiction[];
126
+ };
127
+ type OpenPolicyConfig = {
128
+ company: CompanyConfig;
129
+ privacy?: Omit<PrivacyPolicyConfig, "company">;
130
+ terms?: Omit<TermsOfServiceConfig, "company">;
131
+ cookie?: Omit<CookiePolicyConfig, "company">;
132
+ };
133
+ //#endregion
134
+ //#region src/documents/types.d.ts
135
+ type NodeContext = {
136
+ reason?: string;
137
+ };
138
+ type TextNode = {
139
+ type: "text";
140
+ value: string;
141
+ context?: NodeContext;
142
+ };
143
+ type BoldNode = {
144
+ type: "bold";
145
+ value: string;
146
+ context?: NodeContext;
147
+ };
148
+ type ItalicNode = {
149
+ type: "italic";
150
+ value: string;
151
+ context?: NodeContext;
152
+ };
153
+ type LinkNode = {
154
+ type: "link";
155
+ href: string;
156
+ value: string;
157
+ context?: NodeContext;
158
+ };
159
+ type InlineNode = TextNode | BoldNode | ItalicNode | LinkNode;
160
+ type HeadingNode = {
161
+ type: "heading";
162
+ level?: 1 | 2 | 3 | 4 | 5 | 6;
163
+ value: string;
164
+ context?: NodeContext;
165
+ };
166
+ type ParagraphNode = {
167
+ type: "paragraph";
168
+ children: InlineNode[];
169
+ context?: NodeContext;
170
+ };
171
+ type ListItemNode = {
172
+ type: "listItem";
173
+ children: (InlineNode | ListNode)[];
174
+ context?: NodeContext;
175
+ };
176
+ type ListNode = {
177
+ type: "list";
178
+ ordered?: boolean;
179
+ items: ListItemNode[];
180
+ context?: NodeContext;
181
+ };
182
+ type ContentNode = HeadingNode | ParagraphNode | ListNode;
183
+ type DocumentSection = {
184
+ type: "section";
185
+ id: string;
186
+ content: ContentNode[];
187
+ context?: NodeContext;
188
+ };
189
+ type PolicyType = "privacy" | "terms" | "cookie";
190
+ type Document = {
191
+ type: "document";
192
+ policyType: PolicyType;
193
+ sections: DocumentSection[];
194
+ context?: NodeContext;
195
+ };
196
+ type Node = Document | DocumentSection | ContentNode | ListItemNode | InlineNode; //#endregion
197
+ //#region src/documents/helpers.d.ts
198
+ //#endregion
199
+ //#region src/types.d.ts
200
+ type PolicyTheme = Partial<Record<"--op-heading-color" | "--op-body-color" | "--op-section-gap" | "--op-font-family" | "--op-font-size-heading" | "--op-font-weight-heading" | "--op-font-size-body" | "--op-line-height" | "--op-link-color" | "--op-link-color-hover" | "--op-border-color" | "--op-border-radius", string>>;
201
+ interface PolicyComponents {
202
+ Section?: Component<{
203
+ section: DocumentSection;
204
+ children?: VNodeChild;
205
+ }>;
206
+ Heading?: Component<{
207
+ node: HeadingNode;
208
+ }>;
209
+ Paragraph?: Component<{
210
+ node: ParagraphNode;
211
+ children?: VNodeChild;
212
+ }>;
213
+ List?: Component<{
214
+ node: ListNode;
215
+ children?: VNodeChild;
216
+ }>;
217
+ Text?: Component<{
218
+ node: TextNode;
219
+ }>;
220
+ Bold?: Component<{
221
+ node: BoldNode;
222
+ }>;
223
+ Italic?: Component<{
224
+ node: ItalicNode;
225
+ }>;
226
+ Link?: Component<{
227
+ node: LinkNode;
228
+ }>;
229
+ }
230
+ //#endregion
231
+ //#region src/components/CookiePolicy.d.ts
232
+ declare const CookiePolicy: vue.DefineComponent<vue.ExtractPropTypes<{
233
+ config: {
234
+ type: PropType<OpenPolicyConfig | CookiePolicyConfig>;
235
+ required: false;
236
+ };
237
+ components: {
238
+ type: PropType<PolicyComponents>;
239
+ required: false;
240
+ };
241
+ style: {
242
+ type: PropType<CSSProperties>;
243
+ required: false;
244
+ };
245
+ }>, () => vue.VNode<vue.RendererNode, vue.RendererElement, {
246
+ [key: string]: any;
247
+ }> | null, {}, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, {}, string, vue.PublicProps, Readonly<vue.ExtractPropTypes<{
248
+ config: {
249
+ type: PropType<OpenPolicyConfig | CookiePolicyConfig>;
250
+ required: false;
251
+ };
252
+ components: {
253
+ type: PropType<PolicyComponents>;
254
+ required: false;
255
+ };
256
+ style: {
257
+ type: PropType<CSSProperties>;
258
+ required: false;
259
+ };
260
+ }>> & Readonly<{}>, {}, {}, {}, {}, string, vue.ComponentProvideOptions, true, {}, any>;
261
+ //#endregion
262
+ //#region src/components/defaults.d.ts
263
+ declare function DefaultHeading({
264
+ node
265
+ }: {
266
+ node: HeadingNode;
267
+ }): vue.VNode<vue.RendererNode, vue.RendererElement, {
268
+ [key: string]: any;
269
+ }>;
270
+ declare function DefaultText({
271
+ node
272
+ }: {
273
+ node: TextNode;
274
+ }): string;
275
+ declare function DefaultBold({
276
+ node
277
+ }: {
278
+ node: BoldNode;
279
+ }): vue.VNode<vue.RendererNode, vue.RendererElement, {
280
+ [key: string]: any;
281
+ }>;
282
+ declare function DefaultLink({
283
+ node
284
+ }: {
285
+ node: LinkNode;
286
+ }): vue.VNode<vue.RendererNode, vue.RendererElement, {
287
+ [key: string]: any;
288
+ }>;
289
+ declare function DefaultSection({
290
+ section,
291
+ children
292
+ }: {
293
+ section: DocumentSection;
294
+ children?: VNodeChild;
295
+ }): vue.VNode<vue.RendererNode, vue.RendererElement, {
296
+ [key: string]: any;
297
+ }>;
298
+ declare function DefaultParagraph({
299
+ children
300
+ }: {
301
+ node: ParagraphNode;
302
+ children?: VNodeChild;
303
+ }): vue.VNode<vue.RendererNode, vue.RendererElement, {
304
+ [key: string]: any;
305
+ }>;
306
+ declare function DefaultList({
307
+ node,
308
+ children
309
+ }: {
310
+ node: ListNode;
311
+ children?: VNodeChild;
312
+ }): vue.VNode<vue.RendererNode, vue.RendererElement, {
313
+ [key: string]: any;
314
+ }>;
315
+ declare function renderNode(node: Node, components: PolicyComponents, key?: number): VNodeChild;
316
+ //#endregion
317
+ //#region src/components/PrivacyPolicy.d.ts
318
+ declare const PrivacyPolicy: vue.DefineComponent<vue.ExtractPropTypes<{
319
+ config: {
320
+ type: PropType<OpenPolicyConfig | PrivacyPolicyConfig>;
321
+ required: false;
322
+ };
323
+ components: {
324
+ type: PropType<PolicyComponents>;
325
+ required: false;
326
+ };
327
+ style: {
328
+ type: PropType<CSSProperties>;
329
+ required: false;
330
+ };
331
+ }>, () => vue.VNode<vue.RendererNode, vue.RendererElement, {
332
+ [key: string]: any;
333
+ }> | null, {}, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, {}, string, vue.PublicProps, Readonly<vue.ExtractPropTypes<{
334
+ config: {
335
+ type: PropType<OpenPolicyConfig | PrivacyPolicyConfig>;
336
+ required: false;
337
+ };
338
+ components: {
339
+ type: PropType<PolicyComponents>;
340
+ required: false;
341
+ };
342
+ style: {
343
+ type: PropType<CSSProperties>;
344
+ required: false;
345
+ };
346
+ }>> & Readonly<{}>, {}, {}, {}, {}, string, vue.ComponentProvideOptions, true, {}, any>;
347
+ //#endregion
348
+ //#region src/components/TermsOfService.d.ts
349
+ declare const TermsOfService: vue.DefineComponent<vue.ExtractPropTypes<{
350
+ config: {
351
+ type: PropType<OpenPolicyConfig | TermsOfServiceConfig>;
352
+ required: false;
353
+ };
354
+ components: {
355
+ type: PropType<PolicyComponents>;
356
+ required: false;
357
+ };
358
+ style: {
359
+ type: PropType<CSSProperties>;
360
+ required: false;
361
+ };
362
+ }>, () => vue.VNode<vue.RendererNode, vue.RendererElement, {
363
+ [key: string]: any;
364
+ }> | null, {}, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, {}, string, vue.PublicProps, Readonly<vue.ExtractPropTypes<{
365
+ config: {
366
+ type: PropType<OpenPolicyConfig | TermsOfServiceConfig>;
367
+ required: false;
368
+ };
369
+ components: {
370
+ type: PropType<PolicyComponents>;
371
+ required: false;
372
+ };
373
+ style: {
374
+ type: PropType<CSSProperties>;
375
+ required: false;
376
+ };
377
+ }>> & Readonly<{}>, {}, {}, {}, {}, string, vue.ComponentProvideOptions, true, {}, any>;
378
+ //#endregion
379
+ //#region src/context.d.ts
380
+ declare const OpenPolicyProvider: vue.DefineComponent<vue.ExtractPropTypes<{
381
+ config: {
382
+ type: PropType<OpenPolicyConfig>;
383
+ required: true;
384
+ };
385
+ }>, () => vue.VNode<vue.RendererNode, vue.RendererElement, {
386
+ [key: string]: any;
387
+ }>, {}, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, {}, string, vue.PublicProps, Readonly<vue.ExtractPropTypes<{
388
+ config: {
389
+ type: PropType<OpenPolicyConfig>;
390
+ required: true;
391
+ };
392
+ }>> & Readonly<{}>, {}, {}, {}, {}, string, vue.ComponentProvideOptions, true, {}, any>;
393
+ //#endregion
394
+ //#region src/render.d.ts
395
+ declare function renderDocument(doc: Document, components?: PolicyComponents): VNodeChild;
396
+ //#endregion
397
+ //#region src/styles.d.ts
398
+ declare const defaultStyles = "\n.op-policy {\n --op-font-family: system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif;\n --op-font-size-body: 1rem;\n --op-font-size-heading: 1.125rem;\n --op-font-weight-heading: 600;\n --op-line-height: 1.7;\n --op-body-color: #374151;\n --op-heading-color: #111827;\n --op-link-color: #2563eb;\n --op-link-color-hover: #1d4ed8;\n --op-section-gap: 2rem;\n --op-border-color: #e5e7eb;\n --op-border-radius: 0.375rem;\n\n font-family: var(--op-font-family);\n font-size: var(--op-font-size-body);\n color: var(--op-body-color);\n line-height: var(--op-line-height);\n max-width: 65ch;\n}\n\n.op-section {\n margin-bottom: var(--op-section-gap);\n padding-bottom: var(--op-section-gap);\n border-bottom: 1px solid var(--op-border-color);\n}\n.op-section:last-child {\n border-bottom: none;\n margin-bottom: 0;\n padding-bottom: 0;\n}\n\n.op-heading {\n font-size: var(--op-font-size-heading);\n font-weight: var(--op-font-weight-heading);\n color: var(--op-heading-color);\n line-height: 1.3;\n margin: 0 0 0.75rem;\n}\n\n.op-paragraph {\n margin: 0 0 0.75rem;\n}\n.op-paragraph:last-child { margin-bottom: 0; }\n\n.op-list {\n margin: 0 0 0.75rem;\n padding-left: 1.5rem;\n list-style-type: disc;\n}\n.op-list:last-child { margin-bottom: 0; }\n.op-list .op-list {\n margin-top: 0.375rem;\n margin-bottom: 0;\n list-style-type: circle;\n}\n\n.op-list-item {\n margin-bottom: 0.375rem;\n}\n.op-list-item:last-child { margin-bottom: 0; }\n\n.op-bold {\n font-weight: 600;\n color: var(--op-heading-color);\n}\n\n.op-link {\n color: var(--op-link-color);\n text-decoration: underline;\n text-underline-offset: 2px;\n transition: color 0.15s ease;\n}\n.op-link:hover { color: var(--op-link-color-hover); }\n";
399
+ //#endregion
400
+ export { CookiePolicy, DefaultBold, DefaultHeading, DefaultLink, DefaultList, DefaultParagraph, DefaultSection, DefaultText, OpenPolicyProvider as OpenPolicy, type PolicyComponents, type PolicyTheme, PrivacyPolicy, TermsOfService, defaultStyles, renderDocument, renderNode };
401
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","names":["OutputFormat","CompileOptions","formats","Jurisdiction","CompanyConfig","name","legalName","address","contact","PrivacyPolicyConfig","Record","effectiveDate","company","dataCollected","legalBasis","retention","cookies","essential","analytics","marketing","thirdParties","purpose","userRights","jurisdictions","children","underAge","noticeUrl","DisputeResolutionMethod","TermsOfServiceConfig","acceptance","methods","eligibility","minimumAge","jurisdictionRestrictions","accounts","registrationRequired","userResponsibleForCredentials","companyCanTerminate","prohibitedUses","userContent","usersOwnContent","licenseGrantedToCompany","licenseDescription","companyCanRemoveContent","intellectualProperty","companyOwnsService","usersMayNotCopy","payments","hasPaidFeatures","refundPolicy","priceChangesNotice","availability","noUptimeGuarantee","maintenanceWindows","termination","userCanTerminate","effectOfTermination","disclaimers","serviceProvidedAsIs","noWarranties","limitationOfLiability","excludesIndirectDamages","liabilityCap","indemnification","userIndemnifiesCompany","scope","thirdPartyServices","disputeResolution","method","venue","classActionWaiver","governingLaw","jurisdiction","changesPolicy","noticeMethod","noticePeriodDays","privacyPolicyUrl","CookiePolicyConfig","functional","policyUrl","trackingTechnologies","consentMechanism","hasBanner","hasPreferencePanel","canWithdraw","PolicyInput","type","OpenPolicyConfig","Omit","privacy","terms","cookie","isOpenPolicyConfig","value","ValidationIssue","level","message","NodeContext","reason","TextNode","context","BoldNode","ItalicNode","LinkNode","href","InlineNode","HeadingNode","ParagraphNode","ListItemNode","ListNode","ordered","items","ContentNode","DocumentSection","id","content","PolicyType","Document","policyType","sections","Node","heading","levelOrContext","text","bold","italic","link","p","li","ul","ol","section","compile","input","validatePrivacyPolicy","config","validateCookiePolicy","validateTermsOfService","expandOpenPolicyConfig"],"sources":["../../core/dist/index.d.ts","../src/types.ts","../src/components/CookiePolicy.ts","../src/components/defaults.ts","../src/components/PrivacyPolicy.ts","../src/components/TermsOfService.ts","../src/context.ts","../src/render.ts","../src/styles.ts"],"mappings":"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"}