@bquery/bquery 1.5.0 → 1.6.0

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 (106) hide show
  1. package/README.md +586 -546
  2. package/dist/component/component.d.ts +13 -5
  3. package/dist/component/component.d.ts.map +1 -1
  4. package/dist/component/html.d.ts +40 -3
  5. package/dist/component/html.d.ts.map +1 -1
  6. package/dist/component/index.d.ts +2 -2
  7. package/dist/component/index.d.ts.map +1 -1
  8. package/dist/component/library.d.ts.map +1 -1
  9. package/dist/component/types.d.ts +131 -16
  10. package/dist/component/types.d.ts.map +1 -1
  11. package/dist/component-BEQgt5hl.js +600 -0
  12. package/dist/component-BEQgt5hl.js.map +1 -0
  13. package/dist/component.es.mjs +7 -6
  14. package/dist/config-DRmZZno3.js.map +1 -1
  15. package/dist/core-BGQJVw0-.js +35 -0
  16. package/dist/core-BGQJVw0-.js.map +1 -0
  17. package/dist/{core-CK2Mfpf4.js → core-CCEabVHl.js} +2 -2
  18. package/dist/{core-CK2Mfpf4.js.map → core-CCEabVHl.js.map} +1 -1
  19. package/dist/core.es.mjs +1 -1
  20. package/dist/effect-AFRW_Plg.js +84 -0
  21. package/dist/effect-AFRW_Plg.js.map +1 -0
  22. package/dist/full.d.ts +4 -4
  23. package/dist/full.d.ts.map +1 -1
  24. package/dist/full.es.mjs +98 -94
  25. package/dist/full.iife.js +14 -14
  26. package/dist/full.iife.js.map +1 -1
  27. package/dist/full.umd.js +14 -14
  28. package/dist/full.umd.js.map +1 -1
  29. package/dist/index.es.mjs +143 -139
  30. package/dist/{motion-C5DRdPnO.js → motion-D9TcHxOF.js} +1 -1
  31. package/dist/{motion-C5DRdPnO.js.map → motion-D9TcHxOF.js.map} +1 -1
  32. package/dist/motion.es.mjs +1 -1
  33. package/dist/{platform-B7JhGBc7.js → platform-Dr9b6fsq.js} +21 -20
  34. package/dist/platform-Dr9b6fsq.js.map +1 -0
  35. package/dist/platform.es.mjs +1 -1
  36. package/dist/{reactive-BDya-ia8.js → reactive-DSkct0dO.js} +51 -50
  37. package/dist/reactive-DSkct0dO.js.map +1 -0
  38. package/dist/reactive.es.mjs +19 -17
  39. package/dist/{router-CijiICxt.js → router-CbDhl8rS.js} +3 -3
  40. package/dist/{router-CijiICxt.js.map → router-CbDhl8rS.js.map} +1 -1
  41. package/dist/router.es.mjs +1 -1
  42. package/dist/{sanitize-jyJ2ryE2.js → sanitize-Bs2dkMby.js} +94 -83
  43. package/dist/sanitize-Bs2dkMby.js.map +1 -0
  44. package/dist/security/index.d.ts +4 -2
  45. package/dist/security/index.d.ts.map +1 -1
  46. package/dist/security/sanitize.d.ts +4 -1
  47. package/dist/security/sanitize.d.ts.map +1 -1
  48. package/dist/security/trusted-html.d.ts +53 -0
  49. package/dist/security/trusted-html.d.ts.map +1 -0
  50. package/dist/security.es.mjs +10 -9
  51. package/dist/store/define-store.d.ts +1 -1
  52. package/dist/store/define-store.d.ts.map +1 -1
  53. package/dist/store/mapping.d.ts +1 -1
  54. package/dist/store/mapping.d.ts.map +1 -1
  55. package/dist/store/persisted.d.ts +1 -1
  56. package/dist/store/persisted.d.ts.map +1 -1
  57. package/dist/store/types.d.ts +2 -2
  58. package/dist/store/types.d.ts.map +1 -1
  59. package/dist/store/watch.d.ts +1 -1
  60. package/dist/store/watch.d.ts.map +1 -1
  61. package/dist/{store-CPK9E62U.js → store-BwDvI45q.js} +49 -48
  62. package/dist/{store-CPK9E62U.js.map → store-BwDvI45q.js.map} +1 -1
  63. package/dist/store.es.mjs +1 -1
  64. package/dist/storybook/index.d.ts +37 -0
  65. package/dist/storybook/index.d.ts.map +1 -0
  66. package/dist/storybook.es.mjs +151 -0
  67. package/dist/storybook.es.mjs.map +1 -0
  68. package/dist/untrack-B0rVscTc.js +7 -0
  69. package/dist/untrack-B0rVscTc.js.map +1 -0
  70. package/dist/{view-Cdi0g-qo.js → view-C70lA3vf.js} +29 -28
  71. package/dist/{view-Cdi0g-qo.js.map → view-C70lA3vf.js.map} +1 -1
  72. package/dist/view.es.mjs +9 -8
  73. package/package.json +141 -136
  74. package/src/component/component.ts +259 -54
  75. package/src/component/html.ts +153 -53
  76. package/src/component/index.ts +10 -2
  77. package/src/component/library.ts +42 -28
  78. package/src/component/types.ts +184 -19
  79. package/src/full.ts +8 -2
  80. package/src/motion/transition.ts +97 -97
  81. package/src/motion/types.ts +208 -208
  82. package/src/platform/announcer.ts +208 -208
  83. package/src/platform/config.ts +163 -163
  84. package/src/platform/cookies.ts +165 -165
  85. package/src/platform/index.ts +39 -39
  86. package/src/platform/meta.ts +168 -168
  87. package/src/reactive/async-data.ts +486 -486
  88. package/src/reactive/index.ts +37 -37
  89. package/src/reactive/signal.ts +29 -29
  90. package/src/security/constants.ts +211 -211
  91. package/src/security/index.ts +17 -10
  92. package/src/security/sanitize.ts +70 -66
  93. package/src/security/trusted-html.ts +71 -0
  94. package/src/store/define-store.ts +49 -48
  95. package/src/store/mapping.ts +74 -73
  96. package/src/store/persisted.ts +62 -61
  97. package/src/store/types.ts +92 -94
  98. package/src/store/watch.ts +53 -52
  99. package/src/storybook/index.ts +479 -0
  100. package/dist/component-CY5MVoYN.js +0 -531
  101. package/dist/component-CY5MVoYN.js.map +0 -1
  102. package/dist/core-DPdbItcq.js +0 -112
  103. package/dist/core-DPdbItcq.js.map +0 -1
  104. package/dist/platform-B7JhGBc7.js.map +0 -1
  105. package/dist/reactive-BDya-ia8.js.map +0 -1
  106. package/dist/sanitize-jyJ2ryE2.js.map +0 -1
@@ -1,39 +1,39 @@
1
- /**
2
- * Platform module providing unified endpoints for web platform APIs.
3
- * Offers consistent, promise-based interfaces with predictable errors.
4
- *
5
- * @module bquery/platform
6
- */
7
-
8
- export { buckets } from './buckets';
9
- export type { Bucket } from './buckets';
10
-
11
- export { cache } from './cache';
12
- export type { CacheHandle } from './cache';
13
-
14
- export { useCookie } from './cookies';
15
- export type { UseCookieOptions } from './cookies';
16
-
17
- export { defineBqueryConfig, getBqueryConfig } from './config';
18
- export type {
19
- BqueryAnnouncerConfig,
20
- BqueryComponentLibraryConfig,
21
- BqueryConfig,
22
- BqueryCookieConfig,
23
- BqueryFetchConfig,
24
- BqueryFetchParseAs,
25
- BqueryPageMetaConfig,
26
- BqueryTransitionConfig,
27
- } from './config';
28
-
29
- export { notifications } from './notifications';
30
- export type { NotificationOptions } from './notifications';
31
-
32
- export { useAnnouncer } from './announcer';
33
- export type { AnnounceOptions, AnnouncerHandle, UseAnnouncerOptions } from './announcer';
34
-
35
- export { definePageMeta } from './meta';
36
- export type { PageLinkTag, PageMetaCleanup, PageMetaDefinition, PageMetaTag } from './meta';
37
-
38
- export { storage } from './storage';
39
- export type { IndexedDBOptions, StorageAdapter } from './storage';
1
+ /**
2
+ * Platform module providing unified endpoints for web platform APIs.
3
+ * Offers consistent, promise-based interfaces with predictable errors.
4
+ *
5
+ * @module bquery/platform
6
+ */
7
+
8
+ export { buckets } from './buckets';
9
+ export type { Bucket } from './buckets';
10
+
11
+ export { cache } from './cache';
12
+ export type { CacheHandle } from './cache';
13
+
14
+ export { useCookie } from './cookies';
15
+ export type { UseCookieOptions } from './cookies';
16
+
17
+ export { defineBqueryConfig, getBqueryConfig } from './config';
18
+ export type {
19
+ BqueryAnnouncerConfig,
20
+ BqueryComponentLibraryConfig,
21
+ BqueryConfig,
22
+ BqueryCookieConfig,
23
+ BqueryFetchConfig,
24
+ BqueryFetchParseAs,
25
+ BqueryPageMetaConfig,
26
+ BqueryTransitionConfig,
27
+ } from './config';
28
+
29
+ export { notifications } from './notifications';
30
+ export type { NotificationOptions } from './notifications';
31
+
32
+ export { useAnnouncer } from './announcer';
33
+ export type { AnnounceOptions, AnnouncerHandle, UseAnnouncerOptions } from './announcer';
34
+
35
+ export { definePageMeta } from './meta';
36
+ export type { PageLinkTag, PageMetaCleanup, PageMetaDefinition, PageMetaTag } from './meta';
37
+
38
+ export { storage } from './storage';
39
+ export type { IndexedDBOptions, StorageAdapter } from './storage';
@@ -1,168 +1,168 @@
1
- /**
2
- * Document title and meta helpers.
3
- *
4
- * @module bquery/platform
5
- */
6
-
7
- import { getBqueryConfig } from './config';
8
-
9
- /** Meta tag definition. */
10
- export interface PageMetaTag {
11
- /** Standard meta name attribute. */
12
- name?: string;
13
- /** Open Graph / custom property attribute. */
14
- property?: string;
15
- /** http-equiv attribute. */
16
- httpEquiv?: string;
17
- /** Meta tag content. */
18
- content: string;
19
- }
20
-
21
- /** Link tag definition. */
22
- export interface PageLinkTag {
23
- /** Link relation. */
24
- rel: string;
25
- /** Link URL. */
26
- href: string;
27
- /** Optional type attribute. */
28
- type?: string;
29
- /** Optional media query. */
30
- media?: string;
31
- /** Optional crossOrigin attribute. */
32
- crossOrigin?: 'anonymous' | 'use-credentials';
33
- }
34
-
35
- /** Page metadata definition. */
36
- export interface PageMetaDefinition {
37
- /** Document title. */
38
- title?: string;
39
- /** Convenience shortcut for the description meta tag. */
40
- description?: string;
41
- /** Additional meta tags. */
42
- meta?: PageMetaTag[];
43
- /** Additional link tags. */
44
- link?: PageLinkTag[];
45
- /** Attributes applied to the html element. */
46
- htmlAttributes?: Record<string, string>;
47
- /** Attributes applied to the body element. */
48
- bodyAttributes?: Record<string, string>;
49
- }
50
-
51
- /** Cleanup function returned by definePageMeta(). */
52
- export type PageMetaCleanup = () => void;
53
-
54
- const setAttributes = (target: HTMLElement, attributes: Record<string, string>): (() => void) => {
55
- const previousValues = new Map<string, string | null>();
56
-
57
- for (const [name, value] of Object.entries(attributes)) {
58
- previousValues.set(name, target.getAttribute(name));
59
- target.setAttribute(name, value);
60
- }
61
-
62
- return () => {
63
- for (const [name, value] of previousValues.entries()) {
64
- if (value == null) {
65
- target.removeAttribute(name);
66
- } else {
67
- target.setAttribute(name, value);
68
- }
69
- }
70
- };
71
- };
72
-
73
- const createElement = <T extends 'meta' | 'link'>(
74
- tagName: T,
75
- attributes: Record<string, string | undefined>
76
- ): HTMLElementTagNameMap[T] => {
77
- const element = document.createElement(tagName);
78
- element.setAttribute('data-bquery-page-meta', 'true');
79
-
80
- for (const [name, value] of Object.entries(attributes)) {
81
- if (value !== undefined) {
82
- element.setAttribute(name, value);
83
- }
84
- }
85
-
86
- return element;
87
- };
88
-
89
- /**
90
- * Apply document metadata for the current page.
91
- *
92
- * @param definition - Title, meta tags, link tags, and document attributes
93
- * @returns Cleanup function that restores the previous document state
94
- *
95
- * @example
96
- * ```ts
97
- * const cleanup = definePageMeta({
98
- * title: 'Dashboard',
99
- * description: 'Overview of your account',
100
- * });
101
- * ```
102
- */
103
- export const definePageMeta = (definition: PageMetaDefinition): PageMetaCleanup => {
104
- if (typeof document === 'undefined') {
105
- return () => {};
106
- }
107
-
108
- const config = getBqueryConfig().pageMeta;
109
- const title = definition.title
110
- ? config?.titleTemplate
111
- ? config.titleTemplate(definition.title)
112
- : definition.title
113
- : undefined;
114
-
115
- const inserted: HTMLElement[] = [];
116
- const restoreFns: Array<() => void> = [];
117
- const previousTitle = document.title;
118
-
119
- if (title !== undefined) {
120
- document.title = title;
121
- }
122
-
123
- const metaEntries = [...(definition.meta ?? [])];
124
- if (definition.description) {
125
- metaEntries.unshift({ name: 'description', content: definition.description });
126
- }
127
-
128
- for (const entry of metaEntries) {
129
- const meta = createElement('meta', {
130
- name: entry.name,
131
- property: entry.property,
132
- 'http-equiv': entry.httpEquiv,
133
- content: entry.content,
134
- });
135
- document.head.appendChild(meta);
136
- inserted.push(meta);
137
- }
138
-
139
- for (const entry of definition.link ?? []) {
140
- const link = createElement('link', {
141
- rel: entry.rel,
142
- href: entry.href,
143
- type: entry.type,
144
- media: entry.media,
145
- crossorigin: entry.crossOrigin,
146
- });
147
- document.head.appendChild(link);
148
- inserted.push(link);
149
- }
150
-
151
- if (definition.htmlAttributes) {
152
- restoreFns.push(setAttributes(document.documentElement, definition.htmlAttributes));
153
- }
154
-
155
- if (definition.bodyAttributes && document.body) {
156
- restoreFns.push(setAttributes(document.body, definition.bodyAttributes));
157
- }
158
-
159
- return () => {
160
- document.title = previousTitle;
161
- for (const restore of restoreFns.reverse()) {
162
- restore();
163
- }
164
- for (const element of inserted) {
165
- element.remove();
166
- }
167
- };
168
- };
1
+ /**
2
+ * Document title and meta helpers.
3
+ *
4
+ * @module bquery/platform
5
+ */
6
+
7
+ import { getBqueryConfig } from './config';
8
+
9
+ /** Meta tag definition. */
10
+ export interface PageMetaTag {
11
+ /** Standard meta name attribute. */
12
+ name?: string;
13
+ /** Open Graph / custom property attribute. */
14
+ property?: string;
15
+ /** http-equiv attribute. */
16
+ httpEquiv?: string;
17
+ /** Meta tag content. */
18
+ content: string;
19
+ }
20
+
21
+ /** Link tag definition. */
22
+ export interface PageLinkTag {
23
+ /** Link relation. */
24
+ rel: string;
25
+ /** Link URL. */
26
+ href: string;
27
+ /** Optional type attribute. */
28
+ type?: string;
29
+ /** Optional media query. */
30
+ media?: string;
31
+ /** Optional crossOrigin attribute. */
32
+ crossOrigin?: 'anonymous' | 'use-credentials';
33
+ }
34
+
35
+ /** Page metadata definition. */
36
+ export interface PageMetaDefinition {
37
+ /** Document title. */
38
+ title?: string;
39
+ /** Convenience shortcut for the description meta tag. */
40
+ description?: string;
41
+ /** Additional meta tags. */
42
+ meta?: PageMetaTag[];
43
+ /** Additional link tags. */
44
+ link?: PageLinkTag[];
45
+ /** Attributes applied to the html element. */
46
+ htmlAttributes?: Record<string, string>;
47
+ /** Attributes applied to the body element. */
48
+ bodyAttributes?: Record<string, string>;
49
+ }
50
+
51
+ /** Cleanup function returned by definePageMeta(). */
52
+ export type PageMetaCleanup = () => void;
53
+
54
+ const setAttributes = (target: HTMLElement, attributes: Record<string, string>): (() => void) => {
55
+ const previousValues = new Map<string, string | null>();
56
+
57
+ for (const [name, value] of Object.entries(attributes)) {
58
+ previousValues.set(name, target.getAttribute(name));
59
+ target.setAttribute(name, value);
60
+ }
61
+
62
+ return () => {
63
+ for (const [name, value] of previousValues.entries()) {
64
+ if (value == null) {
65
+ target.removeAttribute(name);
66
+ } else {
67
+ target.setAttribute(name, value);
68
+ }
69
+ }
70
+ };
71
+ };
72
+
73
+ const createElement = <T extends 'meta' | 'link'>(
74
+ tagName: T,
75
+ attributes: Record<string, string | undefined>
76
+ ): HTMLElementTagNameMap[T] => {
77
+ const element = document.createElement(tagName);
78
+ element.setAttribute('data-bquery-page-meta', 'true');
79
+
80
+ for (const [name, value] of Object.entries(attributes)) {
81
+ if (value !== undefined) {
82
+ element.setAttribute(name, value);
83
+ }
84
+ }
85
+
86
+ return element;
87
+ };
88
+
89
+ /**
90
+ * Apply document metadata for the current page.
91
+ *
92
+ * @param definition - Title, meta tags, link tags, and document attributes
93
+ * @returns Cleanup function that restores the previous document state
94
+ *
95
+ * @example
96
+ * ```ts
97
+ * const cleanup = definePageMeta({
98
+ * title: 'Dashboard',
99
+ * description: 'Overview of your account',
100
+ * });
101
+ * ```
102
+ */
103
+ export const definePageMeta = (definition: PageMetaDefinition): PageMetaCleanup => {
104
+ if (typeof document === 'undefined') {
105
+ return () => {};
106
+ }
107
+
108
+ const config = getBqueryConfig().pageMeta;
109
+ const title = definition.title
110
+ ? config?.titleTemplate
111
+ ? config.titleTemplate(definition.title)
112
+ : definition.title
113
+ : undefined;
114
+
115
+ const inserted: HTMLElement[] = [];
116
+ const restoreFns: Array<() => void> = [];
117
+ const previousTitle = document.title;
118
+
119
+ if (title !== undefined) {
120
+ document.title = title;
121
+ }
122
+
123
+ const metaEntries = [...(definition.meta ?? [])];
124
+ if (definition.description) {
125
+ metaEntries.unshift({ name: 'description', content: definition.description });
126
+ }
127
+
128
+ for (const entry of metaEntries) {
129
+ const meta = createElement('meta', {
130
+ name: entry.name,
131
+ property: entry.property,
132
+ 'http-equiv': entry.httpEquiv,
133
+ content: entry.content,
134
+ });
135
+ document.head.appendChild(meta);
136
+ inserted.push(meta);
137
+ }
138
+
139
+ for (const entry of definition.link ?? []) {
140
+ const link = createElement('link', {
141
+ rel: entry.rel,
142
+ href: entry.href,
143
+ type: entry.type,
144
+ media: entry.media,
145
+ crossorigin: entry.crossOrigin,
146
+ });
147
+ document.head.appendChild(link);
148
+ inserted.push(link);
149
+ }
150
+
151
+ if (definition.htmlAttributes) {
152
+ restoreFns.push(setAttributes(document.documentElement, definition.htmlAttributes));
153
+ }
154
+
155
+ if (definition.bodyAttributes && document.body) {
156
+ restoreFns.push(setAttributes(document.body, definition.bodyAttributes));
157
+ }
158
+
159
+ return () => {
160
+ document.title = previousTitle;
161
+ for (const restore of restoreFns.reverse()) {
162
+ restore();
163
+ }
164
+ for (const element of inserted) {
165
+ element.remove();
166
+ }
167
+ };
168
+ };