@iblai/iblai-js 2.10.3 → 2.11.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.
|
@@ -190957,15 +190957,17 @@ const PAGE_SIZE$7 = 20;
|
|
|
190957
190957
|
const SEARCH_DEBOUNCE_MS$3 = 300;
|
|
190958
190958
|
/**
|
|
190959
190959
|
* The public application URL on the auth SPA for one form of a platform
|
|
190960
|
-
* (`<auth-url>/applications/<platform-key>/<form-id>?redirect-to=<origin>`),
|
|
190961
|
-
* null when the auth SPA URL cannot be resolved. `authSpaUrl` (prop) wins;
|
|
190960
|
+
* (`<auth-url>/applications/<platform-key>/<form-id>?redirect-to=<origin>&app=<spa>`),
|
|
190961
|
+
* or null when the auth SPA URL cannot be resolved. `authSpaUrl` (prop) wins;
|
|
190962
190962
|
* otherwise the runtime-injected env (`window.__ENV__.NEXT_PUBLIC_AUTH_URL`) is
|
|
190963
190963
|
* used. With no `formId` the link resolves the platform's default form (404
|
|
190964
190964
|
* when none). The `redirect-to` param carries the origin the applicant is sent
|
|
190965
190965
|
* back to after submitting — by default the origin the link is copied from — and
|
|
190966
|
-
* is omitted when no origin can be read (no DOM).
|
|
190966
|
+
* is omitted when no origin can be read (no DOM). The `app` param carries the
|
|
190967
|
+
* SPA the link was copied from, so the login flow the applicant is sent through
|
|
190968
|
+
* (unauthenticated visitors) is branded for that SPA; omitted when unknown.
|
|
190967
190969
|
*/
|
|
190968
|
-
function buildApplicationLink(platformKey, formId, authSpaUrl, redirectTo) {
|
|
190970
|
+
function buildApplicationLink(platformKey, formId, authSpaUrl, redirectTo, currentSpa) {
|
|
190969
190971
|
var _a, _b;
|
|
190970
190972
|
const base = (_b = authSpaUrl !== null && authSpaUrl !== void 0 ? authSpaUrl : (typeof window !== 'undefined'
|
|
190971
190973
|
? (_a = window.__ENV__) === null || _a === void 0 ? void 0 : _a.NEXT_PUBLIC_AUTH_URL
|
|
@@ -190975,7 +190977,13 @@ function buildApplicationLink(platformKey, formId, authSpaUrl, redirectTo) {
|
|
|
190975
190977
|
const root = `${trimTrailingSlashes(base)}/applications/${encodeURIComponent(platformKey)}`;
|
|
190976
190978
|
const path = formId != null ? `${root}/${encodeURIComponent(String(formId))}` : root;
|
|
190977
190979
|
const target = (typeof window !== 'undefined' ? window.location.origin : undefined);
|
|
190978
|
-
|
|
190980
|
+
const query = new URLSearchParams();
|
|
190981
|
+
if (target)
|
|
190982
|
+
query.set('redirect-to', target);
|
|
190983
|
+
if (currentSpa)
|
|
190984
|
+
query.set('app', currentSpa);
|
|
190985
|
+
const search = query.toString();
|
|
190986
|
+
return search ? `${path}?${search}` : path;
|
|
190979
190987
|
}
|
|
190980
190988
|
/**
|
|
190981
190989
|
* Applications management. Entry view lists the platform's application forms
|
|
@@ -190983,7 +190991,7 @@ function buildApplicationLink(platformKey, formId, authSpaUrl, redirectTo) {
|
|
|
190983
190991
|
* per-form (or all-form) submission pipelines, the submission workspace with
|
|
190984
190992
|
* per-student decisions, the form/question editor, and the ban list.
|
|
190985
190993
|
*/
|
|
190986
|
-
function ApplicationsTab({ platformKey, authSpaUrl, }) {
|
|
190994
|
+
function ApplicationsTab({ platformKey, authSpaUrl, currentSpa, }) {
|
|
190987
190995
|
const [view, setView] = useState({ name: 'forms' });
|
|
190988
190996
|
if (view.name === 'editor') {
|
|
190989
190997
|
return (jsx(QuestionsEditor, { platformKey: platformKey, initialFormId: view.formId, startNew: view.startNew, onBack: () => setView({ name: 'forms' }) }));
|
|
@@ -190997,10 +191005,10 @@ function ApplicationsTab({ platformKey, authSpaUrl, }) {
|
|
|
190997
191005
|
if (view.name === 'submissions') {
|
|
190998
191006
|
return (jsx(SubmissionsPipeline, { platformKey: platformKey, form: view.form, onBack: () => setView({ name: 'forms' }), onOpen: (submissionId) => setView({ name: 'detail', submissionId, form: view.form }) }));
|
|
190999
191007
|
}
|
|
191000
|
-
return (jsx(FormsList, { platformKey: platformKey, authSpaUrl: authSpaUrl, onViewSubmissions: (form) => setView({ name: 'submissions', form }), onEditForm: (formId) => setView({ name: 'editor', formId, startNew: false }), onNewForm: () => setView({ name: 'editor', formId: null, startNew: true }), onViewBlocks: () => setView({ name: 'blocks' }) }));
|
|
191008
|
+
return (jsx(FormsList, { platformKey: platformKey, authSpaUrl: authSpaUrl, currentSpa: currentSpa, onViewSubmissions: (form) => setView({ name: 'submissions', form }), onEditForm: (formId) => setView({ name: 'editor', formId, startNew: false }), onNewForm: () => setView({ name: 'editor', formId: null, startNew: true }), onViewBlocks: () => setView({ name: 'blocks' }) }));
|
|
191001
191009
|
}
|
|
191002
191010
|
/** The entry view: every application form of the platform, with actions. */
|
|
191003
|
-
function FormsList({ platformKey, authSpaUrl, onViewSubmissions, onEditForm, onNewForm, onViewBlocks, }) {
|
|
191011
|
+
function FormsList({ platformKey, authSpaUrl, currentSpa, onViewSubmissions, onEditForm, onNewForm, onViewBlocks, }) {
|
|
191004
191012
|
const t = useT();
|
|
191005
191013
|
/** The form id whose link was just copied (transient "Copied" feedback). */
|
|
191006
191014
|
const [copiedFormId, setCopiedFormId] = useState(null);
|
|
@@ -191014,7 +191022,7 @@ function FormsList({ platformKey, authSpaUrl, onViewSubmissions, onEditForm, onN
|
|
|
191014
191022
|
const counts = statsCounts(stats);
|
|
191015
191023
|
const total = Object.values(counts).reduce((sum, n) => sum + n, 0);
|
|
191016
191024
|
const handleCopyLink = async (form) => {
|
|
191017
|
-
const link = buildApplicationLink(platformKey, form.id, authSpaUrl);
|
|
191025
|
+
const link = buildApplicationLink(platformKey, form.id, authSpaUrl, undefined, currentSpa);
|
|
191018
191026
|
if (!link)
|
|
191019
191027
|
return;
|
|
191020
191028
|
try {
|
|
@@ -191034,7 +191042,7 @@ function FormsList({ platformKey, authSpaUrl, onViewSubmissions, onEditForm, onN
|
|
|
191034
191042
|
? 'bg-blue-50 text-blue-700 border-blue-200 dark:bg-blue-900/30 dark:text-blue-300 dark:border-blue-900'
|
|
191035
191043
|
: 'bg-gray-100 text-gray-600 border-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:border-gray-600', children: t(form.enabled
|
|
191036
191044
|
? 'profileApplicationsTab.formEnabled'
|
|
191037
|
-
: 'profileApplicationsTab.formDisabled') }) }), jsx("td", { className: "whitespace-nowrap px-6 py-4 text-right", children: jsxs("div", { className: "flex items-center justify-end gap-1", children: [buildApplicationLink(platformKey, form.id, authSpaUrl) && (jsxs(Tooltip$1, { children: [jsx(TooltipTrigger, { asChild: true, children: jsxs(Button$1, { variant: "ghost", className: copiedFormId === form.id
|
|
191045
|
+
: 'profileApplicationsTab.formDisabled') }) }), jsx("td", { className: "whitespace-nowrap px-6 py-4 text-right", children: jsxs("div", { className: "flex items-center justify-end gap-1", children: [buildApplicationLink(platformKey, form.id, authSpaUrl, undefined, currentSpa) && (jsxs(Tooltip$1, { children: [jsx(TooltipTrigger, { asChild: true, children: jsxs(Button$1, { variant: "ghost", className: copiedFormId === form.id
|
|
191038
191046
|
? 'h-8 w-8 p-0 text-blue-600 dark:text-blue-400'
|
|
191039
191047
|
: 'h-8 w-8 p-0 text-gray-500 hover:text-gray-900 dark:text-gray-400 dark:hover:text-gray-100', onClick: () => handleCopyLink(form), "aria-label": t('profileApplicationsTab.copyFormLink', {
|
|
191040
191048
|
form: ((_b = form.schema) === null || _b === void 0 ? void 0 : _b.title) ||
|
|
@@ -191587,7 +191595,7 @@ const Admin = ({ tenant, onInviteClick, hasUserTabPermission = false, hasGroupsT
|
|
|
191587
191595
|
*/
|
|
191588
191596
|
const isWatcher = isPureWatcher(storeRbacPermissions, currentTenant);
|
|
191589
191597
|
const showUsersTab = isWatcher || hasUserTabPermission;
|
|
191590
|
-
return (jsx("div", { className: "border border-gray-200 rounded-lg p-6", children: jsxs(Tabs, { defaultValue: "users", "aria-label": t('profileAdmin.rbacManagementTabsAriaLabel'), children: [jsxs(TabsList, { "aria-label": t('profileAdmin.managementTabsAriaLabel'), className: "max-w-full overflow-x-auto justify-start px-1", children: [showUsersTab && jsx(TabsTrigger, { value: "users", children: t('profileAdmin.usersTab') }), !isWatcher && hasGroupsTabPermission && (jsx(TabsTrigger, { value: "groups", children: t('profileAdmin.groupsTab') })), !isWatcher && hasRolesTabPermission && (jsx(TabsTrigger, { value: "roles", children: t('profileAdmin.rolesTab') })), !isWatcher && hasPoliciesTabPermission && (jsx(TabsTrigger, { value: "policies", children: t('profileAdmin.policiesTab') })), !isWatcher && hasTeamsTabPermission && (jsx(TabsTrigger, { value: "teams", children: t('profileAdmin.teamsTab') })), !isWatcher && hasAlertsTabPermission && (jsx(TabsTrigger, { value: "alerts", children: t('profileAdmin.alertsTab') })), !isWatcher && (jsx(TabsTrigger, { value: "applications", children: t('profileAdmin.applicationsTab') })), !isWatcher && (jsx(TabsTrigger, { value: "onboarding", children: t('profileAdmin.onboardingTab') }))] }), showUsersTab && (jsxs(TabsContent, { className: "mt-4", value: "users", children: [jsx(TabDescription, { icon: jsx(Users, { className: "w-5 h-5" }), title: t('profileAdmin.usersTab'), children: t('profileAdmin.usersDescription') }), jsx(UsersTab, { tenant: tenant, onInviteClick: onInviteClick, currentSpa: currentSpa, showGradebookTab: showGradebookTab })] })), !isWatcher && hasGroupsTabPermission && (jsxs(TabsContent, { className: "mt-4", value: "groups", children: [jsx(TabDescription, { icon: jsx(UsersRound, { className: "w-5 h-5" }), title: t('profileAdmin.groupsTab'), children: t('profileAdmin.groupsDescription') }), jsx(GroupsTab, { tenant: tenant })] })), !isWatcher && hasRolesTabPermission && (jsxs(TabsContent, { className: "mt-4", value: "roles", children: [jsx(TabDescription, { icon: jsx(UserCog, { className: "w-5 h-5" }), title: t('profileAdmin.rolesTab'), children: t('profileAdmin.rolesDescription') }), jsx(RolesTab, { tenant: tenant })] })), !isWatcher && hasPoliciesTabPermission && (jsxs(TabsContent, { className: "mt-4", value: "policies", children: [jsx(TabDescription, { icon: jsx(ScrollText, { className: "w-5 h-5" }), title: t('profileAdmin.policiesTab'), children: t('profileAdmin.policiesDescription') }), jsx(PoliciesTab, { tenant: tenant })] })), !isWatcher && hasTeamsTabPermission && (jsxs(TabsContent, { className: "mt-4", value: "teams", children: [jsx(TabDescription, { icon: jsx(Shield, { className: "w-5 h-5" }), title: t('profileAdmin.teamsTab'), children: t('profileAdmin.teamsDescription') }), jsx(GroupsTab, { tenant: tenant, isTeam: true, onInviteClick: onInviteClick, hasInviteUserPermission: hasInviteUserPermission, hasCreateTeamPermission: hasCreateTeamPermission, onLoadGroupPermissions: onLoadGroupPermissions, rbacPermissions: rbacPermissions, enableRbac: enableRbac })] })), !isWatcher && hasAlertsTabPermission && (jsxs(TabsContent, { className: "mt-4", value: "alerts", children: [jsx(TabDescription, { icon: jsx(BellRing, { className: "w-5 h-5" }), title: t('profileAdmin.alertsTab'), children: t('profileAdmin.alertsDescription') }), jsx(AlertsTab$1, { tenant: tenant })] })), !isWatcher && (jsxs(TabsContent, { className: "mt-4", value: "applications", children: [jsx(TabDescription, { icon: jsx(ClipboardList, { className: "w-5 h-5" }), title: t('profileAdmin.applicationsTab'), children: t('profileAdmin.applicationsTabDescription') }), jsx(ApplicationsTab, { platformKey: tenant, authSpaUrl: authSpaUrl })] })), !isWatcher && (jsxs(TabsContent, { className: "mt-4", value: "onboarding", children: [jsx(TabDescription, { icon: jsx(UserPlus, { className: "w-5 h-5" }), title: t('profileAdmin.onboardingTab'), children: t('profileAdmin.onboardingTabDescription') }), jsx(OnboardingTab, { platformKey: tenant, onboardingBasePath: onboardingBasePath })] }))] }) }));
|
|
191598
|
+
return (jsx("div", { className: "border border-gray-200 rounded-lg p-6", children: jsxs(Tabs, { defaultValue: "users", "aria-label": t('profileAdmin.rbacManagementTabsAriaLabel'), children: [jsxs(TabsList, { "aria-label": t('profileAdmin.managementTabsAriaLabel'), className: "max-w-full overflow-x-auto justify-start px-1", children: [showUsersTab && jsx(TabsTrigger, { value: "users", children: t('profileAdmin.usersTab') }), !isWatcher && hasGroupsTabPermission && (jsx(TabsTrigger, { value: "groups", children: t('profileAdmin.groupsTab') })), !isWatcher && hasRolesTabPermission && (jsx(TabsTrigger, { value: "roles", children: t('profileAdmin.rolesTab') })), !isWatcher && hasPoliciesTabPermission && (jsx(TabsTrigger, { value: "policies", children: t('profileAdmin.policiesTab') })), !isWatcher && hasTeamsTabPermission && (jsx(TabsTrigger, { value: "teams", children: t('profileAdmin.teamsTab') })), !isWatcher && hasAlertsTabPermission && (jsx(TabsTrigger, { value: "alerts", children: t('profileAdmin.alertsTab') })), !isWatcher && (jsx(TabsTrigger, { value: "applications", children: t('profileAdmin.applicationsTab') })), !isWatcher && (jsx(TabsTrigger, { value: "onboarding", children: t('profileAdmin.onboardingTab') }))] }), showUsersTab && (jsxs(TabsContent, { className: "mt-4", value: "users", children: [jsx(TabDescription, { icon: jsx(Users, { className: "w-5 h-5" }), title: t('profileAdmin.usersTab'), children: t('profileAdmin.usersDescription') }), jsx(UsersTab, { tenant: tenant, onInviteClick: onInviteClick, currentSpa: currentSpa, showGradebookTab: showGradebookTab })] })), !isWatcher && hasGroupsTabPermission && (jsxs(TabsContent, { className: "mt-4", value: "groups", children: [jsx(TabDescription, { icon: jsx(UsersRound, { className: "w-5 h-5" }), title: t('profileAdmin.groupsTab'), children: t('profileAdmin.groupsDescription') }), jsx(GroupsTab, { tenant: tenant })] })), !isWatcher && hasRolesTabPermission && (jsxs(TabsContent, { className: "mt-4", value: "roles", children: [jsx(TabDescription, { icon: jsx(UserCog, { className: "w-5 h-5" }), title: t('profileAdmin.rolesTab'), children: t('profileAdmin.rolesDescription') }), jsx(RolesTab, { tenant: tenant })] })), !isWatcher && hasPoliciesTabPermission && (jsxs(TabsContent, { className: "mt-4", value: "policies", children: [jsx(TabDescription, { icon: jsx(ScrollText, { className: "w-5 h-5" }), title: t('profileAdmin.policiesTab'), children: t('profileAdmin.policiesDescription') }), jsx(PoliciesTab, { tenant: tenant })] })), !isWatcher && hasTeamsTabPermission && (jsxs(TabsContent, { className: "mt-4", value: "teams", children: [jsx(TabDescription, { icon: jsx(Shield, { className: "w-5 h-5" }), title: t('profileAdmin.teamsTab'), children: t('profileAdmin.teamsDescription') }), jsx(GroupsTab, { tenant: tenant, isTeam: true, onInviteClick: onInviteClick, hasInviteUserPermission: hasInviteUserPermission, hasCreateTeamPermission: hasCreateTeamPermission, onLoadGroupPermissions: onLoadGroupPermissions, rbacPermissions: rbacPermissions, enableRbac: enableRbac })] })), !isWatcher && hasAlertsTabPermission && (jsxs(TabsContent, { className: "mt-4", value: "alerts", children: [jsx(TabDescription, { icon: jsx(BellRing, { className: "w-5 h-5" }), title: t('profileAdmin.alertsTab'), children: t('profileAdmin.alertsDescription') }), jsx(AlertsTab$1, { tenant: tenant })] })), !isWatcher && (jsxs(TabsContent, { className: "mt-4", value: "applications", children: [jsx(TabDescription, { icon: jsx(ClipboardList, { className: "w-5 h-5" }), title: t('profileAdmin.applicationsTab'), children: t('profileAdmin.applicationsTabDescription') }), jsx(ApplicationsTab, { platformKey: tenant, authSpaUrl: authSpaUrl, currentSpa: currentSpa })] })), !isWatcher && (jsxs(TabsContent, { className: "mt-4", value: "onboarding", children: [jsx(TabDescription, { icon: jsx(UserPlus, { className: "w-5 h-5" }), title: t('profileAdmin.onboardingTab'), children: t('profileAdmin.onboardingTabDescription') }), jsx(OnboardingTab, { platformKey: tenant, onboardingBasePath: onboardingBasePath })] }))] }) }));
|
|
191591
191599
|
};
|
|
191592
191600
|
|
|
191593
191601
|
function DeleteApiModal({ isOpen, onClose, apiKey, tenantKey }) {
|
|
@@ -223577,15 +223577,17 @@ const PAGE_SIZE$b = 20;
|
|
|
223577
223577
|
const SEARCH_DEBOUNCE_MS$1 = 300;
|
|
223578
223578
|
/**
|
|
223579
223579
|
* The public application URL on the auth SPA for one form of a platform
|
|
223580
|
-
* (`<auth-url>/applications/<platform-key>/<form-id>?redirect-to=<origin>`),
|
|
223581
|
-
* null when the auth SPA URL cannot be resolved. `authSpaUrl` (prop) wins;
|
|
223580
|
+
* (`<auth-url>/applications/<platform-key>/<form-id>?redirect-to=<origin>&app=<spa>`),
|
|
223581
|
+
* or null when the auth SPA URL cannot be resolved. `authSpaUrl` (prop) wins;
|
|
223582
223582
|
* otherwise the runtime-injected env (`window.__ENV__.NEXT_PUBLIC_AUTH_URL`) is
|
|
223583
223583
|
* used. With no `formId` the link resolves the platform's default form (404
|
|
223584
223584
|
* when none). The `redirect-to` param carries the origin the applicant is sent
|
|
223585
223585
|
* back to after submitting — by default the origin the link is copied from — and
|
|
223586
|
-
* is omitted when no origin can be read (no DOM).
|
|
223586
|
+
* is omitted when no origin can be read (no DOM). The `app` param carries the
|
|
223587
|
+
* SPA the link was copied from, so the login flow the applicant is sent through
|
|
223588
|
+
* (unauthenticated visitors) is branded for that SPA; omitted when unknown.
|
|
223587
223589
|
*/
|
|
223588
|
-
function buildApplicationLink(platformKey, formId, authSpaUrl, redirectTo) {
|
|
223590
|
+
function buildApplicationLink(platformKey, formId, authSpaUrl, redirectTo, currentSpa) {
|
|
223589
223591
|
var _a, _b;
|
|
223590
223592
|
const base = (_b = authSpaUrl !== null && authSpaUrl !== void 0 ? authSpaUrl : (typeof window !== 'undefined'
|
|
223591
223593
|
? (_a = window.__ENV__) === null || _a === void 0 ? void 0 : _a.NEXT_PUBLIC_AUTH_URL
|
|
@@ -223595,7 +223597,13 @@ function buildApplicationLink(platformKey, formId, authSpaUrl, redirectTo) {
|
|
|
223595
223597
|
const root = `${trimTrailingSlashes(base)}/applications/${encodeURIComponent(platformKey)}`;
|
|
223596
223598
|
const path = formId != null ? `${root}/${encodeURIComponent(String(formId))}` : root;
|
|
223597
223599
|
const target = (typeof window !== 'undefined' ? window.location.origin : undefined);
|
|
223598
|
-
|
|
223600
|
+
const query = new URLSearchParams();
|
|
223601
|
+
if (target)
|
|
223602
|
+
query.set('redirect-to', target);
|
|
223603
|
+
if (currentSpa)
|
|
223604
|
+
query.set('app', currentSpa);
|
|
223605
|
+
const search = query.toString();
|
|
223606
|
+
return search ? `${path}?${search}` : path;
|
|
223599
223607
|
}
|
|
223600
223608
|
/**
|
|
223601
223609
|
* Applications management. Entry view lists the platform's application forms
|
|
@@ -223603,7 +223611,7 @@ function buildApplicationLink(platformKey, formId, authSpaUrl, redirectTo) {
|
|
|
223603
223611
|
* per-form (or all-form) submission pipelines, the submission workspace with
|
|
223604
223612
|
* per-student decisions, the form/question editor, and the ban list.
|
|
223605
223613
|
*/
|
|
223606
|
-
function ApplicationsTab({ platformKey, authSpaUrl, }) {
|
|
223614
|
+
function ApplicationsTab({ platformKey, authSpaUrl, currentSpa, }) {
|
|
223607
223615
|
const [view, setView] = useState({ name: 'forms' });
|
|
223608
223616
|
if (view.name === 'editor') {
|
|
223609
223617
|
return (jsx(QuestionsEditor, { platformKey: platformKey, initialFormId: view.formId, startNew: view.startNew, onBack: () => setView({ name: 'forms' }) }));
|
|
@@ -223617,10 +223625,10 @@ function ApplicationsTab({ platformKey, authSpaUrl, }) {
|
|
|
223617
223625
|
if (view.name === 'submissions') {
|
|
223618
223626
|
return (jsx(SubmissionsPipeline, { platformKey: platformKey, form: view.form, onBack: () => setView({ name: 'forms' }), onOpen: (submissionId) => setView({ name: 'detail', submissionId, form: view.form }) }));
|
|
223619
223627
|
}
|
|
223620
|
-
return (jsx(FormsList, { platformKey: platformKey, authSpaUrl: authSpaUrl, onViewSubmissions: (form) => setView({ name: 'submissions', form }), onEditForm: (formId) => setView({ name: 'editor', formId, startNew: false }), onNewForm: () => setView({ name: 'editor', formId: null, startNew: true }), onViewBlocks: () => setView({ name: 'blocks' }) }));
|
|
223628
|
+
return (jsx(FormsList, { platformKey: platformKey, authSpaUrl: authSpaUrl, currentSpa: currentSpa, onViewSubmissions: (form) => setView({ name: 'submissions', form }), onEditForm: (formId) => setView({ name: 'editor', formId, startNew: false }), onNewForm: () => setView({ name: 'editor', formId: null, startNew: true }), onViewBlocks: () => setView({ name: 'blocks' }) }));
|
|
223621
223629
|
}
|
|
223622
223630
|
/** The entry view: every application form of the platform, with actions. */
|
|
223623
|
-
function FormsList({ platformKey, authSpaUrl, onViewSubmissions, onEditForm, onNewForm, onViewBlocks, }) {
|
|
223631
|
+
function FormsList({ platformKey, authSpaUrl, currentSpa, onViewSubmissions, onEditForm, onNewForm, onViewBlocks, }) {
|
|
223624
223632
|
const t = useT();
|
|
223625
223633
|
/** The form id whose link was just copied (transient "Copied" feedback). */
|
|
223626
223634
|
const [copiedFormId, setCopiedFormId] = useState(null);
|
|
@@ -223634,7 +223642,7 @@ function FormsList({ platformKey, authSpaUrl, onViewSubmissions, onEditForm, onN
|
|
|
223634
223642
|
const counts = statsCounts(stats);
|
|
223635
223643
|
const total = Object.values(counts).reduce((sum, n) => sum + n, 0);
|
|
223636
223644
|
const handleCopyLink = async (form) => {
|
|
223637
|
-
const link = buildApplicationLink(platformKey, form.id, authSpaUrl);
|
|
223645
|
+
const link = buildApplicationLink(platformKey, form.id, authSpaUrl, undefined, currentSpa);
|
|
223638
223646
|
if (!link)
|
|
223639
223647
|
return;
|
|
223640
223648
|
try {
|
|
@@ -223654,7 +223662,7 @@ function FormsList({ platformKey, authSpaUrl, onViewSubmissions, onEditForm, onN
|
|
|
223654
223662
|
? 'bg-blue-50 text-blue-700 border-blue-200 dark:bg-blue-900/30 dark:text-blue-300 dark:border-blue-900'
|
|
223655
223663
|
: 'bg-gray-100 text-gray-600 border-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:border-gray-600', children: t(form.enabled
|
|
223656
223664
|
? 'profileApplicationsTab.formEnabled'
|
|
223657
|
-
: 'profileApplicationsTab.formDisabled') }) }), jsx("td", { className: "whitespace-nowrap px-6 py-4 text-right", children: jsxs("div", { className: "flex items-center justify-end gap-1", children: [buildApplicationLink(platformKey, form.id, authSpaUrl) && (jsxs(Tooltip$1, { children: [jsx(TooltipTrigger, { asChild: true, children: jsxs(Button$1, { variant: "ghost", className: copiedFormId === form.id
|
|
223665
|
+
: 'profileApplicationsTab.formDisabled') }) }), jsx("td", { className: "whitespace-nowrap px-6 py-4 text-right", children: jsxs("div", { className: "flex items-center justify-end gap-1", children: [buildApplicationLink(platformKey, form.id, authSpaUrl, undefined, currentSpa) && (jsxs(Tooltip$1, { children: [jsx(TooltipTrigger, { asChild: true, children: jsxs(Button$1, { variant: "ghost", className: copiedFormId === form.id
|
|
223658
223666
|
? 'h-8 w-8 p-0 text-blue-600 dark:text-blue-400'
|
|
223659
223667
|
: 'h-8 w-8 p-0 text-gray-500 hover:text-gray-900 dark:text-gray-400 dark:hover:text-gray-100', onClick: () => handleCopyLink(form), "aria-label": t('profileApplicationsTab.copyFormLink', {
|
|
223660
223668
|
form: ((_b = form.schema) === null || _b === void 0 ? void 0 : _b.title) ||
|
|
@@ -224123,7 +224131,7 @@ const Admin = ({ tenant, onInviteClick, hasUserTabPermission = false, hasGroupsT
|
|
|
224123
224131
|
*/
|
|
224124
224132
|
const isWatcher = isPureWatcher(storeRbacPermissions, currentTenant);
|
|
224125
224133
|
const showUsersTab = isWatcher || hasUserTabPermission;
|
|
224126
|
-
return (jsx("div", { className: "border border-gray-200 rounded-lg p-6", children: jsxs(Tabs, { defaultValue: "users", "aria-label": t('profileAdmin.rbacManagementTabsAriaLabel'), children: [jsxs(TabsList, { "aria-label": t('profileAdmin.managementTabsAriaLabel'), className: "max-w-full overflow-x-auto justify-start px-1", children: [showUsersTab && jsx(TabsTrigger, { value: "users", children: t('profileAdmin.usersTab') }), !isWatcher && hasGroupsTabPermission && (jsx(TabsTrigger, { value: "groups", children: t('profileAdmin.groupsTab') })), !isWatcher && hasRolesTabPermission && (jsx(TabsTrigger, { value: "roles", children: t('profileAdmin.rolesTab') })), !isWatcher && hasPoliciesTabPermission && (jsx(TabsTrigger, { value: "policies", children: t('profileAdmin.policiesTab') })), !isWatcher && hasTeamsTabPermission && (jsx(TabsTrigger, { value: "teams", children: t('profileAdmin.teamsTab') })), !isWatcher && hasAlertsTabPermission && (jsx(TabsTrigger, { value: "alerts", children: t('profileAdmin.alertsTab') })), !isWatcher && (jsx(TabsTrigger, { value: "applications", children: t('profileAdmin.applicationsTab') })), !isWatcher && (jsx(TabsTrigger, { value: "onboarding", children: t('profileAdmin.onboardingTab') }))] }), showUsersTab && (jsxs(TabsContent, { className: "mt-4", value: "users", children: [jsx(TabDescription, { icon: jsx(Users, { className: "w-5 h-5" }), title: t('profileAdmin.usersTab'), children: t('profileAdmin.usersDescription') }), jsx(UsersTab, { tenant: tenant, onInviteClick: onInviteClick, currentSpa: currentSpa, showGradebookTab: showGradebookTab })] })), !isWatcher && hasGroupsTabPermission && (jsxs(TabsContent, { className: "mt-4", value: "groups", children: [jsx(TabDescription, { icon: jsx(UsersRound, { className: "w-5 h-5" }), title: t('profileAdmin.groupsTab'), children: t('profileAdmin.groupsDescription') }), jsx(GroupsTab, { tenant: tenant })] })), !isWatcher && hasRolesTabPermission && (jsxs(TabsContent, { className: "mt-4", value: "roles", children: [jsx(TabDescription, { icon: jsx(UserCog, { className: "w-5 h-5" }), title: t('profileAdmin.rolesTab'), children: t('profileAdmin.rolesDescription') }), jsx(RolesTab, { tenant: tenant })] })), !isWatcher && hasPoliciesTabPermission && (jsxs(TabsContent, { className: "mt-4", value: "policies", children: [jsx(TabDescription, { icon: jsx(ScrollText, { className: "w-5 h-5" }), title: t('profileAdmin.policiesTab'), children: t('profileAdmin.policiesDescription') }), jsx(PoliciesTab, { tenant: tenant })] })), !isWatcher && hasTeamsTabPermission && (jsxs(TabsContent, { className: "mt-4", value: "teams", children: [jsx(TabDescription, { icon: jsx(Shield, { className: "w-5 h-5" }), title: t('profileAdmin.teamsTab'), children: t('profileAdmin.teamsDescription') }), jsx(GroupsTab, { tenant: tenant, isTeam: true, onInviteClick: onInviteClick, hasInviteUserPermission: hasInviteUserPermission, hasCreateTeamPermission: hasCreateTeamPermission, onLoadGroupPermissions: onLoadGroupPermissions, rbacPermissions: rbacPermissions, enableRbac: enableRbac })] })), !isWatcher && hasAlertsTabPermission && (jsxs(TabsContent, { className: "mt-4", value: "alerts", children: [jsx(TabDescription, { icon: jsx(BellRing, { className: "w-5 h-5" }), title: t('profileAdmin.alertsTab'), children: t('profileAdmin.alertsDescription') }), jsx(AlertsTab, { tenant: tenant })] })), !isWatcher && (jsxs(TabsContent, { className: "mt-4", value: "applications", children: [jsx(TabDescription, { icon: jsx(ClipboardList, { className: "w-5 h-5" }), title: t('profileAdmin.applicationsTab'), children: t('profileAdmin.applicationsTabDescription') }), jsx(ApplicationsTab, { platformKey: tenant, authSpaUrl: authSpaUrl })] })), !isWatcher && (jsxs(TabsContent, { className: "mt-4", value: "onboarding", children: [jsx(TabDescription, { icon: jsx(UserPlus, { className: "w-5 h-5" }), title: t('profileAdmin.onboardingTab'), children: t('profileAdmin.onboardingTabDescription') }), jsx(OnboardingTab, { platformKey: tenant, onboardingBasePath: onboardingBasePath })] }))] }) }));
|
|
224134
|
+
return (jsx("div", { className: "border border-gray-200 rounded-lg p-6", children: jsxs(Tabs, { defaultValue: "users", "aria-label": t('profileAdmin.rbacManagementTabsAriaLabel'), children: [jsxs(TabsList, { "aria-label": t('profileAdmin.managementTabsAriaLabel'), className: "max-w-full overflow-x-auto justify-start px-1", children: [showUsersTab && jsx(TabsTrigger, { value: "users", children: t('profileAdmin.usersTab') }), !isWatcher && hasGroupsTabPermission && (jsx(TabsTrigger, { value: "groups", children: t('profileAdmin.groupsTab') })), !isWatcher && hasRolesTabPermission && (jsx(TabsTrigger, { value: "roles", children: t('profileAdmin.rolesTab') })), !isWatcher && hasPoliciesTabPermission && (jsx(TabsTrigger, { value: "policies", children: t('profileAdmin.policiesTab') })), !isWatcher && hasTeamsTabPermission && (jsx(TabsTrigger, { value: "teams", children: t('profileAdmin.teamsTab') })), !isWatcher && hasAlertsTabPermission && (jsx(TabsTrigger, { value: "alerts", children: t('profileAdmin.alertsTab') })), !isWatcher && (jsx(TabsTrigger, { value: "applications", children: t('profileAdmin.applicationsTab') })), !isWatcher && (jsx(TabsTrigger, { value: "onboarding", children: t('profileAdmin.onboardingTab') }))] }), showUsersTab && (jsxs(TabsContent, { className: "mt-4", value: "users", children: [jsx(TabDescription, { icon: jsx(Users, { className: "w-5 h-5" }), title: t('profileAdmin.usersTab'), children: t('profileAdmin.usersDescription') }), jsx(UsersTab, { tenant: tenant, onInviteClick: onInviteClick, currentSpa: currentSpa, showGradebookTab: showGradebookTab })] })), !isWatcher && hasGroupsTabPermission && (jsxs(TabsContent, { className: "mt-4", value: "groups", children: [jsx(TabDescription, { icon: jsx(UsersRound, { className: "w-5 h-5" }), title: t('profileAdmin.groupsTab'), children: t('profileAdmin.groupsDescription') }), jsx(GroupsTab, { tenant: tenant })] })), !isWatcher && hasRolesTabPermission && (jsxs(TabsContent, { className: "mt-4", value: "roles", children: [jsx(TabDescription, { icon: jsx(UserCog, { className: "w-5 h-5" }), title: t('profileAdmin.rolesTab'), children: t('profileAdmin.rolesDescription') }), jsx(RolesTab, { tenant: tenant })] })), !isWatcher && hasPoliciesTabPermission && (jsxs(TabsContent, { className: "mt-4", value: "policies", children: [jsx(TabDescription, { icon: jsx(ScrollText, { className: "w-5 h-5" }), title: t('profileAdmin.policiesTab'), children: t('profileAdmin.policiesDescription') }), jsx(PoliciesTab, { tenant: tenant })] })), !isWatcher && hasTeamsTabPermission && (jsxs(TabsContent, { className: "mt-4", value: "teams", children: [jsx(TabDescription, { icon: jsx(Shield, { className: "w-5 h-5" }), title: t('profileAdmin.teamsTab'), children: t('profileAdmin.teamsDescription') }), jsx(GroupsTab, { tenant: tenant, isTeam: true, onInviteClick: onInviteClick, hasInviteUserPermission: hasInviteUserPermission, hasCreateTeamPermission: hasCreateTeamPermission, onLoadGroupPermissions: onLoadGroupPermissions, rbacPermissions: rbacPermissions, enableRbac: enableRbac })] })), !isWatcher && hasAlertsTabPermission && (jsxs(TabsContent, { className: "mt-4", value: "alerts", children: [jsx(TabDescription, { icon: jsx(BellRing, { className: "w-5 h-5" }), title: t('profileAdmin.alertsTab'), children: t('profileAdmin.alertsDescription') }), jsx(AlertsTab, { tenant: tenant })] })), !isWatcher && (jsxs(TabsContent, { className: "mt-4", value: "applications", children: [jsx(TabDescription, { icon: jsx(ClipboardList, { className: "w-5 h-5" }), title: t('profileAdmin.applicationsTab'), children: t('profileAdmin.applicationsTabDescription') }), jsx(ApplicationsTab, { platformKey: tenant, authSpaUrl: authSpaUrl, currentSpa: currentSpa })] })), !isWatcher && (jsxs(TabsContent, { className: "mt-4", value: "onboarding", children: [jsx(TabDescription, { icon: jsx(UserPlus, { className: "w-5 h-5" }), title: t('profileAdmin.onboardingTab'), children: t('profileAdmin.onboardingTabDescription') }), jsx(OnboardingTab, { platformKey: tenant, onboardingBasePath: onboardingBasePath })] }))] }) }));
|
|
224127
224135
|
};
|
|
224128
224136
|
|
|
224129
224137
|
function DeleteApiModal$1({ isOpen, onClose, apiKey, tenantKey }) {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@iblai/iblai-js",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.11.0",
|
|
4
4
|
"description": "Unified JavaScript SDK for IBL.ai — re-exports data-layer, web-containers, and web-utils under a single package",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"engines": {
|
|
@@ -76,10 +76,10 @@
|
|
|
76
76
|
"axios": "1.13.6",
|
|
77
77
|
"dotenv": "16.6.1",
|
|
78
78
|
"winston": "3.19.0",
|
|
79
|
-
"@iblai/mcp": "1.12.12",
|
|
80
79
|
"@iblai/data-layer": "1.13.3",
|
|
81
|
-
"@iblai/web-containers": "1.
|
|
82
|
-
"@iblai/web-utils": "2.4.6"
|
|
80
|
+
"@iblai/web-containers": "1.20.0",
|
|
81
|
+
"@iblai/web-utils": "2.4.6",
|
|
82
|
+
"@iblai/mcp": "1.12.12"
|
|
83
83
|
},
|
|
84
84
|
"peerDependencies": {
|
|
85
85
|
"@iblai/iblai-api": "4.166.0-ai",
|