@windward/integrations 0.16.0 → 0.18.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.
- package/CHANGELOG.md +21 -0
- package/components/Integration/AiAgentIntegration/ChatWindow.vue +916 -0
- package/components/Integration/Driver/LoginSamlButton.vue +119 -0
- package/components/Integration/Driver/ManageSaml.vue +327 -0
- package/components/LLM/BloomTaxonomySelector.vue +120 -0
- package/components/LLM/ContentSelector.vue +66 -0
- package/components/LLM/GenerateContent/AssessmentQuestionGenerateButton.vue +285 -0
- package/components/LLM/GenerateContent/BlockQuestionGenerateButton.vue +514 -0
- package/components/LLM/GenerateContent/FakeTextStream.vue +67 -0
- package/components/SecretField.vue +62 -5
- package/config/integration.config.js +2 -0
- package/helpers/Driver/SamlSso.ts +12 -0
- package/i18n/en-US/components/ai_agent/chat.ts +20 -0
- package/i18n/en-US/components/ai_agent/index.ts +5 -0
- package/i18n/en-US/components/index.ts +4 -0
- package/i18n/en-US/components/integration/driver.ts +23 -0
- package/i18n/en-US/components/llm/blooms.ts +15 -0
- package/i18n/en-US/components/llm/content_selector.ts +3 -0
- package/i18n/en-US/components/llm/generate_content/fake_text_stream.ts +62 -0
- package/i18n/en-US/components/llm/generate_content/generate_questions.ts +81 -0
- package/i18n/en-US/components/llm/generate_content/index.ts +7 -0
- package/i18n/en-US/components/llm/index.ts +10 -0
- package/i18n/en-US/pages/login/index.ts +2 -0
- package/i18n/en-US/pages/login/saml.ts +7 -0
- package/i18n/en-US/shared/permission.ts +10 -0
- package/i18n/en-US/shared/settings.ts +2 -1
- package/i18n/es-ES/components/ai_agent/chat.ts +20 -0
- package/i18n/es-ES/components/ai_agent/index.ts +5 -0
- package/i18n/es-ES/components/index.ts +4 -0
- package/i18n/es-ES/components/integration/driver.ts +23 -0
- package/i18n/es-ES/components/llm/blooms.ts +15 -0
- package/i18n/es-ES/components/llm/content_selector.ts +3 -0
- package/i18n/es-ES/components/llm/generate_content/fake_text_stream.ts +62 -0
- package/i18n/es-ES/components/llm/generate_content/generate_questions.ts +85 -0
- package/i18n/es-ES/components/llm/generate_content/index.ts +7 -0
- package/i18n/es-ES/components/llm/index.ts +10 -0
- package/i18n/es-ES/pages/login/index.ts +2 -0
- package/i18n/es-ES/pages/login/saml.ts +7 -0
- package/i18n/es-ES/shared/permission.ts +10 -0
- package/i18n/es-ES/shared/settings.ts +2 -1
- package/i18n/sv-SE/components/ai_agent/chat.ts +19 -0
- package/i18n/sv-SE/components/ai_agent/index.ts +5 -0
- package/i18n/sv-SE/components/index.ts +4 -0
- package/i18n/sv-SE/components/integration/driver.ts +23 -0
- package/i18n/sv-SE/components/llm/blooms.ts +15 -0
- package/i18n/sv-SE/components/llm/content_selector.ts +3 -0
- package/i18n/sv-SE/components/llm/generate_content/fake_text_stream.ts +62 -0
- package/i18n/sv-SE/components/llm/generate_content/generate_questions.ts +82 -0
- package/i18n/sv-SE/components/llm/generate_content/index.ts +7 -0
- package/i18n/sv-SE/components/llm/index.ts +10 -0
- package/i18n/sv-SE/pages/login/index.ts +2 -0
- package/i18n/sv-SE/pages/login/saml.ts +7 -0
- package/i18n/sv-SE/shared/permission.ts +10 -0
- package/i18n/sv-SE/shared/settings.ts +1 -0
- package/jest.config.js +3 -0
- package/models/Activity.ts +8 -0
- package/models/AgentChat.ts +12 -0
- package/models/AgentChatMessage.ts +12 -0
- package/models/Auth/Saml.ts +21 -0
- package/package.json +2 -1
- package/plugin.js +51 -1
- package/test/__mocks__/componentsMock.js +81 -1
- package/test/setup.js +1 -0
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export default {
|
|
2
|
+
new_chat: 'Ny chatt',
|
|
3
|
+
recent_chats: 'Senaste chattar',
|
|
4
|
+
untitled_chat: 'Namnlös chatt',
|
|
5
|
+
no_history: 'Inga senaste chattar',
|
|
6
|
+
system_tip:
|
|
7
|
+
'Hej! Jag är här för att hjälpa till med din kurs. Fråga gärna om lärandemål, innehållsstruktur eller bästa praxis.',
|
|
8
|
+
placeholder: 'Fråga om ditt kursinnehåll...',
|
|
9
|
+
hint: 'Tryck Enter för att skicka, Skift+Enter för ny rad',
|
|
10
|
+
error_generic: 'Något gick fel. Försök igen.',
|
|
11
|
+
error_with_status: 'Något gick fel. Försök igen. (Fel {status})',
|
|
12
|
+
action_try_again: 'Försök igen',
|
|
13
|
+
action_dismiss: 'Avfärda',
|
|
14
|
+
sender_you: 'Du',
|
|
15
|
+
sender_agent: 'Assistent',
|
|
16
|
+
limit_reached:
|
|
17
|
+
'Du har nått det maximala antalet tillåtna meddelanden i den här chatten. Starta en ny chatt för att fortsätta.',
|
|
18
|
+
aria_open_history: 'Öppna chatthistorik',
|
|
19
|
+
}
|
|
@@ -4,12 +4,16 @@ import navigation from './navigation'
|
|
|
4
4
|
import integration from './integration'
|
|
5
5
|
import externalIntegration from './external_integration'
|
|
6
6
|
import fileImport from './file_import'
|
|
7
|
+
import aiAgent from './ai_agent'
|
|
8
|
+
import llm from './llm'
|
|
7
9
|
|
|
8
10
|
export default {
|
|
9
11
|
content,
|
|
10
12
|
settings,
|
|
11
13
|
navigation,
|
|
12
14
|
integration,
|
|
15
|
+
llm,
|
|
13
16
|
external_integration: externalIntegration,
|
|
14
17
|
file_import: fileImport,
|
|
18
|
+
ai_agent: aiAgent,
|
|
15
19
|
}
|
|
@@ -34,6 +34,29 @@ export default {
|
|
|
34
34
|
username: 'Användarnamn',
|
|
35
35
|
key: 'API Key',
|
|
36
36
|
},
|
|
37
|
+
saml_sso: {
|
|
38
|
+
manage_dialog_title: 'Hantera SAML SSO-integration',
|
|
39
|
+
idp_entity_id: 'Identitetsleverantörens enhets-ID',
|
|
40
|
+
idp_entity_id_hint: 'Den unika identifieraren för din IdP (t.ex. http://www.okta.com/exk1fxphPNZPCOB3v0g3)',
|
|
41
|
+
idp_sso_url: 'URL för enkel inloggning',
|
|
42
|
+
idp_sso_url_hint: 'URL:en dit användare omdirigeras för autentisering',
|
|
43
|
+
idp_slo_url: 'URL för enkel utloggning (Valfritt)',
|
|
44
|
+
idp_slo_url_hint: 'URL:en för att logga ut från IdP',
|
|
45
|
+
idp_x509_cert: 'X.509-certifikat',
|
|
46
|
+
idp_x509_cert_hint: 'Klistra in certifikatinnehållet från din IdP-metadata (utan BEGIN/END-rader)',
|
|
47
|
+
sp_details: 'Tjänsteleverantörsdetaljer',
|
|
48
|
+
sp_details_description: 'Ge dessa uppgifter till din identitetsleverantörsadministratör:',
|
|
49
|
+
cert_stored: 'Certifikat säkert lagrat',
|
|
50
|
+
button_settings: 'Inställningar för inloggningsknapp',
|
|
51
|
+
button_label: 'Knappetikett',
|
|
52
|
+
button_label_hint: 'Text att visa på SSO-inloggningsknappen',
|
|
53
|
+
button_label_default: 'Logga in med SSO',
|
|
54
|
+
button_icon: 'Knappikon',
|
|
55
|
+
button_icon_hint: 'Material Design-ikonnamn (t.ex. mdi-login, mdi-account-key)',
|
|
56
|
+
sp_entity_id_label: 'SP Entity ID',
|
|
57
|
+
acs_url_label: 'ACS URL',
|
|
58
|
+
slo_url_label: 'SLO URL',
|
|
59
|
+
},
|
|
37
60
|
enabled: 'Integration aktiverad',
|
|
38
61
|
disabled: 'Integration inaktiverad',
|
|
39
62
|
ssl_enabled: 'SSL aktiverat (Bör vara aktiverad för produktion)',
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export default {
|
|
2
|
+
blooms_taxonomy: 'Blooms taxonominivå',
|
|
3
|
+
none: 'Ingen vald',
|
|
4
|
+
remember: 'Komma ihåg',
|
|
5
|
+
understand: 'Förstå',
|
|
6
|
+
apply: 'Tillämpas',
|
|
7
|
+
analyze: 'Analysera',
|
|
8
|
+
evaluate: 'Utvärdera',
|
|
9
|
+
errors: {
|
|
10
|
+
insufficient_content_blooms:
|
|
11
|
+
'Otillräckligt innehåll för att generera kvalitetsfrågor på {bloomsLevel}-nivån.',
|
|
12
|
+
insufficient_content_blooms_support:
|
|
13
|
+
'Vänligen lägg till mer detaljerad text, exempel eller förklaringar till detta avsnitt. Vi rekommenderar minst {minimumRequired} ord av relevant innehåll för att generera lämpliga frågor på denna nivå.',
|
|
14
|
+
},
|
|
15
|
+
}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
export default {
|
|
2
|
+
options: [
|
|
3
|
+
'Navigera neurala nätverk',
|
|
4
|
+
'Konsultera oraklet',
|
|
5
|
+
'Konsultera hivemind',
|
|
6
|
+
'Tänka...',
|
|
7
|
+
'Generera svar',
|
|
8
|
+
'Gå igenom AI-tankelandskapet',
|
|
9
|
+
'Syntetisera svar',
|
|
10
|
+
'Kompilera bäst anpassade lösningar',
|
|
11
|
+
'Utvärdera sannolikheter',
|
|
12
|
+
'Retikulera splines',
|
|
13
|
+
'Kiseltankar pågår...',
|
|
14
|
+
'Arrangera nollor och ettor',
|
|
15
|
+
'Åtkomst till cumulus',
|
|
16
|
+
'Se smart ut på konstgjort sätt',
|
|
17
|
+
'Begrunda det oändliga',
|
|
18
|
+
'Översätta byte',
|
|
19
|
+
'Övertyga data',
|
|
20
|
+
'Initiera artificiell logik',
|
|
21
|
+
'Tankar buffrar...',
|
|
22
|
+
'Kontrollera väl av artificiell visdom',
|
|
23
|
+
'Tillbaka till rekursiva toner.',
|
|
24
|
+
'Brottas med GPU-marknaden',
|
|
25
|
+
'Ställer in effekten till 1,21 gigawatt',
|
|
26
|
+
'Fisker data från strömmen',
|
|
27
|
+
'Konsulterar stjärnor',
|
|
28
|
+
'Kontrollerar Schrödingers katt',
|
|
29
|
+
'Förhandlar med kaffemaskinen',
|
|
30
|
+
'Kretsar runt frågan. Landar snart',
|
|
31
|
+
'Dammtorkar av gamla skriftrullar',
|
|
32
|
+
'Prater med ethernetportarna',
|
|
33
|
+
'Snurrar upp hamsterhjulen',
|
|
34
|
+
'Hamstrarna blir trötta',
|
|
35
|
+
'Avkodar kosmiska stavfel',
|
|
36
|
+
'Synkronisera vibrationer',
|
|
37
|
+
'Vallar elektroner',
|
|
38
|
+
'Letar under soffan efter svar',
|
|
39
|
+
'Förhör data',
|
|
40
|
+
'Omkalibrerar elektronflödet',
|
|
41
|
+
'Argumenterar med autokorrigering',
|
|
42
|
+
'Be Clippy om svar',
|
|
43
|
+
'Beräknar dramatisk paus...',
|
|
44
|
+
'Skakar magisk 8-boll',
|
|
45
|
+
'Laggar plothål',
|
|
46
|
+
'Startar om routern...',
|
|
47
|
+
'Stänger av och sätter på den igen',
|
|
48
|
+
'Nästan där. Förmodligen. Kanske.',
|
|
49
|
+
'Vänder digitala mynt',
|
|
50
|
+
'Tänker utanför den simulerade boxen',
|
|
51
|
+
'Lägger till sås i spaghettikod',
|
|
52
|
+
'Vallar digitala katter',
|
|
53
|
+
'Defragmenterar beslut',
|
|
54
|
+
'Lyssnar på uppringningsljud',
|
|
55
|
+
'Krypterar pinsam tystnad',
|
|
56
|
+
'Be brödrost om råd',
|
|
57
|
+
'Laddar skämtgeneratorn',
|
|
58
|
+
'Polerar ettor och nollor',
|
|
59
|
+
'Sträcker virtuella ben',
|
|
60
|
+
'Konsulterar humörringarloggar',
|
|
61
|
+
],
|
|
62
|
+
}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
export default {
|
|
2
|
+
errors: {
|
|
3
|
+
default: 'Kunde inte generera fråga från tillhandahållet innehåll.',
|
|
4
|
+
default_support:
|
|
5
|
+
'Försök igen eller kontakta supporten om problemet kvarstår.',
|
|
6
|
+
|
|
7
|
+
insufficient_content: 'Mer innehåll behövs för att generera frågor.',
|
|
8
|
+
insufficient_content_support:
|
|
9
|
+
'Vänligen lägg till mer text, exempel eller förklaringar till det här avsnittet. Vi rekommenderar minst 2-3 stycken innehåll.',
|
|
10
|
+
|
|
11
|
+
insufficient_content_dynamic:
|
|
12
|
+
'Otillräckligt innehåll för att generera kvalitetsfrågor.',
|
|
13
|
+
insufficient_content_dynamic_support:
|
|
14
|
+
'Vänligen lägg till mer detaljerad text, exempel eller förklaringar till detta avsnitt. Vi rekommenderar minst {minimumRequired} ord av relevant innehåll för att generera lämpliga frågor.',
|
|
15
|
+
|
|
16
|
+
content_mismatch: 'Innehållet matchar inte frågetyp.',
|
|
17
|
+
content_mismatch_support:
|
|
18
|
+
'Vänligen lägg till mer text, exempel eller förklaringar till detta avsnitt. Vi rekommenderar minst 50 ord av relevant innehåll för att generera lämpliga frågor.',
|
|
19
|
+
|
|
20
|
+
content_mismatch_bucket_game:
|
|
21
|
+
'Innehållet är inte lämpligt för kategorispel.',
|
|
22
|
+
content_mismatch_bucket_game_support:
|
|
23
|
+
'Överväg att lägga till innehåll med tydliga kategorier och flera sorterbara objekt som kan grupperas i 2-4 distinkta kategorier.',
|
|
24
|
+
|
|
25
|
+
content_mismatch_matching_game:
|
|
26
|
+
'Innehållet är inte lämpligt för matchningsspel.',
|
|
27
|
+
content_mismatch_matching_game_support:
|
|
28
|
+
'Överväg att lägga till innehåll som uttryckligen definierar relationer mellan termer, koncept eller kategorier som elever kan matcha.',
|
|
29
|
+
|
|
30
|
+
content_mismatch_sorting_game:
|
|
31
|
+
'Innehållet är inte lämpligt för sorteringsspel.',
|
|
32
|
+
content_mismatch_sorting_game_support:
|
|
33
|
+
'Överväg att lägga till innehåll med sekventiella steg, kronologiska händelser eller objekt som har en tydlig logisk ordning för elever att arrangera.',
|
|
34
|
+
|
|
35
|
+
content_mismatch_scenario_game:
|
|
36
|
+
'Innehållet är inte lämpligt för scenariospel.',
|
|
37
|
+
content_mismatch_scenario_game_support:
|
|
38
|
+
'Överväg att lägga till innehåll som beskriver koncept, processer eller principer som kan tillämpas i verkliga scenarier.',
|
|
39
|
+
|
|
40
|
+
content_mismatch_word_jumble:
|
|
41
|
+
'Innehållet är inte lämpligt för ordvirrvarr-spel.',
|
|
42
|
+
content_mismatch_word_jumble_support:
|
|
43
|
+
'Överväg att lägga till innehåll med tydliga vokabulärtermer, ordlistor eller nyckelkoncept som kan blandas.',
|
|
44
|
+
|
|
45
|
+
content_mismatch_multiple_choice:
|
|
46
|
+
'Innehållet är inte lämpligt för flervalsfrågor.',
|
|
47
|
+
content_mismatch_multiple_choice_support:
|
|
48
|
+
'Överväg att lägga till tydlig, förklarande text med distinkta koncept, definitioner eller exempel som stödjer skapandet av frågor och distraktorer.',
|
|
49
|
+
|
|
50
|
+
character_limit:
|
|
51
|
+
'Ett fel uppstod när innehållet genererades. Försök generera igen.',
|
|
52
|
+
character_limit_detailed:
|
|
53
|
+
'Fältet {field} överskrider gränsen på {limit} tecken (för närvarande {actual} tecken). Försök generera igen med kortare innehåll.',
|
|
54
|
+
|
|
55
|
+
llm_unavailable: 'Frågegenerering tillfälligt otillgänglig.',
|
|
56
|
+
llm_unavailable_support:
|
|
57
|
+
'Vi kan inte ansluta till vår AI-tjänst för tillfället. Försök igen om några minuter.',
|
|
58
|
+
|
|
59
|
+
technical: 'Kan inte behandla begäran.',
|
|
60
|
+
technical_support:
|
|
61
|
+
'Något gick fel. Försök igen eller kontakta supporten om detta fortsätter.',
|
|
62
|
+
},
|
|
63
|
+
button_label: 'Generera fråga',
|
|
64
|
+
button_label_flashcard: 'Generera flashkort',
|
|
65
|
+
button_label_bucket_game: 'Generera kategorier',
|
|
66
|
+
button_label_matching_game: 'Generera matchningar',
|
|
67
|
+
button_label_sorting_game: 'Generera objekt',
|
|
68
|
+
button_label_scenario_game: 'Generera scenarier',
|
|
69
|
+
button_label_word_jumble: 'Generera objekt',
|
|
70
|
+
button_label_seven_strikes: 'Generera objekt',
|
|
71
|
+
button_label_multiple_choice: 'Generera frågor',
|
|
72
|
+
|
|
73
|
+
replace_existing_flashcard: 'Ersätt befintliga flashcards',
|
|
74
|
+
replace_existing_bucket_game: 'Ersätt befintliga hinkar',
|
|
75
|
+
replace_existing_matching_game: 'Ersätt befintliga matchningar',
|
|
76
|
+
replace_existing_sorting_game: 'Ersätt befintliga objekt',
|
|
77
|
+
replace_existing_word_jumble: 'Ersätt befintliga ord',
|
|
78
|
+
replace_existing_multiple_choice: 'Ersätt befintliga frågor',
|
|
79
|
+
replace_existing: 'Ersätt befintlig',
|
|
80
|
+
|
|
81
|
+
replaces_content: 'Ersätter aktuellt blockinnehåll.',
|
|
82
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import generateContent from './generate_content'
|
|
2
|
+
import blooms from './blooms'
|
|
3
|
+
import contentSelector from './content_selector'
|
|
4
|
+
|
|
5
|
+
export default {
|
|
6
|
+
ai_assistance: 'AI-hjälp',
|
|
7
|
+
generate_content: generateContent,
|
|
8
|
+
blooms,
|
|
9
|
+
content_selector: contentSelector,
|
|
10
|
+
}
|
|
@@ -10,6 +10,16 @@ export default {
|
|
|
10
10
|
'plugin->windward->integrations->content': 'Innehållsintegrationer',
|
|
11
11
|
'plugin->windward->integrations->course->externalIntegration':
|
|
12
12
|
'Externa integrationer (LTI / SCORM / etc)',
|
|
13
|
+
'plugin->windward->integrations->ai':
|
|
14
|
+
'Globala behörigheter för generativ AI',
|
|
15
|
+
'plugin->windward->integrations->ai->integration':
|
|
16
|
+
'Behörigheter för att ändra AI‑uppmaningar',
|
|
17
|
+
'plugin->windward->integrations->organization->ai':
|
|
18
|
+
'Behörigheter för generativ AI endast i användarens nuvarande organisation',
|
|
19
|
+
'plugin->windward->integrations->organization->aiAgentChat':
|
|
20
|
+
'Tillåt åtkomst till AI‑agent',
|
|
21
|
+
'plugin->windward->integrations->organization->course->ai':
|
|
22
|
+
'Behörigheter för generativ AI endast i användarens nuvarande organisation och kurs för innehållsgenerering',
|
|
13
23
|
},
|
|
14
24
|
|
|
15
25
|
type_description: {
|
package/jest.config.js
CHANGED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
// @ts-ignore
|
|
2
|
+
import Model from '~/models/Model'
|
|
3
|
+
|
|
4
|
+
export default class Saml extends Model {
|
|
5
|
+
get required(): string[] {
|
|
6
|
+
return []
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
// Set the resource route of the model
|
|
10
|
+
resource() {
|
|
11
|
+
return 'saml'
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
// Static method for custom endpoints
|
|
15
|
+
static custom(endpoint: string): any {
|
|
16
|
+
const instance = new Saml()
|
|
17
|
+
// Override the resource for this specific instance
|
|
18
|
+
instance.resource = () => endpoint
|
|
19
|
+
return instance
|
|
20
|
+
}
|
|
21
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@windward/integrations",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.18.0",
|
|
4
4
|
"description": "Windward UI Plugin Integrations for 3rd Party Systems",
|
|
5
5
|
"main": "plugin.js",
|
|
6
6
|
"scripts": {
|
|
@@ -21,6 +21,7 @@
|
|
|
21
21
|
"license": "MIT",
|
|
22
22
|
"homepage": "https://bitbucket.org/mindedge/windward-ui-plugin-integrations#readme",
|
|
23
23
|
"dependencies": {
|
|
24
|
+
"@mindedge/vue-api-query": "^1.15.1",
|
|
24
25
|
"@windward/core": "^0.8.0",
|
|
25
26
|
"canvas-confetti": "^1.6.0",
|
|
26
27
|
"eslint": "^8.11.0",
|
package/plugin.js
CHANGED
|
@@ -16,6 +16,12 @@ import FileImportGoogleDrive from './components/FileImport/GoogleDrive.vue'
|
|
|
16
16
|
import FileImportDropbox from './components/FileImport/Dropbox.vue'
|
|
17
17
|
|
|
18
18
|
import CourseJobLog from './components/Navigation/Items/CourseJobLog.vue'
|
|
19
|
+
import ChatWindow from './components/Integration/AiAgentIntegration/ChatWindow.vue'
|
|
20
|
+
|
|
21
|
+
import AssessmentQuestionGenerateButton from './components/LLM/GenerateContent/AssessmentQuestionGenerateButton.vue'
|
|
22
|
+
import BlockQuestionGenerateButton from './components/LLM/GenerateContent/BlockQuestionGenerateButton.vue'
|
|
23
|
+
|
|
24
|
+
import LoginSamlButton from './components/Integration/Driver/LoginSamlButton.vue'
|
|
19
25
|
|
|
20
26
|
export default {
|
|
21
27
|
name: 'windward.integrations.name',
|
|
@@ -62,6 +68,21 @@ export default {
|
|
|
62
68
|
},
|
|
63
69
|
],
|
|
64
70
|
components: {
|
|
71
|
+
userLogin: [
|
|
72
|
+
{
|
|
73
|
+
tag: 'windward-integrations-login-saml',
|
|
74
|
+
template: LoginSamlButton,
|
|
75
|
+
},
|
|
76
|
+
// Future SSO methods can be added here:
|
|
77
|
+
// {
|
|
78
|
+
// tag: 'windward-integrations-login-oauth2',
|
|
79
|
+
// template: LoginOAuth2Button,
|
|
80
|
+
// },
|
|
81
|
+
// {
|
|
82
|
+
// tag: 'windward-integrations-login-google',
|
|
83
|
+
// template: LoginGoogleButton,
|
|
84
|
+
// },
|
|
85
|
+
],
|
|
65
86
|
menu: [
|
|
66
87
|
{
|
|
67
88
|
ref_page: 'admin',
|
|
@@ -149,6 +170,19 @@ export default {
|
|
|
149
170
|
},
|
|
150
171
|
},
|
|
151
172
|
},
|
|
173
|
+
{
|
|
174
|
+
tag: 'windward-integrations-ai-chat-agent',
|
|
175
|
+
template: ChatWindow,
|
|
176
|
+
context: ['course'],
|
|
177
|
+
icon: 'mdi-chat-outline',
|
|
178
|
+
i18n: 'windward.integrations.shared.settings.title.ai_chat',
|
|
179
|
+
display: ['toolpanel'],
|
|
180
|
+
permissions: {
|
|
181
|
+
'plugin.windward.integrations.organization.aiAgentChat': {
|
|
182
|
+
writable: true,
|
|
183
|
+
},
|
|
184
|
+
},
|
|
185
|
+
},
|
|
152
186
|
],
|
|
153
187
|
contentBlock: [
|
|
154
188
|
{
|
|
@@ -162,7 +196,7 @@ export default {
|
|
|
162
196
|
},
|
|
163
197
|
},
|
|
164
198
|
],
|
|
165
|
-
|
|
199
|
+
contentBlockSetting: [
|
|
166
200
|
{
|
|
167
201
|
tag: 'windward-integrations-lti-consumer-settings',
|
|
168
202
|
template: LtiConsumerBlockSettings,
|
|
@@ -172,6 +206,8 @@ export default {
|
|
|
172
206
|
name: 'windward.integrations.shared.settings.title.lti_consumer',
|
|
173
207
|
},
|
|
174
208
|
},
|
|
209
|
+
],
|
|
210
|
+
courseSetting: [
|
|
175
211
|
{
|
|
176
212
|
tag: 'windward-integrations-external-integration-settings',
|
|
177
213
|
template: ManageCourseIntegrationSettings,
|
|
@@ -215,6 +251,20 @@ export default {
|
|
|
215
251
|
},
|
|
216
252
|
},
|
|
217
253
|
],
|
|
254
|
+
contentBlockSettingTool: [
|
|
255
|
+
{
|
|
256
|
+
tag: 'windward-integrations-llm-activity-generate',
|
|
257
|
+
template: BlockQuestionGenerateButton,
|
|
258
|
+
context: ['block'],
|
|
259
|
+
},
|
|
260
|
+
],
|
|
261
|
+
contentBlockSettingAssessmentTool: [
|
|
262
|
+
{
|
|
263
|
+
tag: 'windward-integrations-llm-assessment-question-generate',
|
|
264
|
+
template: AssessmentQuestionGenerateButton,
|
|
265
|
+
context: ['block.content-blocks-assessment'],
|
|
266
|
+
},
|
|
267
|
+
],
|
|
218
268
|
},
|
|
219
269
|
services: {
|
|
220
270
|
Integration: IntegrationHelper,
|
|
@@ -1 +1,81 @@
|
|
|
1
|
-
|
|
1
|
+
import Vue from 'vue'
|
|
2
|
+
|
|
3
|
+
Vue.component('SearchField', {
|
|
4
|
+
name: 'SearchField',
|
|
5
|
+
template: '<div>SearchField</div>',
|
|
6
|
+
})
|
|
7
|
+
|
|
8
|
+
Vue.component('v-expansion-panels', {
|
|
9
|
+
name: 'v-expansion-panels',
|
|
10
|
+
template: '<div>v-expansion-panels</div>',
|
|
11
|
+
})
|
|
12
|
+
|
|
13
|
+
Vue.component('v-expansion-panel', {
|
|
14
|
+
name: 'v-expansion-panel',
|
|
15
|
+
template: '<div>v-expansion-panel</div>',
|
|
16
|
+
})
|
|
17
|
+
|
|
18
|
+
Vue.component('v-expansion-panel-header', {
|
|
19
|
+
name: 'v-expansion-panel-header',
|
|
20
|
+
template: '<div>v-expansion-panel-header</div>',
|
|
21
|
+
})
|
|
22
|
+
|
|
23
|
+
Vue.component('v-expansion-panel-content', {
|
|
24
|
+
name: 'v-expansion-panel-content',
|
|
25
|
+
template: '<div>v-expansion-panel-content</div>',
|
|
26
|
+
})
|
|
27
|
+
|
|
28
|
+
Vue.component('v-tabs', {
|
|
29
|
+
name: 'v-tabs',
|
|
30
|
+
template: '<div>v-tabs</div>',
|
|
31
|
+
})
|
|
32
|
+
|
|
33
|
+
Vue.component('v-tabs-slider', {
|
|
34
|
+
name: 'v-tabs-slider',
|
|
35
|
+
template: '<div>v-tabs-slider</div>',
|
|
36
|
+
})
|
|
37
|
+
|
|
38
|
+
Vue.component('v-tab', {
|
|
39
|
+
name: 'v-tab',
|
|
40
|
+
template: '<div>v-tab</div>',
|
|
41
|
+
})
|
|
42
|
+
|
|
43
|
+
Vue.component('v-tabs-items', {
|
|
44
|
+
name: 'v-tabs-items',
|
|
45
|
+
template: '<div>v-tabs-items</div>',
|
|
46
|
+
})
|
|
47
|
+
|
|
48
|
+
Vue.component('v-tab-item', {
|
|
49
|
+
name: 'v-tab-item',
|
|
50
|
+
template: '<div>v-tab-item</div>',
|
|
51
|
+
})
|
|
52
|
+
|
|
53
|
+
Vue.component('v-select', {
|
|
54
|
+
name: 'v-select',
|
|
55
|
+
template: '<div>v-select</div>',
|
|
56
|
+
})
|
|
57
|
+
|
|
58
|
+
Vue.component('v-autocomplete', {
|
|
59
|
+
name: 'v-autocomplete',
|
|
60
|
+
template: '<div>v-autocomplete</div>',
|
|
61
|
+
})
|
|
62
|
+
|
|
63
|
+
Vue.component('v-switch', {
|
|
64
|
+
name: 'v-switch',
|
|
65
|
+
template: '<div>v-switch</div>',
|
|
66
|
+
})
|
|
67
|
+
|
|
68
|
+
Vue.component('v-divider', {
|
|
69
|
+
name: 'v-divider',
|
|
70
|
+
template: '<div>v-divider</div>',
|
|
71
|
+
})
|
|
72
|
+
|
|
73
|
+
Vue.component('v-progress-circular', {
|
|
74
|
+
name: 'v-progress-circular',
|
|
75
|
+
template: '<div>v-progress-circular</div>',
|
|
76
|
+
})
|
|
77
|
+
|
|
78
|
+
Vue.component('v-treeview', {
|
|
79
|
+
name: 'v-treeview',
|
|
80
|
+
template: '<div>v-treeview</div>',
|
|
81
|
+
})
|
package/test/setup.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
// This file is intentionally left blank.
|