@teleporthq/teleport-shared 0.44.0 → 0.44.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/__tests__/utils/email-sender.ts +123 -0
  2. package/__tests__/utils/table-access-page-reads.ts +183 -0
  3. package/dist/cjs/index.d.ts +2 -1
  4. package/dist/cjs/index.d.ts.map +1 -1
  5. package/dist/cjs/index.js +3 -1
  6. package/dist/cjs/index.js.map +1 -1
  7. package/dist/cjs/page-transition/view-transition-css.d.ts +4 -0
  8. package/dist/cjs/page-transition/view-transition-css.d.ts.map +1 -1
  9. package/dist/cjs/page-transition/view-transition-css.js +17 -10
  10. package/dist/cjs/page-transition/view-transition-css.js.map +1 -1
  11. package/dist/cjs/tsconfig.tsbuildinfo +1 -1
  12. package/dist/cjs/utils/email-sender.d.ts +43 -0
  13. package/dist/cjs/utils/email-sender.d.ts.map +1 -0
  14. package/dist/cjs/utils/email-sender.js +36 -0
  15. package/dist/cjs/utils/email-sender.js.map +1 -0
  16. package/dist/cjs/utils/table-access.d.ts +32 -0
  17. package/dist/cjs/utils/table-access.d.ts.map +1 -1
  18. package/dist/cjs/utils/table-access.js +118 -2
  19. package/dist/cjs/utils/table-access.js.map +1 -1
  20. package/dist/esm/index.d.ts +2 -1
  21. package/dist/esm/index.d.ts.map +1 -1
  22. package/dist/esm/index.js +2 -1
  23. package/dist/esm/index.js.map +1 -1
  24. package/dist/esm/page-transition/view-transition-css.d.ts +4 -0
  25. package/dist/esm/page-transition/view-transition-css.d.ts.map +1 -1
  26. package/dist/esm/page-transition/view-transition-css.js +15 -9
  27. package/dist/esm/page-transition/view-transition-css.js.map +1 -1
  28. package/dist/esm/tsconfig.tsbuildinfo +1 -1
  29. package/dist/esm/utils/email-sender.d.ts +43 -0
  30. package/dist/esm/utils/email-sender.d.ts.map +1 -0
  31. package/dist/esm/utils/email-sender.js +32 -0
  32. package/dist/esm/utils/email-sender.js.map +1 -0
  33. package/dist/esm/utils/table-access.d.ts +32 -0
  34. package/dist/esm/utils/table-access.d.ts.map +1 -1
  35. package/dist/esm/utils/table-access.js +115 -1
  36. package/dist/esm/utils/table-access.js.map +1 -1
  37. package/package.json +2 -2
  38. package/src/index.ts +2 -0
  39. package/src/page-transition/view-transition-css.ts +27 -16
  40. package/src/utils/email-sender.ts +74 -0
  41. package/src/utils/table-access.ts +148 -1
@@ -0,0 +1,123 @@
1
+ import {
2
+ EmailSenderInput,
3
+ EmailSenderParts,
4
+ generateEmailSenderHelperCode,
5
+ } from '../../src/utils/email-sender'
6
+
7
+ /**
8
+ * The one rule every generated email path names its sender with. Executed, not
9
+ * grepped: the helper ships as source text whose regexes are written with
10
+ * doubled backslashes inside a template literal, so only running it proves
11
+ * them.
12
+ */
13
+
14
+ const emailSender = new Function(`${generateEmailSenderHelperCode()}\nreturn __emailSender;`)() as (
15
+ sender: EmailSenderInput
16
+ ) => EmailSenderParts
17
+
18
+ const FROM = 'shop@lumen.test'
19
+
20
+ const ROWS: Array<[string, EmailSenderInput, EmailSenderParts]> = [
21
+ [
22
+ 'a plain name',
23
+ { from: FROM, name: 'Lumen Pottery' },
24
+ { email: FROM, name: 'Lumen Pottery', header: 'Lumen Pottery <shop@lumen.test>' },
25
+ ],
26
+ ['no name', { from: FROM }, { email: FROM, name: '', header: FROM }],
27
+ ['a blank name', { from: FROM, name: ' ' }, { email: FROM, name: '', header: FROM }],
28
+ [
29
+ 'a name with a comma and a quote',
30
+ { from: FROM, name: 'Smith, Jones & "Co"' },
31
+ {
32
+ email: FROM,
33
+ name: 'Smith, Jones & "Co"',
34
+ header: '"Smith, Jones & \\"Co\\"" <shop@lumen.test>',
35
+ },
36
+ ],
37
+ [
38
+ 'a name with a backslash',
39
+ { from: FROM, name: 'Back\\slash' },
40
+ { email: FROM, name: 'Back\\slash', header: '"Back\\\\slash" <shop@lumen.test>' },
41
+ ],
42
+ [
43
+ 'a name ending in a full stop',
44
+ { from: FROM, name: 'Lumen Pottery Ltd.' },
45
+ { email: FROM, name: 'Lumen Pottery Ltd.', header: '"Lumen Pottery Ltd." <shop@lumen.test>' },
46
+ ],
47
+ [
48
+ 'a from that already names its sender keeps that name',
49
+ { from: 'Lumen Pottery <shop@lumen.test>', name: 'Another Name' },
50
+ { email: FROM, name: 'Lumen Pottery', header: 'Lumen Pottery <shop@lumen.test>' },
51
+ ],
52
+ [
53
+ 'an already quoted from is left as it is',
54
+ { from: '"Smith, Jones" <shop@lumen.test>' },
55
+ { email: FROM, name: 'Smith, Jones', header: '"Smith, Jones" <shop@lumen.test>' },
56
+ ],
57
+ [
58
+ 'a from whose own name needs quotes gets them',
59
+ { from: 'Smith, Jones <shop@lumen.test>' },
60
+ { email: FROM, name: 'Smith, Jones', header: '"Smith, Jones" <shop@lumen.test>' },
61
+ ],
62
+ [
63
+ 'a bracketed address with no name of its own takes the stored name',
64
+ { from: '<shop@lumen.test>', name: 'Lumen Pottery' },
65
+ { email: FROM, name: 'Lumen Pottery', header: 'Lumen Pottery <shop@lumen.test>' },
66
+ ],
67
+ [
68
+ 'a line break in the name becomes a space',
69
+ { from: FROM, name: 'Lumen\r\nBcc: someone@else.test' },
70
+ {
71
+ email: FROM,
72
+ name: 'Lumen Bcc: someone@else.test',
73
+ header: '"Lumen Bcc: someone@else.test" <shop@lumen.test>',
74
+ },
75
+ ],
76
+ [
77
+ 'a name typed with its own quotes is not quoted twice',
78
+ { from: FROM, name: '"Lumen Pottery"' },
79
+ { email: FROM, name: 'Lumen Pottery', header: 'Lumen Pottery <shop@lumen.test>' },
80
+ ],
81
+ [
82
+ 'a non-ASCII name needs no quotes',
83
+ { from: FROM, name: 'Café Lumière' },
84
+ { email: FROM, name: 'Café Lumière', header: 'Café Lumière <shop@lumen.test>' },
85
+ ],
86
+ [
87
+ 'surrounding whitespace is trimmed',
88
+ { from: ' shop@lumen.test ', name: ' Lumen ' },
89
+ { email: FROM, name: 'Lumen', header: 'Lumen <shop@lumen.test>' },
90
+ ],
91
+ [
92
+ 'an address it cannot read is never wrapped',
93
+ { from: 'shop@lumen.test>', name: 'Lumen' },
94
+ { email: 'shop@lumen.test>', name: '', header: 'shop@lumen.test>' },
95
+ ],
96
+ [
97
+ 'a name that is not text is ignored',
98
+ { from: FROM, name: { first: 'Lumen' } },
99
+ { email: FROM, name: '', header: FROM },
100
+ ],
101
+ ['no address', { name: 'Lumen' }, { email: '', name: '', header: '' }],
102
+ ]
103
+
104
+ describe('__emailSender', () => {
105
+ it.each(ROWS)('%s', (_label, input, expected) => {
106
+ expect(emailSender(input)).toEqual(expected)
107
+ })
108
+
109
+ it('quotes a name holding any RFC 5322 special, escaping only " and \\', () => {
110
+ for (const special of ['(', ')', '<', '>', '[', ']', ':', ';', '@', '\\', ',', '.', '"']) {
111
+ const escaped = special === '"' || special === '\\' ? '\\' + special : special
112
+ expect(emailSender({ from: FROM, name: `A${special}B` }).header).toBe(
113
+ `"A${escaped}B" <shop@lumen.test>`
114
+ )
115
+ }
116
+ })
117
+
118
+ // Appended to node handlers whose minified entry point is found by arity.
119
+ it('declares exactly one parameter, and no two-parameter function', () => {
120
+ expect(emailSender.length).toBe(1)
121
+ expect(generateEmailSenderHelperCode()).not.toMatch(/function\s*[\w$]*\s*\([^)]*,/)
122
+ })
123
+ })
@@ -0,0 +1,183 @@
1
+ /* tslint:disable:function-constructor */
2
+ import type { UIDLAuthentication } from '@teleporthq/teleport-types'
3
+ import {
4
+ generateTableAccessHelperCode,
5
+ pageDataReadsNoRowOf,
6
+ pageReadsAsStore,
7
+ } from '../../src/utils/table-access'
8
+
9
+ /**
10
+ * A page's own data — what its getStaticProps / getServerSideProps read to
11
+ * render it — reaches whoever opens the page, and anyone who asks
12
+ * `/_next/data` for it. So it is read as a visitor is served the store's
13
+ * tables, except on an admin page nobody but the store's trusted readers may
14
+ * open.
15
+ */
16
+
17
+ const authWith = (
18
+ pageProtection: UIDLAuthentication['pageProtection'],
19
+ folderProtection: UIDLAuthentication['folderProtection'] = {}
20
+ ): UIDLAuthentication => ({
21
+ enabled: true,
22
+ dataSourceId: 'ds-1',
23
+ dataSourceType: 'teleport',
24
+ passwordAuthEnabled: true,
25
+ providers: [],
26
+ roles: ['admin', 'staff', 'user'],
27
+ tables: {},
28
+ pageProtection,
29
+ folderProtection,
30
+ authPages: {},
31
+ callbackBaseUrl: '/api/auth/callback',
32
+ envKeys: {},
33
+ customUserProperties: [],
34
+ })
35
+
36
+ const page = (route: string, allowedRoles: string[], extra: Record<string, unknown> = {}) => ({
37
+ requiresAuth: true,
38
+ allowedRoles,
39
+ pageName: route.split('/').pop() || 'home',
40
+ route,
41
+ ...extra,
42
+ })
43
+
44
+ // The store template's shape: an admin panel folder admitting admins, a staff
45
+ // screen, members-only pages and a row-owned order page.
46
+ const STORE_AUTH = authWith(
47
+ {
48
+ 'p-users': page('/admin/users', ['admin']),
49
+ 'p-orders-update': page('/admin/orders/update', ['admin'], {
50
+ routePattern: '/admin/orders/update/[id]',
51
+ }),
52
+ 'p-dashboard': page('/admin/dashboard', ['admin', 'staff']),
53
+ 'p-profile': page('/profile', [], { routePattern: '/profile/[id]' }),
54
+ 'p-order': page('/orders', [], {
55
+ routePattern: '/orders/[order_number]',
56
+ rowOwnerColumn: 'user_id',
57
+ }),
58
+ },
59
+ {
60
+ 'f-admin': {
61
+ requiresAuth: true,
62
+ allowedRoles: ['admin'],
63
+ folderName: 'admin-panel',
64
+ parentId: 'pages',
65
+ children: { 'p-users': 'page', 'p-orders-update': 'page', 'p-dashboard': 'page' },
66
+ },
67
+ } as never
68
+ )
69
+
70
+ describe('pageReadsAsStore', () => {
71
+ it('reads an admin page only trusted readers open as the store', () => {
72
+ expect(pageReadsAsStore({ pageId: 'p-users' }, STORE_AUTH)).toBe(true)
73
+ expect(pageReadsAsStore({ pageId: 'p-orders-update' }, STORE_AUTH)).toBe(true)
74
+ // An admin page without protection of its own falls under /admin.
75
+ expect(pageReadsAsStore({ route: '/admin/new-report' }, STORE_AUTH)).toBe(true)
76
+ })
77
+
78
+ it('reads every other page as a visitor', () => {
79
+ // A staff screen: staff are not the store's trusted readers.
80
+ expect(pageReadsAsStore({ pageId: 'p-dashboard' }, STORE_AUTH)).toBe(false)
81
+ // Members-only, and row-owned: whoever signs in gets the page data.
82
+ expect(pageReadsAsStore({ pageId: 'p-profile' }, STORE_AUTH)).toBe(false)
83
+ expect(pageReadsAsStore({ pageId: 'p-order' }, STORE_AUTH)).toBe(false)
84
+ // Public pages.
85
+ expect(pageReadsAsStore({ route: '/' }, STORE_AUTH)).toBe(false)
86
+ expect(pageReadsAsStore({ route: '/products' }, STORE_AUTH)).toBe(false)
87
+ expect(pageReadsAsStore({ route: '/administration' }, STORE_AUTH)).toBe(false)
88
+ })
89
+
90
+ it('reads an admin page as a visitor when nothing gates it, or nobody is a trusted reader', () => {
91
+ expect(pageReadsAsStore({ route: '/admin/users' }, undefined)).toBe(false)
92
+ expect(pageReadsAsStore({ route: '/admin/users' }, authWith({}))).toBe(false)
93
+ // Signed-in members of any role may open it: none of them is trusted.
94
+ const anyMember = authWith({ 'p-users': page('/admin/users', []) })
95
+ expect(pageReadsAsStore({ pageId: 'p-users' }, anyMember)).toBe(false)
96
+ // A page left public beside a protected panel answers to its own entry.
97
+ const publicReport = authWith(
98
+ {
99
+ 'p-users': page('/admin/users', ['admin']),
100
+ 'p-report': { ...page('/admin/report', []), requiresAuth: false },
101
+ },
102
+ STORE_AUTH.folderProtection
103
+ )
104
+ expect(pageReadsAsStore({ pageId: 'p-report' }, publicReport)).toBe(false)
105
+ })
106
+ })
107
+
108
+ describe('pageDataReadsNoRowOf', () => {
109
+ it('names the protected and the feed tables, however spelled', () => {
110
+ expect(pageDataReadsNoRowOf('public.teleport_orders')).toBe(true)
111
+ expect(pageDataReadsNoRowOf('"teleport_gift_cards"')).toBe(true)
112
+ expect(pageDataReadsNoRowOf('teleport_products')).toBe(false)
113
+ expect(pageDataReadsNoRowOf('teleport_blog_posts')).toBe(false)
114
+ })
115
+
116
+ it('leaves out the members: a page reads their public profiles', () => {
117
+ expect(pageDataReadsNoRowOf('users')).toBe(false)
118
+ expect(pageDataReadsNoRowOf('public."users"')).toBe(false)
119
+ })
120
+ })
121
+
122
+ describe('the emitted guard, reading a page for a visitor', () => {
123
+ const bootGuard = () => {
124
+ const sessionReads: unknown[] = []
125
+ const guardRead = new Function(
126
+ 'process',
127
+ '__tqSessionToken',
128
+ `${generateTableAccessHelperCode({ trustedReaderRoles: ['admin'] })}
129
+ return __taGuardRead`
130
+ )(
131
+ { env: { NEXTAUTH_SECRET: 'server-secret' } },
132
+ async (req: { headers?: { cookie?: string } }) => {
133
+ sessionReads.push(req)
134
+ // A browser's session cookie, here simply the role it signs in.
135
+ const role = req?.headers?.cookie
136
+ return role ? { sub: 'u1', role } : null
137
+ }
138
+ ) as (req: unknown, tableName: string, rawQuery: string | null) => Promise<unknown>
139
+ return { guardRead, sessionReads }
140
+ }
141
+ const pageRead = { query: {}, method: 'GET', headers: {}, __tqVisitorView: true }
142
+
143
+ it("runs the page's own statement, which a browser may not send", async () => {
144
+ const { guardRead } = bootGuard()
145
+ const statement = 'SELECT * FROM category_tiles'
146
+ expect(await guardRead(pageRead, 'category_tiles', statement)).toBeNull()
147
+ expect(await guardRead({ headers: {} }, 'category_tiles', statement)).toMatchObject({
148
+ status: 403,
149
+ })
150
+ })
151
+
152
+ it("lets it read the members' public profiles, through the structured read only", async () => {
153
+ const { guardRead, sessionReads } = bootGuard()
154
+ expect(await guardRead(pageRead, 'users', null)).toBeNull()
155
+ expect(await guardRead(pageRead, 'public.users', null)).toBeNull()
156
+ // A statement cannot be projected onto the public profile.
157
+ expect(await guardRead(pageRead, 'users', 'SELECT email FROM users')).toEqual({
158
+ status: 401,
159
+ message: 'Unauthenticated',
160
+ })
161
+ expect(sessionReads).toEqual([])
162
+ // A browser still reads the table only as a trusted role.
163
+ expect(await guardRead({ headers: {} }, 'users', null)).toMatchObject({ status: 401 })
164
+ expect(await guardRead({ headers: { cookie: 'user' } }, 'users', null)).toMatchObject({
165
+ status: 403,
166
+ })
167
+ expect(await guardRead({ headers: { cookie: 'admin' } }, 'users', null)).toBeNull()
168
+ })
169
+
170
+ it('refuses it every other protected table, as nobody signed in', async () => {
171
+ const { guardRead, sessionReads } = bootGuard()
172
+ expect(await guardRead(pageRead, 'teleport_orders', null)).toEqual({
173
+ status: 401,
174
+ message: 'Unauthenticated',
175
+ })
176
+ expect(
177
+ await guardRead(pageRead, 'teleport_products', 'SELECT * FROM teleport_products, users')
178
+ ).toEqual({ status: 401, message: 'Unauthenticated' })
179
+ expect(sessionReads).toEqual([])
180
+ // The store's own server code reads them.
181
+ expect(await guardRead({ __tqServerCall: true }, 'teleport_orders', null)).toBeNull()
182
+ })
183
+ })
@@ -25,6 +25,7 @@ import * as SessionCookieResolver from './utils/session-cookie-resolver';
25
25
  import * as SubscriptionAccess from './utils/subscription-access';
26
26
  import * as FontPreconnect from './utils/font-preconnect';
27
27
  import * as EmailDate from './utils/email-date';
28
+ import * as EmailSender from './utils/email-sender';
28
29
  import * as RichTextEmbeds from './utils/rich-text-embeds';
29
30
  import * as RichTextEmbedsCodegen from './utils/rich-text-embeds-codegen';
30
31
  import * as RichTextContent from './utils/rich-text-content';
@@ -38,5 +39,5 @@ import * as PageTransition from './page-transition';
38
39
  import * as StateBindings from './state-bindings';
39
40
  import * as WebPush from './utils/web-push';
40
41
  import * as InlineScriptErrorGuard from './utils/inline-script-error-guard';
41
- export { Constants, StringUtils, UIDLUtils, GenericUtils, LocalImports, JSIdentifiers, ASTScope, ASTStatementOrder, ASTEffectCleanup, RoutePaths, LayoutTopology, HtmlContentModel, StyleDeclarations, StorefrontTax, ProductDiscounts, ProductRatings, RegionalPricing, DiscountEngine, ProductOptions, CartLinePricing, CartCurrency, TableAccess, ContentTables, SessionCookieResolver, SubscriptionAccess, FontPreconnect, EmailDate, RichTextEmbeds, RichTextEmbedsCodegen, RichTextContent, RichTextContentCodegen, DataCache, PageRevalidate, PageArrival, ScrollSceneRuntime, MotionRuntime, PageTransition, StateBindings, WebPush, InlineScriptErrorGuard, };
42
+ export { Constants, StringUtils, UIDLUtils, GenericUtils, LocalImports, JSIdentifiers, ASTScope, ASTStatementOrder, ASTEffectCleanup, RoutePaths, LayoutTopology, HtmlContentModel, StyleDeclarations, StorefrontTax, ProductDiscounts, ProductRatings, RegionalPricing, DiscountEngine, ProductOptions, CartLinePricing, CartCurrency, TableAccess, ContentTables, SessionCookieResolver, SubscriptionAccess, FontPreconnect, EmailDate, EmailSender, RichTextEmbeds, RichTextEmbedsCodegen, RichTextContent, RichTextContentCodegen, DataCache, PageRevalidate, PageArrival, ScrollSceneRuntime, MotionRuntime, PageTransition, StateBindings, WebPush, InlineScriptErrorGuard, };
42
43
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,SAAS,MAAM,aAAa,CAAA;AACxC,OAAO,KAAK,WAAW,MAAM,sBAAsB,CAAA;AACnD,OAAO,KAAK,SAAS,MAAM,oBAAoB,CAAA;AAC/C,OAAO,KAAK,YAAY,MAAM,iBAAiB,CAAA;AAC/C,OAAO,KAAK,YAAY,MAAM,uBAAuB,CAAA;AACrD,OAAO,KAAK,aAAa,MAAM,wBAAwB,CAAA;AACvD,OAAO,KAAK,QAAQ,MAAM,mBAAmB,CAAA;AAC7C,OAAO,KAAK,iBAAiB,MAAM,6BAA6B,CAAA;AAChE,OAAO,KAAK,gBAAgB,MAAM,4BAA4B,CAAA;AAC9D,OAAO,KAAK,UAAU,MAAM,qBAAqB,CAAA;AACjD,OAAO,KAAK,cAAc,MAAM,yBAAyB,CAAA;AACzD,OAAO,KAAK,gBAAgB,MAAM,4BAA4B,CAAA;AAC9D,OAAO,KAAK,iBAAiB,MAAM,4BAA4B,CAAA;AAC/D,OAAO,KAAK,aAAa,MAAM,wBAAwB,CAAA;AACvD,OAAO,KAAK,gBAAgB,MAAM,2BAA2B,CAAA;AAC7D,OAAO,KAAK,cAAc,MAAM,yBAAyB,CAAA;AACzD,OAAO,KAAK,eAAe,MAAM,0BAA0B,CAAA;AAC3D,OAAO,KAAK,cAAc,MAAM,yBAAyB,CAAA;AACzD,OAAO,KAAK,cAAc,MAAM,yBAAyB,CAAA;AACzD,OAAO,KAAK,eAAe,MAAM,2BAA2B,CAAA;AAC5D,OAAO,KAAK,YAAY,MAAM,uBAAuB,CAAA;AACrD,OAAO,KAAK,WAAW,MAAM,sBAAsB,CAAA;AACnD,OAAO,KAAK,aAAa,MAAM,wBAAwB,CAAA;AACvD,OAAO,KAAK,qBAAqB,MAAM,iCAAiC,CAAA;AACxE,OAAO,KAAK,kBAAkB,MAAM,6BAA6B,CAAA;AACjE,OAAO,KAAK,cAAc,MAAM,yBAAyB,CAAA;AACzD,OAAO,KAAK,SAAS,MAAM,oBAAoB,CAAA;AAC/C,OAAO,KAAK,cAAc,MAAM,0BAA0B,CAAA;AAC1D,OAAO,KAAK,qBAAqB,MAAM,kCAAkC,CAAA;AACzE,OAAO,KAAK,eAAe,MAAM,2BAA2B,CAAA;AAC5D,OAAO,KAAK,sBAAsB,MAAM,mCAAmC,CAAA;AAC3E,OAAO,KAAK,SAAS,MAAM,SAAS,CAAA;AACpC,OAAO,KAAK,cAAc,MAAM,mBAAmB,CAAA;AACnD,OAAO,KAAK,WAAW,MAAM,gBAAgB,CAAA;AAC7C,OAAO,KAAK,kBAAkB,MAAM,gBAAgB,CAAA;AACpD,OAAO,KAAK,aAAa,MAAM,kBAAkB,CAAA;AACjD,OAAO,KAAK,cAAc,MAAM,mBAAmB,CAAA;AACnD,OAAO,KAAK,aAAa,MAAM,kBAAkB,CAAA;AACjD,OAAO,KAAK,OAAO,MAAM,kBAAkB,CAAA;AAC3C,OAAO,KAAK,sBAAsB,MAAM,mCAAmC,CAAA;AAE3E,OAAO,EACL,SAAS,EACT,WAAW,EACX,SAAS,EACT,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,QAAQ,EACR,iBAAiB,EACjB,gBAAgB,EAChB,UAAU,EACV,cAAc,EACd,gBAAgB,EAChB,iBAAiB,EACjB,aAAa,EACb,gBAAgB,EAChB,cAAc,EACd,eAAe,EACf,cAAc,EACd,cAAc,EACd,eAAe,EACf,YAAY,EACZ,WAAW,EACX,aAAa,EACb,qBAAqB,EACrB,kBAAkB,EAClB,cAAc,EACd,SAAS,EACT,cAAc,EACd,qBAAqB,EACrB,eAAe,EACf,sBAAsB,EACtB,SAAS,EACT,cAAc,EACd,WAAW,EACX,kBAAkB,EAClB,aAAa,EACb,cAAc,EACd,aAAa,EACb,OAAO,EACP,sBAAsB,GACvB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
package/dist/cjs/index.js CHANGED
@@ -23,7 +23,7 @@ var __importStar = (this && this.__importStar) || function (mod) {
23
23
  return result;
24
24
  };
25
25
  Object.defineProperty(exports, "__esModule", { value: true });
26
- exports.InlineScriptErrorGuard = exports.WebPush = exports.StateBindings = exports.PageTransition = exports.MotionRuntime = exports.ScrollSceneRuntime = exports.PageArrival = exports.PageRevalidate = exports.DataCache = exports.RichTextContentCodegen = exports.RichTextContent = exports.RichTextEmbedsCodegen = exports.RichTextEmbeds = exports.EmailDate = exports.FontPreconnect = exports.SubscriptionAccess = exports.SessionCookieResolver = exports.ContentTables = exports.TableAccess = exports.CartCurrency = exports.CartLinePricing = exports.ProductOptions = exports.DiscountEngine = exports.RegionalPricing = exports.ProductRatings = exports.ProductDiscounts = exports.StorefrontTax = exports.StyleDeclarations = exports.HtmlContentModel = exports.LayoutTopology = exports.RoutePaths = exports.ASTEffectCleanup = exports.ASTStatementOrder = exports.ASTScope = exports.JSIdentifiers = exports.LocalImports = exports.GenericUtils = exports.UIDLUtils = exports.StringUtils = exports.Constants = void 0;
26
+ exports.InlineScriptErrorGuard = exports.WebPush = exports.StateBindings = exports.PageTransition = exports.MotionRuntime = exports.ScrollSceneRuntime = exports.PageArrival = exports.PageRevalidate = exports.DataCache = exports.RichTextContentCodegen = exports.RichTextContent = exports.RichTextEmbedsCodegen = exports.RichTextEmbeds = exports.EmailSender = exports.EmailDate = exports.FontPreconnect = exports.SubscriptionAccess = exports.SessionCookieResolver = exports.ContentTables = exports.TableAccess = exports.CartCurrency = exports.CartLinePricing = exports.ProductOptions = exports.DiscountEngine = exports.RegionalPricing = exports.ProductRatings = exports.ProductDiscounts = exports.StorefrontTax = exports.StyleDeclarations = exports.HtmlContentModel = exports.LayoutTopology = exports.RoutePaths = exports.ASTEffectCleanup = exports.ASTStatementOrder = exports.ASTScope = exports.JSIdentifiers = exports.LocalImports = exports.GenericUtils = exports.UIDLUtils = exports.StringUtils = exports.Constants = void 0;
27
27
  var Constants = __importStar(require("./constants"));
28
28
  exports.Constants = Constants;
29
29
  var StringUtils = __importStar(require("./utils/string-utils"));
@@ -78,6 +78,8 @@ var FontPreconnect = __importStar(require("./utils/font-preconnect"));
78
78
  exports.FontPreconnect = FontPreconnect;
79
79
  var EmailDate = __importStar(require("./utils/email-date"));
80
80
  exports.EmailDate = EmailDate;
81
+ var EmailSender = __importStar(require("./utils/email-sender"));
82
+ exports.EmailSender = EmailSender;
81
83
  var RichTextEmbeds = __importStar(require("./utils/rich-text-embeds"));
82
84
  exports.RichTextEmbeds = RichTextEmbeds;
83
85
  var RichTextEmbedsCodegen = __importStar(require("./utils/rich-text-embeds-codegen"));
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,qDAAwC;AA0CtC,8BAAS;AAzCX,gEAAmD;AA0CjD,kCAAW;AAzCb,4DAA+C;AA0C7C,8BAAS;AAzCX,4DAA+C;AA0C7C,oCAAY;AAzCd,kEAAqD;AA0CnD,oCAAY;AAzCd,oEAAuD;AA0CrD,sCAAa;AAzCf,0DAA6C;AA0C3C,4BAAQ;AAzCV,6EAAgE;AA0C9D,8CAAiB;AAzCnB,2EAA8D;AA0C5D,4CAAgB;AAzClB,8DAAiD;AA0C/C,gCAAU;AAzCZ,sEAAyD;AA0CvD,wCAAc;AAzChB,2EAA8D;AA0C5D,4CAAgB;AAzClB,4EAA+D;AA0C7D,8CAAiB;AAzCnB,oEAAuD;AA0CrD,sCAAa;AAzCf,0EAA6D;AA0C3D,4CAAgB;AAzClB,sEAAyD;AA0CvD,wCAAc;AAzChB,wEAA2D;AA0CzD,0CAAe;AAzCjB,sEAAyD;AA0CvD,wCAAc;AAzChB,sEAAyD;AA0CvD,wCAAc;AAzChB,yEAA4D;AA0C1D,0CAAe;AAzCjB,kEAAqD;AA0CnD,oCAAY;AAzCd,gEAAmD;AA0CjD,kCAAW;AAzCb,oEAAuD;AA0CrD,sCAAa;AAzCf,qFAAwE;AA0CtE,sDAAqB;AAzCvB,8EAAiE;AA0C/D,gDAAkB;AAzCpB,sEAAyD;AA0CvD,wCAAc;AAzChB,4DAA+C;AA0C7C,8BAAS;AAzCX,uEAA0D;AA0CxD,wCAAc;AAzChB,sFAAyE;AA0CvE,sDAAqB;AAzCvB,yEAA4D;AA0C1D,0CAAe;AAzCjB,wFAA2E;AA0CzE,wDAAsB;AAzCxB,iDAAoC;AA0ClC,8BAAS;AAzCX,gEAAmD;AA0CjD,wCAAc;AAzChB,0DAA6C;AA0C3C,kCAAW;AAzCb,iEAAoD;AA0ClD,gDAAkB;AAzCpB,8DAAiD;AA0C/C,sCAAa;AAzCf,gEAAmD;AA0CjD,wCAAc;AAzChB,8DAAiD;AA0C/C,sCAAa;AAzCf,wDAA2C;AA0CzC,0BAAO;AAzCT,wFAA2E;AA0CzE,wDAAsB"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,qDAAwC;AA2CtC,8BAAS;AA1CX,gEAAmD;AA2CjD,kCAAW;AA1Cb,4DAA+C;AA2C7C,8BAAS;AA1CX,4DAA+C;AA2C7C,oCAAY;AA1Cd,kEAAqD;AA2CnD,oCAAY;AA1Cd,oEAAuD;AA2CrD,sCAAa;AA1Cf,0DAA6C;AA2C3C,4BAAQ;AA1CV,6EAAgE;AA2C9D,8CAAiB;AA1CnB,2EAA8D;AA2C5D,4CAAgB;AA1ClB,8DAAiD;AA2C/C,gCAAU;AA1CZ,sEAAyD;AA2CvD,wCAAc;AA1ChB,2EAA8D;AA2C5D,4CAAgB;AA1ClB,4EAA+D;AA2C7D,8CAAiB;AA1CnB,oEAAuD;AA2CrD,sCAAa;AA1Cf,0EAA6D;AA2C3D,4CAAgB;AA1ClB,sEAAyD;AA2CvD,wCAAc;AA1ChB,wEAA2D;AA2CzD,0CAAe;AA1CjB,sEAAyD;AA2CvD,wCAAc;AA1ChB,sEAAyD;AA2CvD,wCAAc;AA1ChB,yEAA4D;AA2C1D,0CAAe;AA1CjB,kEAAqD;AA2CnD,oCAAY;AA1Cd,gEAAmD;AA2CjD,kCAAW;AA1Cb,oEAAuD;AA2CrD,sCAAa;AA1Cf,qFAAwE;AA2CtE,sDAAqB;AA1CvB,8EAAiE;AA2C/D,gDAAkB;AA1CpB,sEAAyD;AA2CvD,wCAAc;AA1ChB,4DAA+C;AA2C7C,8BAAS;AA1CX,gEAAmD;AA2CjD,kCAAW;AA1Cb,uEAA0D;AA2CxD,wCAAc;AA1ChB,sFAAyE;AA2CvE,sDAAqB;AA1CvB,yEAA4D;AA2C1D,0CAAe;AA1CjB,wFAA2E;AA2CzE,wDAAsB;AA1CxB,iDAAoC;AA2ClC,8BAAS;AA1CX,gEAAmD;AA2CjD,wCAAc;AA1ChB,0DAA6C;AA2C3C,kCAAW;AA1Cb,iEAAoD;AA2ClD,gDAAkB;AA1CpB,8DAAiD;AA2C/C,sCAAa;AA1Cf,gEAAmD;AA2CjD,wCAAc;AA1ChB,8DAAiD;AA2C/C,sCAAa;AA1Cf,wDAA2C;AA2CzC,0BAAO;AA1CT,wFAA2E;AA2CzE,wDAAsB"}
@@ -2,6 +2,8 @@ import * as PageTransition from './variants';
2
2
  export declare const BACK_ATTR = "data-tq-nav";
3
3
  export declare const ORIGIN_X = "--tq-origin-x";
4
4
  export declare const ORIGIN_Y = "--tq-origin-y";
5
+ /** A dissolve (Fade, Crossfade): the arriving page fades in over the leaving one, which holds. */
6
+ export declare const pageTransitionDissolves: (preset: string) => boolean;
5
7
  /** The name of the one image that flies from the leaving page into the arriving page. */
6
8
  export declare const MORPH_NAME = "tq-morph";
7
9
  export interface ViewTransitionPlan {
@@ -14,6 +16,8 @@ export interface ViewTransitionPlan {
14
16
  flies: boolean;
15
17
  /** The arriving page is revealed over the leaving one, which holds (Circle, the Wipes). */
16
18
  revealsOver: boolean;
19
+ /** The arriving page comes in over the leaving one, which holds: a reveal, or a dissolve (Fade, Crossfade). */
20
+ arrivesOver: boolean;
17
21
  }
18
22
  export declare const viewTransitionPlan: (config: PageTransition.PageTransitionConfig, target?: {
19
23
  crossDocument: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"view-transition-css.d.ts","sourceRoot":"","sources":["../../../src/page-transition/view-transition-css.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,cAAc,MAAM,YAAY,CAAA;AAkC5C,eAAO,MAAM,SAAS,gBAAgB,CAAA;AACtC,eAAO,MAAM,QAAQ,kBAAkB,CAAA;AACvC,eAAO,MAAM,QAAQ,kBAAkB,CAAA;AAiFvC,yFAAyF;AACzF,eAAO,MAAM,UAAU,aAAa,CAAA;AAEpC,MAAM,WAAW,kBAAkB;IACjC,GAAG,EAAE,MAAM,CAAA;IACX,0GAA0G;IAC1G,cAAc,EAAE,OAAO,CAAA;IACvB,gGAAgG;IAChG,WAAW,EAAE,OAAO,CAAA;IACpB,oGAAoG;IACpG,KAAK,EAAE,OAAO,CAAA;IACd,2FAA2F;IAC3F,WAAW,EAAE,OAAO,CAAA;CACrB;AAED,eAAO,MAAM,kBAAkB,WACrB,eAAe,oBAAoB,WACnC;IAAE,aAAa,EAAE,OAAO,CAAA;CAAE,KACjC,kBAAkB,GAAG,IAqGvB,CAAA"}
1
+ {"version":3,"file":"view-transition-css.d.ts","sourceRoot":"","sources":["../../../src/page-transition/view-transition-css.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,cAAc,MAAM,YAAY,CAAA;AAqC5C,eAAO,MAAM,SAAS,gBAAgB,CAAA;AACtC,eAAO,MAAM,QAAQ,kBAAkB,CAAA;AACvC,eAAO,MAAM,QAAQ,kBAAkB,CAAA;AA+CvC,kGAAkG;AAClG,eAAO,MAAM,uBAAuB,WAAY,MAAM,KAAG,OACZ,CAAA;AAoC7C,yFAAyF;AACzF,eAAO,MAAM,UAAU,aAAa,CAAA;AAEpC,MAAM,WAAW,kBAAkB;IACjC,GAAG,EAAE,MAAM,CAAA;IACX,0GAA0G;IAC1G,cAAc,EAAE,OAAO,CAAA;IACvB,gGAAgG;IAChG,WAAW,EAAE,OAAO,CAAA;IACpB,oGAAoG;IACpG,KAAK,EAAE,OAAO,CAAA;IACd,2FAA2F;IAC3F,WAAW,EAAE,OAAO,CAAA;IACpB,+GAA+G;IAC/G,WAAW,EAAE,OAAO,CAAA;CACrB;AAED,eAAO,MAAM,kBAAkB,WACrB,eAAe,oBAAoB,WACnC;IAAE,aAAa,EAAE,OAAO,CAAA;CAAE,KACjC,kBAAkB,GAAG,IAuGvB,CAAA"}
@@ -43,7 +43,7 @@ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
43
43
  return to.concat(ar || Array.prototype.slice.call(from));
44
44
  };
45
45
  Object.defineProperty(exports, "__esModule", { value: true });
46
- exports.viewTransitionPlan = exports.MORPH_NAME = exports.ORIGIN_Y = exports.ORIGIN_X = exports.BACK_ATTR = void 0;
46
+ exports.viewTransitionPlan = exports.MORPH_NAME = exports.pageTransitionDissolves = exports.ORIGIN_Y = exports.ORIGIN_X = exports.BACK_ATTR = void 0;
47
47
  var PageTransition = __importStar(require("./variants"));
48
48
  exports.BACK_ATTR = 'data-tq-nav';
49
49
  exports.ORIGIN_X = '--tq-origin-x';
@@ -87,6 +87,11 @@ var COVER_CLIPS = {
87
87
  curtain: { covered: 'inset(0 50% 0 50%)', opening: 'inset(0 50% 0 50%)' },
88
88
  };
89
89
  var OPEN = 'inset(0 0 0 0)';
90
+ /** A dissolve (Fade, Crossfade): the arriving page fades in over the leaving one, which holds. */
91
+ var pageTransitionDissolves = function (preset) {
92
+ return preset === 'fade' || preset === 'crossfade';
93
+ };
94
+ exports.pageTransitionDissolves = pageTransitionDissolves;
90
95
  var animationsFor = function (preset, context, options, custom) {
91
96
  var cover = COVER_CLIPS[preset];
92
97
  if (cover) {
@@ -141,27 +146,28 @@ var viewTransitionPlan = function (config, target) {
141
146
  ? animationsFor(preset, { reverse: true, originX: '50%', originY: '50%' }, options, custom)
142
147
  : null;
143
148
  var timing = "".concat(duration, "s cubic-bezier(").concat(curve.join(', '), ")");
144
- // A reveal opens the arriving page over the leaving one: only the arrival
145
- // animates, from the start, and the leaving picture just stays.
149
+ // A reveal or a dissolve brings the arriving page in over the leaving one:
150
+ // only the arrival animates, from the start, and the leaving picture just stays.
146
151
  var revealsOver = !COVER_CLIPS[preset] && forward.arrive[1].clipPath !== undefined;
147
- var arriveTiming = revealsOver ? "".concat(timing, " both") : "".concat(timing, " ").concat(duration, "s both");
152
+ var arrivesOver = revealsOver || (0, exports.pageTransitionDissolves)(preset);
153
+ var arriveTiming = arrivesOver ? "".concat(timing, " both") : "".concat(timing, " ").concat(duration, "s both");
148
154
  var rules = __spreadArray(__spreadArray(__spreadArray(__spreadArray([], (target.crossDocument ? ['@view-transition {\n navigation: auto;\n}'] : []), true), [
149
155
  '::view-transition-old(root),\n::view-transition-new(root) {\n mix-blend-mode: normal;\n}',
150
- revealsOver
156
+ arrivesOver
151
157
  ? '::view-transition-old(root) {\n animation: none;\n}'
152
158
  : "::view-transition-old(root) {\n animation: tq-page-leave ".concat(timing, " both;\n}"),
153
159
  "::view-transition-new(root) {\n animation: tq-page-arrive ".concat(arriveTiming, ";\n}")
154
- ], false), (revealsOver ? [] : [keyframes('tq-page-leave', forward.leave[0], forward.leave[1])]), true), [
160
+ ], false), (arrivesOver ? [] : [keyframes('tq-page-leave', forward.leave[0], forward.leave[1])]), true), [
155
161
  keyframes('tq-page-arrive', forward.arrive[0], forward.arrive[1]),
156
162
  ], false);
157
163
  if (COVER_CLIPS[preset]) {
158
164
  rules.push("::view-transition-group(root) {\n background: ".concat(PageTransition.pageTransitionCoverColor(options.color), ";\n}"));
159
165
  }
160
166
  if (back) {
161
- if (!revealsOver) {
167
+ if (!arrivesOver) {
162
168
  rules.push("html[".concat(exports.BACK_ATTR, "=\"back\"]::view-transition-old(root) {\n animation-name: tq-page-leave-back;\n}"));
163
169
  }
164
- rules.push.apply(rules, __spreadArray(__spreadArray(["html[".concat(exports.BACK_ATTR, "=\"back\"]::view-transition-new(root) {\n animation-name: tq-page-arrive-back;\n}")], (revealsOver ? [] : [keyframes('tq-page-leave-back', back.leave[0], back.leave[1])]), false), [keyframes('tq-page-arrive-back', back.arrive[0], back.arrive[1])], false));
170
+ rules.push.apply(rules, __spreadArray(__spreadArray(["html[".concat(exports.BACK_ATTR, "=\"back\"]::view-transition-new(root) {\n animation-name: tq-page-arrive-back;\n}")], (arrivesOver ? [] : [keyframes('tq-page-leave-back', back.leave[0], back.leave[1])]), false), [keyframes('tq-page-arrive-back', back.arrive[0], back.arrive[1])], false));
165
171
  }
166
172
  // The flying image spans both halves (the leaving page's and the arriving
167
173
  // page's — one half when the arrival plays over the leaving page), and a
@@ -170,8 +176,8 @@ var viewTransitionPlan = function (config, target) {
170
176
  // with its page instead of lingering over the next one.
171
177
  var flies = config.flyingPictures !== false;
172
178
  if (flies) {
173
- var flight = revealsOver ? duration : duration * 2;
174
- rules.push("::view-transition-group(".concat(exports.MORPH_NAME, ") {\n animation-duration: ").concat(flight, "s;\n animation-timing-function: cubic-bezier(").concat(curve.join(', '), ");\n}"), "::view-transition-old(".concat(exports.MORPH_NAME, "),\n::view-transition-new(").concat(exports.MORPH_NAME, ") {\n height: 100%;\n object-fit: cover;\n overflow: clip;\n animation-duration: ").concat(flight, "s;\n}"), revealsOver
179
+ var flight = arrivesOver ? duration : duration * 2;
180
+ rules.push("::view-transition-group(".concat(exports.MORPH_NAME, ") {\n animation-duration: ").concat(flight, "s;\n animation-timing-function: cubic-bezier(").concat(curve.join(', '), ");\n}"), "::view-transition-old(".concat(exports.MORPH_NAME, "),\n::view-transition-new(").concat(exports.MORPH_NAME, ") {\n height: 100%;\n object-fit: cover;\n overflow: clip;\n animation-duration: ").concat(flight, "s;\n}"), arrivesOver
175
181
  ? "::view-transition-old(".concat(exports.MORPH_NAME, "):only-child {\n animation: tq-morph-away ").concat(timing, " both;\n}")
176
182
  : "::view-transition-old(".concat(exports.MORPH_NAME, "):only-child {\n animation: tq-page-leave ").concat(timing, " both, tq-morph-away ").concat(timing, " both;\n}"), "::view-transition-new(".concat(exports.MORPH_NAME, "):only-child {\n animation: tq-page-arrive ").concat(arriveTiming, ", tq-morph-in ").concat(arriveTiming, ";\n}"), '@keyframes tq-morph-away {\n to { opacity: 0; }\n}', '@keyframes tq-morph-in {\n from { opacity: 0; }\n}');
177
183
  }
@@ -182,6 +188,7 @@ var viewTransitionPlan = function (config, target) {
182
188
  needsOrigin: needsOrigin,
183
189
  flies: flies,
184
190
  revealsOver: revealsOver,
191
+ arrivesOver: arrivesOver,
185
192
  };
186
193
  };
187
194
  exports.viewTransitionPlan = viewTransitionPlan;
@@ -1 +1 @@
1
- {"version":3,"file":"view-transition-css.js","sourceRoot":"","sources":["../../../src/page-transition/view-transition-css.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"view-transition-css.js","sourceRoot":"","sources":["../../../src/page-transition/view-transition-css.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,yDAA4C;AAqC/B,QAAA,SAAS,GAAG,aAAa,CAAA;AACzB,QAAA,QAAQ,GAAG,eAAe,CAAA;AAC1B,QAAA,QAAQ,GAAG,eAAe,CAAA;AAEvC,IAAM,MAAM,GAAG,UAAC,KAAY,EAAE,IAAc;IAC1C,OAAA,IAAI,CAAC,IAAI,CAAC,UAAC,GAAG,IAAK,OAAA,KAAK,CAAC,GAAG,CAAC,KAAK,SAAS,EAAxB,CAAwB,CAAC;AAA5C,CAA4C,CAAA;AAE9C,8GAA8G;AAC9G,IAAM,YAAY,GAAG,UAAC,KAAY,EAAE,KAAY;;IAC9C,IAAM,KAAK,GAAa,EAAE,CAAA;IAC1B,IAAM,IAAI,GAAG,UAAC,IAAc,IAAK,OAAA,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,EAA1C,CAA0C,CAAA;IAC3E,IAAI,IAAI,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE;QACrB,KAAK,CAAC,IAAI,CAAC,mBAAY,MAAA,KAAK,CAAC,OAAO,mCAAI,CAAC,MAAG,CAAC,CAAA;KAC9C;IACD,IAAI,IAAI,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC,EAAE;QAC7B,KAAK,CAAC,IAAI,CACR,+BAAwB,MAAA,KAAK,CAAC,CAAC,mCAAI,CAAC,iBAAO,MAAA,KAAK,CAAC,CAAC,mCAAI,CAAC,uBAAa,MAAA,KAAK,CAAC,KAAK,mCAAI,CAAC,OAAI,CACzF,CAAA;KACF;IACD,IAAI,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE;QACpB,KAAK,CAAC,IAAI,CAAC,kBAAW,MAAA,KAAK,CAAC,MAAM,mCAAI,WAAW,MAAG,CAAC,CAAA;KACtD;IACD,IAAI,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC,EAAE;QACtB,KAAK,CAAC,IAAI,CAAC,qBAAc,MAAA,KAAK,CAAC,QAAQ,mCAAI,gBAAgB,MAAG,CAAC,CAAA;KAChE;IACD,OAAO,KAAK,CAAA;AACd,CAAC,CAAA;AAED,IAAM,SAAS,GAAG,UAAC,IAAY,EAAE,IAAW,EAAE,EAAS;IACrD,OAAA,qBAAc,IAAI,0BAAgB,YAAY,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,wBAAc,YAAY,CAC1F,EAAE,EACF,IAAI,CACL,CAAC,IAAI,CAAC,GAAG,CAAC,UAAO;AAHlB,CAGkB,CAAA;AAEpB;;;;;;GAMG;AACH,IAAM,WAAW,GAAyD;IACxE,iEAAiE;IACjE,KAAK,EAAE,EAAE,OAAO,EAAE,mBAAmB,EAAE,OAAO,EAAE,mBAAmB,EAAE;IACrE,iDAAiD;IACjD,OAAO,EAAE,EAAE,OAAO,EAAE,oBAAoB,EAAE,OAAO,EAAE,oBAAoB,EAAE;CAC1E,CAAA;AACD,IAAM,IAAI,GAAG,gBAAgB,CAAA;AAE7B,kGAAkG;AAC3F,IAAM,uBAAuB,GAAG,UAAC,MAAc;IACpD,OAAA,MAAM,KAAK,MAAM,IAAI,MAAM,KAAK,WAAW;AAA3C,CAA2C,CAAA;AADhC,QAAA,uBAAuB,2BACS;AAO7C,IAAM,aAAa,GAAG,UACpB,MAAc,EACd,OAA6C,EAC7C,OAA+B,EAC/B,MAAuD;IAEvD,IAAM,KAAK,GAAG,WAAW,CAAC,MAAM,CAAC,CAAA;IACjC,IAAI,KAAK,EAAE;QACT,OAAO;YACL,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC;YACxD,MAAM,EAAE,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;SAC1D,CAAA;KACF;IACD,IAAM,QAAQ,GAAG,cAAc,CAAC,sBAAsB,CACpD,MAAM,EACN,cAAc,CAAC,wBAAwB,EACvC,OAAO,EACP,OAAO,EACP,MAAM,CACP,CAAA;IACD,IAAI,CAAC,QAAQ,EAAE;QACb,OAAO,IAAI,CAAA;KACZ;IACD,OAAO;QACL,KAAK,EAAE,CAAC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,IAAI,CAAC;QACxC,MAAM,EAAE,CAAC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC;KAC7C,CAAA;AACH,CAAC,CAAA;AAED,yFAAyF;AAC5E,QAAA,UAAU,GAAG,UAAU,CAAA;AAgB7B,IAAM,kBAAkB,GAAG,UAChC,MAA2C,EAC3C,MAA4D;;IAA5D,uBAAA,EAAA,WAAuC,aAAa,EAAE,IAAI,EAAE;IAE5D,IAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAA;IAC5D,IAAM,MAAM,GACV,MAAM,CAAC,OAAO,IAAI,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ;QAClD,CAAC,CAAC,MAAM,CAAC,WAAW,CAChB,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,UAAC,EAAS;gBAAN,KAAK,QAAA;YAAM,OAAA,OAAO,KAAK,KAAK,QAAQ;QAAzB,CAAyB,CAAC,CAChF;QACH,CAAC,CAAC,SAAS,CAAA;IACf,IAAM,OAAO,GAAG,cAAc,CAAC,4BAA4B,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC3E,IAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAA;IACjG,IAAM,KAAK,GACT,cAAc,CAAC,6BAA6B,CAAC,MAAM,CAAC,MAAM,CAAC;QAC3D,cAAc,CAAC,6BAA6B,CAAC,UAAU,CAAC,CAAA;IAC1D,IAAM,MAAM,GACV,MAAM,KAAK,QAAQ;QACjB,CAAC,CAAC,cAAc,CAAC,4BAA4B,CAAC;YAC1C,eAAe,EAAE,QAAQ;YACzB,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,MAAM,EAAE,MAAA,MAAM,CAAC,MAAM,0CAAE,MAAe;YACtC,KAAK,EAAE,MAAA,MAAM,CAAC,MAAM,0CAAE,KAAc;SACrC,CAAC;QACJ,CAAC,CAAC,SAAS,CAAA;IAEf,IAAM,WAAW,GAAG,MAAM,KAAK,QAAQ,IAAI,OAAO,CAAC,MAAM,KAAK,QAAQ,CAAA;IACtE,IAAM,MAAM,GAAG,WAAW;QACxB,CAAC,CAAC,EAAE,OAAO,EAAE,cAAO,gBAAQ,WAAQ,EAAE,OAAO,EAAE,cAAO,gBAAQ,WAAQ,EAAE;QACxE,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,CAAA;IACtC,IAAM,OAAO,GAAG,aAAa,CAAC,MAAM,aAAI,OAAO,EAAE,KAAK,IAAK,MAAM,GAAI,OAAO,EAAE,MAAM,CAAC,CAAA;IACrF,IAAI,CAAC,OAAO,EAAE;QACZ,OAAO,IAAI,CAAA;KACZ;IACD,IAAM,cAAc,GAAG,cAAc,CAAC,2BAA2B,CAAC,MAAM,CAAC,KAAK,MAAM,CAAA;IACpF,IAAM,IAAI,GAAG,cAAc;QACzB,CAAC,CAAC,aAAa,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC;QAC3F,CAAC,CAAC,IAAI,CAAA;IAER,IAAM,MAAM,GAAG,UAAG,QAAQ,4BAAkB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAG,CAAA;IAC/D,2EAA2E;IAC3E,iFAAiF;IACjF,IAAM,WAAW,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,KAAK,SAAS,CAAA;IACpF,IAAM,WAAW,GAAG,WAAW,IAAI,IAAA,+BAAuB,EAAC,MAAM,CAAC,CAAA;IAClE,IAAM,YAAY,GAAG,WAAW,CAAC,CAAC,CAAC,UAAG,MAAM,UAAO,CAAC,CAAC,CAAC,UAAG,MAAM,cAAI,QAAQ,WAAQ,CAAA;IACnF,IAAM,KAAK,+DAGN,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,4CAA4C,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/E,2FAA2F;QAC3F,WAAW;YACT,CAAC,CAAC,sDAAsD;YACxD,CAAC,CAAC,oEAA6D,MAAM,cAAW;QAClF,qEAA8D,YAAY,SAAM;eAC7E,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,eAAe,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACxF,SAAS,CAAC,gBAAgB,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;aAClE,CAAA;IACD,IAAI,WAAW,CAAC,MAAM,CAAC,EAAE;QACvB,KAAK,CAAC,IAAI,CACR,yDAAkD,cAAc,CAAC,wBAAwB,CACvF,OAAO,CAAC,KAAK,CACd,SAAM,CACR,CAAA;KACF;IACD,IAAI,IAAI,EAAE;QACR,IAAI,CAAC,WAAW,EAAE;YAChB,KAAK,CAAC,IAAI,CACR,eAAQ,iBAAS,sFAAiF,CACnG,CAAA;SACF;QACD,KAAK,CAAC,IAAI,OAAV,KAAK,+BACH,eAAQ,iBAAS,uFAAkF,GAChG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,oBAAoB,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WACvF,SAAS,CAAC,qBAAqB,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WACjE;KACF;IACD,0EAA0E;IAC1E,yEAAyE;IACzE,wEAAwE;IACxE,yEAAyE;IACzE,wDAAwD;IACxD,IAAM,KAAK,GAAG,MAAM,CAAC,cAAc,KAAK,KAAK,CAAA;IAC7C,IAAI,KAAK,EAAE;QACT,IAAM,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAA;QACpD,KAAK,CAAC,IAAI,CACR,kCAA2B,kBAAU,wCAA8B,MAAM,2DAAiD,KAAK,CAAC,IAAI,CAClI,IAAI,CACL,UAAO,EACR,gCAAyB,kBAAU,uCAA6B,kBAAU,kGAAwF,MAAM,UAAO,EAC/K,WAAW;YACT,CAAC,CAAC,gCAAyB,kBAAU,wDAA8C,MAAM,cAAW;YACpG,CAAC,CAAC,gCAAyB,kBAAU,wDAA8C,MAAM,kCAAwB,MAAM,cAAW,EACpI,gCAAyB,kBAAU,yDAA+C,YAAY,2BAAiB,YAAY,SAAM,EACjI,qDAAqD,EACrD,qDAAqD,CACtD,CAAA;KACF;IACD,IAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,UAAC,IAAI,IAAK,OAAA,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,EAAzB,CAAyB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAC1E,OAAO;QACL,GAAG,EAAE,4DAAqD,QAAQ,UAAO;QACzE,cAAc,gBAAA;QACd,WAAW,aAAA;QACX,KAAK,OAAA;QACL,WAAW,aAAA;QACX,WAAW,aAAA;KACZ,CAAA;AACH,CAAC,CAAA;AA1GY,QAAA,kBAAkB,sBA0G9B"}