@actuate-media/plugin-ai 0.1.0 → 0.2.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 (126) hide show
  1. package/LICENSE +21 -21
  2. package/dist/__tests__/content-generator.test.d.ts +2 -0
  3. package/dist/__tests__/content-generator.test.d.ts.map +1 -0
  4. package/dist/__tests__/content-generator.test.js +200 -0
  5. package/dist/__tests__/content-generator.test.js.map +1 -0
  6. package/dist/__tests__/index.test.js.map +1 -1
  7. package/dist/admin/AIScorePanel.d.ts +1 -1
  8. package/dist/admin/AIScorePanel.d.ts.map +1 -1
  9. package/dist/admin/AIScorePanel.js +34 -17
  10. package/dist/admin/AIScorePanel.js.map +1 -1
  11. package/dist/admin/BrandVoiceSettings.d.ts +2 -2
  12. package/dist/admin/BrandVoiceSettings.d.ts.map +1 -1
  13. package/dist/admin/BrandVoiceSettings.js +123 -34
  14. package/dist/admin/BrandVoiceSettings.js.map +1 -1
  15. package/dist/admin/ContentScoreDashboard.d.ts +1 -1
  16. package/dist/admin/ContentScoreDashboard.d.ts.map +1 -1
  17. package/dist/admin/ContentScoreDashboard.js +50 -16
  18. package/dist/admin/ContentScoreDashboard.js.map +1 -1
  19. package/dist/admin/WritingAssistantToolbar.d.ts.map +1 -1
  20. package/dist/admin/WritingAssistantToolbar.js +21 -21
  21. package/dist/admin/WritingAssistantToolbar.js.map +1 -1
  22. package/dist/brand/consistency-checker.d.ts +3 -3
  23. package/dist/brand/consistency-checker.d.ts.map +1 -1
  24. package/dist/brand/consistency-checker.js +7 -7
  25. package/dist/brand/consistency-checker.js.map +1 -1
  26. package/dist/brand/profile-builder.d.ts +2 -2
  27. package/dist/brand/profile-builder.d.ts.map +1 -1
  28. package/dist/brand/profile-builder.js +20 -19
  29. package/dist/brand/profile-builder.js.map +1 -1
  30. package/dist/brand/voice-profile.d.ts +4 -4
  31. package/dist/brand/voice-profile.d.ts.map +1 -1
  32. package/dist/collections.d.ts +1 -1
  33. package/dist/collections.d.ts.map +1 -1
  34. package/dist/collections.js.map +1 -1
  35. package/dist/fields.d.ts +1 -1
  36. package/dist/fields.d.ts.map +1 -1
  37. package/dist/fields.js.map +1 -1
  38. package/dist/hooks.d.ts.map +1 -1
  39. package/dist/hooks.js +16 -14
  40. package/dist/hooks.js.map +1 -1
  41. package/dist/index.d.ts +33 -31
  42. package/dist/index.d.ts.map +1 -1
  43. package/dist/index.js +36 -35
  44. package/dist/index.js.map +1 -1
  45. package/dist/links/smart-links.d.ts.map +1 -1
  46. package/dist/links/smart-links.js +2 -2
  47. package/dist/links/smart-links.js.map +1 -1
  48. package/dist/media/alt-text-generator.d.ts +2 -2
  49. package/dist/media/alt-text-generator.d.ts.map +1 -1
  50. package/dist/media/alt-text-generator.js +14 -9
  51. package/dist/media/alt-text-generator.js.map +1 -1
  52. package/dist/media/auto-tagger.d.ts +1 -1
  53. package/dist/media/auto-tagger.d.ts.map +1 -1
  54. package/dist/media/auto-tagger.js +8 -5
  55. package/dist/media/auto-tagger.js.map +1 -1
  56. package/dist/page-builder/generate.d.ts.map +1 -1
  57. package/dist/page-builder/generate.js +106 -87
  58. package/dist/page-builder/generate.js.map +1 -1
  59. package/dist/providers/anthropic.d.ts +1 -1
  60. package/dist/providers/anthropic.d.ts.map +1 -1
  61. package/dist/providers/anthropic.js +32 -32
  62. package/dist/providers/anthropic.js.map +1 -1
  63. package/dist/providers/index.d.ts +1 -1
  64. package/dist/providers/index.d.ts.map +1 -1
  65. package/dist/providers/index.js +6 -6
  66. package/dist/providers/index.js.map +1 -1
  67. package/dist/providers/openai.d.ts +1 -1
  68. package/dist/providers/openai.d.ts.map +1 -1
  69. package/dist/providers/openai.js +24 -24
  70. package/dist/providers/openai.js.map +1 -1
  71. package/dist/scoring/accessibility.d.ts +1 -1
  72. package/dist/scoring/accessibility.d.ts.map +1 -1
  73. package/dist/scoring/accessibility.js +22 -22
  74. package/dist/scoring/accessibility.js.map +1 -1
  75. package/dist/scoring/brand-alignment.d.ts +1 -1
  76. package/dist/scoring/brand-alignment.d.ts.map +1 -1
  77. package/dist/scoring/brand-alignment.js +14 -12
  78. package/dist/scoring/brand-alignment.js.map +1 -1
  79. package/dist/scoring/composite.d.ts +1 -1
  80. package/dist/scoring/composite.d.ts.map +1 -1
  81. package/dist/scoring/composite.js +5 -5
  82. package/dist/scoring/composite.js.map +1 -1
  83. package/dist/scoring/freshness.d.ts +1 -1
  84. package/dist/scoring/freshness.d.ts.map +1 -1
  85. package/dist/scoring/freshness.js +5 -7
  86. package/dist/scoring/freshness.js.map +1 -1
  87. package/dist/scoring/readability.d.ts +1 -1
  88. package/dist/scoring/readability.d.ts.map +1 -1
  89. package/dist/scoring/readability.js +8 -8
  90. package/dist/scoring/readability.js.map +1 -1
  91. package/dist/scoring/seo-score.d.ts.map +1 -1
  92. package/dist/scoring/seo-score.js +82 -16
  93. package/dist/scoring/seo-score.js.map +1 -1
  94. package/dist/search/clustering.d.ts +1 -1
  95. package/dist/search/clustering.d.ts.map +1 -1
  96. package/dist/search/clustering.js +7 -9
  97. package/dist/search/clustering.js.map +1 -1
  98. package/dist/search/embeddings.d.ts +1 -1
  99. package/dist/search/embeddings.d.ts.map +1 -1
  100. package/dist/search/embeddings.js +3 -3
  101. package/dist/search/embeddings.js.map +1 -1
  102. package/dist/search/semantic-search.d.ts +1 -1
  103. package/dist/search/semantic-search.d.ts.map +1 -1
  104. package/dist/search/semantic-search.js +5 -5
  105. package/dist/search/semantic-search.js.map +1 -1
  106. package/dist/translation/translator.d.ts +2 -2
  107. package/dist/translation/translator.d.ts.map +1 -1
  108. package/dist/translation/translator.js +8 -8
  109. package/dist/translation/translator.js.map +1 -1
  110. package/dist/writing/assistant.d.ts +3 -3
  111. package/dist/writing/assistant.d.ts.map +1 -1
  112. package/dist/writing/assistant.js +19 -16
  113. package/dist/writing/assistant.js.map +1 -1
  114. package/dist/writing/content-generator.d.ts +107 -0
  115. package/dist/writing/content-generator.d.ts.map +1 -0
  116. package/dist/writing/content-generator.js +287 -0
  117. package/dist/writing/content-generator.js.map +1 -0
  118. package/dist/writing/inline-suggestions.d.ts +2 -2
  119. package/dist/writing/inline-suggestions.d.ts.map +1 -1
  120. package/dist/writing/inline-suggestions.js +8 -5
  121. package/dist/writing/inline-suggestions.js.map +1 -1
  122. package/dist/writing/meta-generator.d.ts +2 -2
  123. package/dist/writing/meta-generator.d.ts.map +1 -1
  124. package/dist/writing/meta-generator.js +21 -9
  125. package/dist/writing/meta-generator.js.map +1 -1
  126. package/package.json +2 -2
package/LICENSE CHANGED
@@ -1,21 +1,21 @@
1
- MIT License
2
-
3
- Copyright (c) 2026 Actuate Media
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in all
13
- copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- SOFTWARE.
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Actuate Media
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=content-generator.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"content-generator.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/content-generator.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,200 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { generateDocumentContent } from '../writing/content-generator.js';
3
+ function makeProvider(responseText, usage = { promptTokens: 0, completionTokens: 0 }) {
4
+ return {
5
+ async generateText() {
6
+ return { text: responseText, usage };
7
+ },
8
+ async generateEmbedding() {
9
+ return [];
10
+ },
11
+ async *streamText() {
12
+ yield responseText;
13
+ },
14
+ };
15
+ }
16
+ const blogPostCollection = {
17
+ slug: 'posts',
18
+ labels: { singular: 'Post', plural: 'Posts' },
19
+ type: 'post',
20
+ seo: { defaultSchemaType: 'BlogPosting' },
21
+ fields: {
22
+ title: { type: 'text', label: 'Title', required: true, maxLength: 200 },
23
+ slug: { type: 'slug', label: 'Slug', required: true },
24
+ excerpt: { type: 'text', label: 'Excerpt', maxLength: 280 },
25
+ body: { type: 'richText', label: 'Body', required: true },
26
+ authorName: { type: 'text', label: 'Author' },
27
+ publishedDate: { type: 'date', label: 'Published date' },
28
+ tags: {
29
+ type: 'array',
30
+ label: 'Tags',
31
+ fields: { tag: { type: 'text', label: 'Tag' } },
32
+ },
33
+ featuredImage: { type: 'media', label: 'Featured image' },
34
+ metaTitle: { type: 'text', label: 'SEO title', maxLength: 70 },
35
+ metaDescription: { type: 'text', label: 'SEO description', maxLength: 200 },
36
+ },
37
+ };
38
+ describe('generateDocumentContent', () => {
39
+ it('parses LLM JSON output and maps fields to types', async () => {
40
+ const provider = makeProvider(JSON.stringify({
41
+ title: 'Five Tips for Spring Cleaning',
42
+ excerpt: 'A practical guide.',
43
+ body: 'When spring arrives, kitchens deserve attention.',
44
+ authorName: 'Jane Doe',
45
+ publishedDate: '2026-04-01',
46
+ tags: [{ tag: 'cleaning' }, { tag: 'tips' }],
47
+ metaTitle: 'Spring Cleaning Tips',
48
+ metaDescription: 'Five practical spring cleaning tips for busy households.',
49
+ }));
50
+ const result = await generateDocumentContent({
51
+ prompt: 'Write a blog post about spring cleaning',
52
+ collection: blogPostCollection,
53
+ context: { provider },
54
+ });
55
+ expect(result.data.title).toBe('Five Tips for Spring Cleaning');
56
+ expect(result.data.body).toContain('spring');
57
+ expect(result.data.authorName).toBe('Jane Doe');
58
+ expect(result.data.publishedDate).toBe('2026-04-01T00:00:00.000Z');
59
+ expect(Array.isArray(result.data.tags)).toBe(true);
60
+ expect(result.data.tags[0].tag).toBe('cleaning');
61
+ // Media fields are excluded from the LLM prompt so they never appear in
62
+ // generator output — humans upload assets via the admin.
63
+ expect(result.data).not.toHaveProperty('featuredImage');
64
+ expect(result.title).toBe('Five Tips for Spring Cleaning');
65
+ expect(result.slug).toBe('five-tips-for-spring-cleaning');
66
+ expect(result.seo.metaTitle).toBe('Spring Cleaning Tips');
67
+ expect(result.seo.metaDescription).toContain('Five practical');
68
+ expect(result.seo.schemaType).toBe('BlogPosting');
69
+ });
70
+ it('strips fields not declared in the collection schema', async () => {
71
+ const provider = makeProvider(JSON.stringify({
72
+ title: 'Hello',
73
+ body: 'World',
74
+ // Field not declared in schema — should not appear in output.
75
+ secretInternalField: 'leaked',
76
+ }));
77
+ const result = await generateDocumentContent({
78
+ prompt: 'test',
79
+ collection: blogPostCollection,
80
+ context: { provider },
81
+ });
82
+ expect(result.data.title).toBe('Hello');
83
+ expect(result.data).not.toHaveProperty('secretInternalField');
84
+ });
85
+ it('coerces string numbers and boolean strings', async () => {
86
+ const provider = makeProvider(JSON.stringify({ title: 'X', body: 'Y', rating: '4.5', featured: 'true' }));
87
+ const result = await generateDocumentContent({
88
+ prompt: 'test',
89
+ collection: {
90
+ slug: 'testimonials',
91
+ labels: { singular: 'T', plural: 'T' },
92
+ fields: {
93
+ title: { type: 'text', label: 'T' },
94
+ body: { type: 'text', label: 'B' },
95
+ rating: { type: 'number', label: 'Rating', min: 1, max: 5 },
96
+ featured: { type: 'boolean', label: 'Featured' },
97
+ },
98
+ },
99
+ context: { provider },
100
+ });
101
+ expect(result.data.rating).toBe(4.5);
102
+ expect(result.data.featured).toBe(true);
103
+ });
104
+ it('drops unknown select option values rather than persisting them', async () => {
105
+ const provider = makeProvider(JSON.stringify({ title: 'X', body: 'Y', category: 'made-up-category' }));
106
+ const result = await generateDocumentContent({
107
+ prompt: 'test',
108
+ collection: {
109
+ slug: 'portfolio',
110
+ labels: { singular: 'P', plural: 'P' },
111
+ fields: {
112
+ title: { type: 'text', label: 'T' },
113
+ body: { type: 'text', label: 'B' },
114
+ category: {
115
+ type: 'select',
116
+ label: 'Category',
117
+ options: [
118
+ { label: 'Web', value: 'web' },
119
+ { label: 'Mobile', value: 'mobile' },
120
+ ],
121
+ },
122
+ },
123
+ },
124
+ context: { provider },
125
+ });
126
+ expect(result.data).not.toHaveProperty('category');
127
+ });
128
+ it('extracts JSON when LLM wraps it in markdown commentary', async () => {
129
+ const provider = makeProvider(`Sure! Here's the blog post:\n\n\`\`\`json\n${JSON.stringify({
130
+ title: 'Test',
131
+ body: 'Content',
132
+ })}\n\`\`\`\n\nLet me know if you want changes.`);
133
+ const result = await generateDocumentContent({
134
+ prompt: 'test',
135
+ collection: blogPostCollection,
136
+ context: { provider },
137
+ });
138
+ expect(result.data.title).toBe('Test');
139
+ expect(result.data.body).toBe('Content');
140
+ });
141
+ it('throws when the LLM returns no JSON', async () => {
142
+ const provider = makeProvider('I cannot generate this content.');
143
+ await expect(generateDocumentContent({
144
+ prompt: 'test',
145
+ collection: blogPostCollection,
146
+ context: { provider },
147
+ })).rejects.toThrow(/no JSON object/);
148
+ });
149
+ it('throws when the LLM returns invalid JSON', async () => {
150
+ // Balanced braces (so extractJsonObject succeeds) but with single-quoted
151
+ // values that JSON.parse rejects.
152
+ const provider = makeProvider("{ 'title': 'X', 'body': 'Y' }");
153
+ await expect(generateDocumentContent({
154
+ prompt: 'test',
155
+ collection: blogPostCollection,
156
+ context: { provider },
157
+ })).rejects.toThrow(/invalid JSON/);
158
+ });
159
+ it('uses a question field as the title when no title field exists (FAQ)', async () => {
160
+ const provider = makeProvider(JSON.stringify({
161
+ question: 'How do I reset my password?',
162
+ answer: 'Click "Forgot password".',
163
+ }));
164
+ const result = await generateDocumentContent({
165
+ prompt: 'test',
166
+ collection: {
167
+ slug: 'faqs',
168
+ labels: { singular: 'FAQ', plural: 'FAQs' },
169
+ fields: {
170
+ question: { type: 'text', label: 'Question', required: true },
171
+ answer: { type: 'richText', label: 'Answer', required: true },
172
+ },
173
+ },
174
+ context: { provider },
175
+ });
176
+ expect(result.title).toBe('How do I reset my password?');
177
+ expect(result.slug).toBe('how-do-i-reset-my-password');
178
+ });
179
+ it('caps slug to 80 chars', async () => {
180
+ const longTitle = 'A'.repeat(200);
181
+ const provider = makeProvider(JSON.stringify({ title: longTitle, body: 'x' }));
182
+ const result = await generateDocumentContent({
183
+ prompt: 'test',
184
+ collection: blogPostCollection,
185
+ context: { provider },
186
+ });
187
+ expect(result.slug.length).toBeLessThanOrEqual(80);
188
+ });
189
+ it('honors caller-supplied slug in result.data.slug', async () => {
190
+ const provider = makeProvider(JSON.stringify({ title: 'Hello', slug: 'custom-slug', body: 'x' }));
191
+ const result = await generateDocumentContent({
192
+ prompt: 'test',
193
+ collection: blogPostCollection,
194
+ context: { provider },
195
+ });
196
+ expect(result.slug).toBe('custom-slug');
197
+ expect(result.data.slug).toBe('custom-slug');
198
+ });
199
+ });
200
+ //# sourceMappingURL=content-generator.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"content-generator.test.js","sourceRoot":"","sources":["../../src/__tests__/content-generator.test.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.test.js","sourceRoot":"","sources":["../../src/__tests__/index.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAEtC,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE;IACzB,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE;QACzB,EAAE,CAAC,wBAAwB,EAAE,GAAG,EAAE;YAChC,MAAM,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC5C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;YACxC,MAAM,MAAM,GAAG,QAAQ,EAAE,CAAC;YAC1B,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;YACpC,MAAM,CAAC,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC5C,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,WAAW,EAAE,CAAC;YACzC,MAAM,CAAC,OAAO,MAAM,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACnD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;YAC3C,MAAM,MAAM,GAAG,QAAQ,EAAE,CAAC;YAC1B,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC;gBACnC,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,YAAY,EAAE;gBAC7D,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE;gBACxD,EAAE,KAAK,EAAE,mBAAmB,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,aAAa,EAAE;gBACrE,EAAE,KAAK,EAAE,mBAAmB,EAAE,IAAI,EAAE,kBAAkB,EAAE,IAAI,EAAE,eAAe,EAAE;aAChF,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,iBAAiB,EAAE,GAAG,EAAE;YACzB,MAAM,MAAM,GAAG,QAAQ,EAAE,CAAC;YAC1B,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;YAChD,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACpD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;QAC7B,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;YACvD,MAAM,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;QACzC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"index.test.js","sourceRoot":"","sources":["../../src/__tests__/index.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AACtC,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAErC,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE;IACzB,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE;QACzB,EAAE,CAAC,wBAAwB,EAAE,GAAG,EAAE;YAChC,MAAM,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;QAC3C,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;YACxC,MAAM,MAAM,GAAG,QAAQ,EAAE,CAAA;YACzB,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAA;YACnC,MAAM,CAAC,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;YAC3C,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,WAAW,EAAE,CAAA;YACxC,MAAM,CAAC,OAAO,MAAM,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QAClD,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;YAC3C,MAAM,MAAM,GAAG,QAAQ,EAAE,CAAA;YACzB,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC;gBACnC,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,YAAY,EAAE;gBAC7D,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE;gBACxD,EAAE,KAAK,EAAE,mBAAmB,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,aAAa,EAAE;gBACrE,EAAE,KAAK,EAAE,mBAAmB,EAAE,IAAI,EAAE,kBAAkB,EAAE,IAAI,EAAE,eAAe,EAAE;aAChF,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,iBAAiB,EAAE,GAAG,EAAE;YACzB,MAAM,MAAM,GAAG,QAAQ,EAAE,CAAA;YACzB,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAA;YAC/C,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;QACnD,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;QAC7B,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;YACvD,MAAM,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAA;QACxC,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
@@ -10,7 +10,7 @@ interface AIScorePanelProps {
10
10
  grade: string;
11
11
  suggestions: Array<{
12
12
  text: string;
13
- priority: "high" | "medium" | "low";
13
+ priority: 'high' | 'medium' | 'low';
14
14
  }>;
15
15
  }
16
16
  /** Sidebar panel displaying content quality scores and actionable suggestions. */
@@ -1 +1 @@
1
- {"version":3,"file":"AIScorePanel.d.ts","sourceRoot":"","sources":["../../src/admin/AIScorePanel.tsx"],"names":[],"mappings":"AAIA,UAAU,iBAAiB;IACzB,MAAM,EAAE;QACN,WAAW,EAAE,MAAM,CAAC;QACpB,GAAG,EAAE,MAAM,CAAC;QACZ,cAAc,EAAE,MAAM,CAAC;QACvB,aAAa,EAAE,MAAM,CAAC;QACtB,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAA;KAAE,CAAC,CAAC;CAC3E;AAgBD,kFAAkF;AAClF,wBAAgB,YAAY,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,iBAAiB,2CAoE7E"}
1
+ {"version":3,"file":"AIScorePanel.d.ts","sourceRoot":"","sources":["../../src/admin/AIScorePanel.tsx"],"names":[],"mappings":"AAIA,UAAU,iBAAiB;IACzB,MAAM,EAAE;QACN,WAAW,EAAE,MAAM,CAAA;QACnB,GAAG,EAAE,MAAM,CAAA;QACX,cAAc,EAAE,MAAM,CAAA;QACtB,aAAa,EAAE,MAAM,CAAA;QACrB,SAAS,EAAE,MAAM,CAAA;QACjB,OAAO,EAAE,MAAM,CAAA;KAChB,CAAA;IACD,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAA;KAAE,CAAC,CAAA;CAC1E;AAgBD,kFAAkF;AAClF,wBAAgB,YAAY,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,iBAAiB,2CA8F7E"}
@@ -1,34 +1,51 @@
1
1
  'use client';
2
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  const PRIORITY_COLORS = {
4
- high: "#ef4444",
5
- medium: "#f59e0b",
6
- low: "#3b82f6",
4
+ high: '#ef4444',
5
+ medium: '#f59e0b',
6
+ low: '#3b82f6',
7
7
  };
8
8
  const SCORE_LABELS = [
9
- { key: "readability", label: "Readability" },
10
- { key: "seo", label: "SEO" },
11
- { key: "brandAlignment", label: "Brand Alignment" },
12
- { key: "accessibility", label: "Accessibility" },
13
- { key: "freshness", label: "Freshness" },
9
+ { key: 'readability', label: 'Readability' },
10
+ { key: 'seo', label: 'SEO' },
11
+ { key: 'brandAlignment', label: 'Brand Alignment' },
12
+ { key: 'accessibility', label: 'Accessibility' },
13
+ { key: 'freshness', label: 'Freshness' },
14
14
  ];
15
15
  /** Sidebar panel displaying content quality scores and actionable suggestions. */
16
16
  export function AIScorePanel({ scores, grade, suggestions }) {
17
- return (_jsxs("div", { style: { padding: "16px", borderLeft: "1px solid #e5e7eb", minWidth: 280 }, children: [_jsxs("div", { style: { display: "flex", justifyContent: "space-between", alignItems: "center", marginBottom: 16 }, children: [_jsx("h3", { style: { margin: 0, fontSize: 16, fontWeight: 600 }, children: "Content Score" }), _jsx("span", { style: {
17
+ return (_jsxs("div", { style: { padding: '16px', borderLeft: '1px solid #e5e7eb', minWidth: 280 }, children: [_jsxs("div", { style: {
18
+ display: 'flex',
19
+ justifyContent: 'space-between',
20
+ alignItems: 'center',
21
+ marginBottom: 16,
22
+ }, children: [_jsx("h3", { style: { margin: 0, fontSize: 16, fontWeight: 600 }, children: "Content Score" }), _jsx("span", { style: {
18
23
  fontSize: 24,
19
24
  fontWeight: 700,
20
- color: scores.overall >= 80 ? "#22c55e" : scores.overall >= 60 ? "#f59e0b" : "#ef4444",
21
- }, children: grade })] }), _jsxs("div", { style: { marginBottom: 16 }, children: [_jsx("div", { style: { fontSize: 32, fontWeight: 700, textAlign: "center", marginBottom: 4 }, children: scores.overall }), _jsx("div", { style: { fontSize: 12, color: "#6b7280", textAlign: "center" }, children: "Overall Score" })] }), _jsx("div", { style: { display: "flex", flexDirection: "column", gap: 12, marginBottom: 24 }, children: SCORE_LABELS.map(({ key, label }) => (_jsxs("div", { children: [_jsxs("div", { style: { display: "flex", justifyContent: "space-between", fontSize: 13, marginBottom: 4 }, children: [_jsx("span", { children: label }), _jsx("span", { style: { fontWeight: 500 }, children: scores[key] })] }), _jsx("div", { style: { height: 6, borderRadius: 3, backgroundColor: "#f3f4f6", overflow: "hidden" }, children: _jsx("div", { style: {
22
- height: "100%",
25
+ color: scores.overall >= 80 ? '#22c55e' : scores.overall >= 60 ? '#f59e0b' : '#ef4444',
26
+ }, children: grade })] }), _jsxs("div", { style: { marginBottom: 16 }, children: [_jsx("div", { style: { fontSize: 32, fontWeight: 700, textAlign: 'center', marginBottom: 4 }, children: scores.overall }), _jsx("div", { style: { fontSize: 12, color: '#6b7280', textAlign: 'center' }, children: "Overall Score" })] }), _jsx("div", { style: { display: 'flex', flexDirection: 'column', gap: 12, marginBottom: 24 }, children: SCORE_LABELS.map(({ key, label }) => (_jsxs("div", { children: [_jsxs("div", { style: {
27
+ display: 'flex',
28
+ justifyContent: 'space-between',
29
+ fontSize: 13,
30
+ marginBottom: 4,
31
+ }, children: [_jsx("span", { children: label }), _jsx("span", { style: { fontWeight: 500 }, children: scores[key] })] }), _jsx("div", { style: { height: 6, borderRadius: 3, backgroundColor: '#f3f4f6', overflow: 'hidden' }, children: _jsx("div", { style: {
32
+ height: '100%',
23
33
  width: `${scores[key]}%`,
24
34
  borderRadius: 3,
25
- backgroundColor: scores[key] >= 80 ? "#22c55e" : scores[key] >= 60 ? "#f59e0b" : "#ef4444",
26
- transition: "width 0.3s ease",
27
- } }) })] }, key))) }), suggestions.length > 0 && (_jsxs("div", { children: [_jsx("h4", { style: { fontSize: 14, fontWeight: 600, marginBottom: 8 }, children: "Suggestions" }), _jsx("ul", { style: { listStyle: "none", padding: 0, margin: 0, display: "flex", flexDirection: "column", gap: 8 }, children: suggestions.map((suggestion, idx) => (_jsx("li", { style: {
35
+ backgroundColor: scores[key] >= 80 ? '#22c55e' : scores[key] >= 60 ? '#f59e0b' : '#ef4444',
36
+ transition: 'width 0.3s ease',
37
+ } }) })] }, key))) }), suggestions.length > 0 && (_jsxs("div", { children: [_jsx("h4", { style: { fontSize: 14, fontWeight: 600, marginBottom: 8 }, children: "Suggestions" }), _jsx("ul", { style: {
38
+ listStyle: 'none',
39
+ padding: 0,
40
+ margin: 0,
41
+ display: 'flex',
42
+ flexDirection: 'column',
43
+ gap: 8,
44
+ }, children: suggestions.map((suggestion, idx) => (_jsx("li", { style: {
28
45
  fontSize: 13,
29
- padding: "8px 10px",
46
+ padding: '8px 10px',
30
47
  borderRadius: 6,
31
- backgroundColor: "#f9fafb",
48
+ backgroundColor: '#f9fafb',
32
49
  borderLeft: `3px solid ${PRIORITY_COLORS[suggestion.priority]}`,
33
50
  }, children: suggestion.text }, idx))) })] }))] }));
34
51
  }
@@ -1 +1 @@
1
- {"version":3,"file":"AIScorePanel.js","sourceRoot":"","sources":["../../src/admin/AIScorePanel.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"AIScorePanel.js","sourceRoot":"","sources":["../../src/admin/AIScorePanel.tsx"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import type { BrandVoiceProfile } from "../brand/voice-profile.js";
1
+ import type { BrandVoiceProfile } from '../brand/voice-profile.js';
2
2
  interface BrandVoiceSettingsProps {
3
3
  profile?: BrandVoiceProfile;
4
4
  onSave: (profile: BrandVoiceProfile) => void;
@@ -6,6 +6,6 @@ interface BrandVoiceSettingsProps {
6
6
  isAnalyzing?: boolean;
7
7
  }
8
8
  /** Editor for configuring brand voice profiles with tone sliders, vocabulary, and style settings. */
9
- export declare function BrandVoiceSettings({ profile, onSave, onAnalyze, isAnalyzing }: BrandVoiceSettingsProps): import("react/jsx-runtime").JSX.Element;
9
+ export declare function BrandVoiceSettings({ profile, onSave, onAnalyze, isAnalyzing, }: BrandVoiceSettingsProps): import("react/jsx-runtime").JSX.Element;
10
10
  export {};
11
11
  //# sourceMappingURL=BrandVoiceSettings.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"BrandVoiceSettings.d.ts","sourceRoot":"","sources":["../../src/admin/BrandVoiceSettings.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAEnE,UAAU,uBAAuB;IAC/B,OAAO,CAAC,EAAE,iBAAiB,CAAC;IAC5B,MAAM,EAAE,CAAC,OAAO,EAAE,iBAAiB,KAAK,IAAI,CAAC;IAC7C,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAiBD,qGAAqG;AACrG,wBAAgB,kBAAkB,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,EAAE,uBAAuB,2CA0OtG"}
1
+ {"version":3,"file":"BrandVoiceSettings.d.ts","sourceRoot":"","sources":["../../src/admin/BrandVoiceSettings.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAA;AAElE,UAAU,uBAAuB;IAC/B,OAAO,CAAC,EAAE,iBAAiB,CAAA;IAC3B,MAAM,EAAE,CAAC,OAAO,EAAE,iBAAiB,KAAK,IAAI,CAAA;IAC5C,SAAS,EAAE,MAAM,IAAI,CAAA;IACrB,WAAW,CAAC,EAAE,OAAO,CAAA;CACtB;AAsBD,qGAAqG;AACrG,wBAAgB,kBAAkB,CAAC,EACjC,OAAO,EACP,MAAM,EACN,SAAS,EACT,WAAW,GACZ,EAAE,uBAAuB,2CAsVzB"}