fixing
continuous-integration/drone/push Build is passing Details

This commit is contained in:
Sabda Yagra 2026-03-03 16:26:11 +07:00
parent 67e7c1be45
commit 283e8b4cdb
25 changed files with 352 additions and 185 deletions

View File

@ -41,6 +41,7 @@ import {
import { cn } from "@/lib/utils";
import { useTranslations } from "next-intl";
import { getCategoriesAll } from "@/service/service/settings/settings";
import { listArticleCategories } from "@/service/content";
const FormSchema = z.object({
name: z.string({
@ -62,15 +63,17 @@ export default function CreateTagModal() {
const form = useForm<z.infer<typeof FormSchema>>({
resolver: zodResolver(FormSchema),
defaultValues: {
name: "",
category: "",
},
});
const onSubmit = async (data: z.infer<typeof FormSchema>) => {
const request = {
tagName: data.name,
categoryId: Number(data.category),
isActive: true,
};
console.log("reqqq", request);
// const response = await postDataFeedback(request);
// close();
// if (response?.error) {
@ -86,22 +89,29 @@ export default function CreateTagModal() {
};
useEffect(() => {
getCategoryParent();
const fetchCategories = async () => {
try {
const response = await listArticleCategories(1, 100);
if (response?.error) {
console.error("Failed to fetch categories:", response.message);
return;
}
const categories =
response?.data?.data?.map((item: any) => ({
value: String(item.id), // wajib string
label: item.title, // pakai title dari API
})) || [];
setCategoryList(categories);
} catch (error) {
console.error("Failed to fetch categories:", error);
}
};
fetchCategories();
}, []);
async function getCategoryParent() {
const response = await getCategoriesAll();
const res = response?.data?.data.content;
console.log("res", res);
var levelsArr: { id: number; label: string; value: string }[] = [];
res.forEach((levels: { id: number; name: string }) => {
levelsArr.push({
id: levels.id,
label: levels.name,
value: String(levels.id),
});
});
setCategoryList(levelsArr);
}
return (
<Dialog open={isOpen} onOpenChange={setIsOpen}>
@ -112,13 +122,16 @@ export default function CreateTagModal() {
</DialogTrigger>
<DialogContent size="md">
<DialogHeader>
<DialogTitle> {t("add-tags", { defaultValue: "Add Tags" })}</DialogTitle>
<DialogTitle>
{" "}
{t("add-tags", { defaultValue: "Add Tags" })}
</DialogTitle>
</DialogHeader>
<Form {...form}>
<form
onSubmit={form.handleSubmit(onSubmit)}
className="space-y-3 bg-white dark:bg-default-50 rounded-sm"
>
>
<FormField
control={form.control}
name="category"
@ -133,12 +146,12 @@ export default function CreateTagModal() {
role="combobox"
className={cn(
"w-[400px] justify-between",
!field.value && "text-muted-foreground"
!field.value && "text-muted-foreground",
)}
>
{field.value
? categoryList.find(
(categ) => categ.value === field.value
(categ) => categ.value === field.value,
)?.label
: "Pilih level"}
<ChevronsUpDown className="ml-2 h-4 w-4 shrink-0 opacity-50" />
@ -165,7 +178,7 @@ export default function CreateTagModal() {
"ml-auto",
role.value === field.value
? "opacity-100"
: "opacity-0"
: "opacity-0",
)}
/>
</CommandItem>

View File

@ -58,6 +58,7 @@ import useTableColumns from "./columns";
import { errorAutoClose, successAutoClose } from "@/lib/swal";
import { close, loading } from "@/config/swal";
import DetailTenant from "@/components/form/tenant/tenant-detail-update-form";
import { getInfoProfile } from "@/service/auth";
function TenantSettingsContentTable() {
const [activeTab, setActiveTab] = useLocalStorage(
@ -199,25 +200,42 @@ function TenantSettingsContentTable() {
<div className="container mx-auto p-6 space-y-6 border rounded-lg">
<div className="flex items-center justify-between ">
<div>
<h1 className="text-3xl font-bold text-gray-900 dark:text-white">Tenant Settings</h1>
<h1 className="text-3xl font-bold text-gray-900 dark:text-white">
Tenant Settings
</h1>
<p className="text-gray-600 mt-2">
Manage approval workflows and user levels for your tenant
</p>
</div>
{/* <div className="flex items-center gap-2">
<div className="flex items-center gap-2">
<SettingsIcon className="h-6 w-6 text-gray-500" />
<Button variant="outline" size="sm" onClick={checkWorkflowStatus}>
{/* <Button variant="outline" size="sm" onClick={checkWorkflowStatus}>
Check Workflow Status
</Button>
</Button> */}
<Button
variant="outline"
size="sm"
className="bg-red-50 text-red-600 border-red-200 hover:bg-red-100"
onClick={async () => {
const res = await getInfoProfile();
const workflowInfo = res?.data?.data?.approvalWorkflowInfo;
if (workflowInfo) {
showWorkflowModal(workflowInfo);
}
}}
>
Test Modal
</Button>
{/* <Button
variant="outline"
size="sm"
onClick={() => showWorkflowModal({ hasWorkflowSetup: false })}
className="bg-red-50 text-red-600 border-red-200 hover:bg-red-100"
>
Test Modal
</Button>
</div> */}
</Button> */}
</div>
</div>
<Tabs value={activeTab} onValueChange={setActiveTab} className="w-full">
@ -431,7 +449,9 @@ function TenantSettingsContentTable() {
{step.stepOrder}
</div>
<div>
<div className="font-medium text-black">{step.stepName}</div>
<div className="font-medium text-black">
{step.stepName}
</div>
<div className="text-sm text-gray-500">
{step.conditionType &&
`Condition: ${step.conditionType}`}
@ -905,7 +925,7 @@ function TenantSettingsContentTable() {
<UserLevelsForm
mode="single"
initialData={{
// id: editingUserLevel.id,
id: editingUserLevel.id,
name: editingUserLevel.name,
aliasName: editingUserLevel.aliasName,
levelNumber: editingUserLevel.levelNumber,

View File

@ -71,10 +71,18 @@ export const LoginForm: React.FC<LoginFormProps> = ({
}
};
// const onSubmit = async (data: LoginFormData) => {
// try {
// // onSuccess?.(data);
// await handleLogin(data);
// } catch (error: any) {
// onError?.(error.message || "Login failed");
// }
// };
const onSubmit = async (data: LoginFormData) => {
try {
// onSuccess?.(data);
await handleLogin(data);
onSuccess?.(data); // hanya kirim data ke AuthPage
} catch (error: any) {
onError?.(error.message || "Login failed");
}

View File

@ -47,7 +47,8 @@ import { getMenuActionsByMenuId, MenuAction } from "@/service/menu-actions";
import Swal from "sweetalert2";
interface UserLevelsFormProps {
initialData?: UserLevelsCreateRequest;
// initialData?: UserLevelsCreateRequest;
initialData?: UserLevelsCreateRequest & { id?: number };
onSave?: (data: UserLevelsCreateRequest) => void;
onCancel?: () => void;
isLoading?: boolean;
@ -458,8 +459,14 @@ export const UserLevelsForm: React.FC<UserLevelsFormProps> = ({
try {
const isBulkMode = activeTab === "bulk";
const isEditing = Boolean((initialData as any)?.id);
const userLevelId = (initialData as any)?.id;
// const isEditing = Boolean((initialData as any)?.id);
// const userLevelId = (initialData as any)?.id;
const isEditing = typeof initialData?.id === "number";
const userLevelId = initialData?.id;
console.log("IS EDITING:", isEditing);
console.log("USER LEVEL ID:", userLevelId);
/* ===============================
* BULK MODE
@ -520,8 +527,15 @@ export const UserLevelsForm: React.FC<UserLevelsFormProps> = ({
}
let response;
if (isEditing) {
response = await updateUserLevel(userLevelId, formData);
// if (isEditing) {
// response = await updateUserLevel(userLevelId, formData);
// } else {
// response = await createUserLevel(formData);
// }
if (isEditing && userLevelId !== undefined) {
const { id, ...payload } = formData as any;
response = await updateUserLevel(userLevelId, payload);
} else {
response = await createUserLevel(formData);
}

View File

@ -261,10 +261,8 @@ export default function FormImage() {
pointOfView: "None",
clientId: "",
};
console.log("Sending request for title with data:", titleData);
const titleRes = await getGenerateTitle(titleData);
setTitle(titleRes?.data?.data || "");
console.log("Generated title:", titleRes?.data?.data);
const keywordsData = {
keyword: selectedMainKeyword,
@ -275,12 +273,9 @@ export default function FormImage() {
pointOfView: "None",
clientId: "",
};
console.log("Sending request for keywords with data:", keywordsData);
const keywordsRes = await getGenerateKeywords(keywordsData);
setSelectedSEO(keywordsRes?.data?.data || []);
console.log("Generated keywords:", keywordsRes?.data?.data);
} catch (error) {
console.error("Error during generation process:", error);
} finally {
setIsLoading(false);
}
@ -310,9 +305,7 @@ export default function FormImage() {
console.log("Sending request for title with data:", titleData);
const titleRes = await getGenerateTitle(titleData);
setTitle(titleRes?.data?.data || "");
console.log("Generated title:", titleRes?.data?.data);
} catch (error) {
console.error("Error generating title:", error);
} finally {
setIsLoading(false);
}
@ -322,7 +315,6 @@ export default function FormImage() {
title: "WARNING",
text: "Please provide a valid title.",
});
console.error("Please provide a valid main keyword.");
}
};
@ -339,10 +331,8 @@ export default function FormImage() {
pointOfView: "None",
clientId: "",
};
console.log("Sending request for keywords with data:", keywordsData);
const keywordsRes = await getGenerateKeywords(keywordsData);
setSelectedSEO(keywordsRes?.data?.data || []);
console.log("Generated keywords:", keywordsRes?.data?.data);
} catch (error) {
console.error("Error generating keywords:", error);
} finally {
@ -378,7 +368,6 @@ export default function FormImage() {
};
const res = await generateDataArticle(request);
console.log("AI RESPONSE FULL:", res);
close();
if (res?.error) {

View File

@ -113,12 +113,12 @@ export function WorkflowModalProvider({ children }: WorkflowModalProviderProps)
return (
<WorkflowModalContext.Provider value={{ showWorkflowModal, hideWorkflowModal, refreshWorkflowStatus }}>
{children}
{/* <WorkflowSetupModal
<WorkflowSetupModal
isOpen={isModalOpen}
onClose={hideWorkflowModal}
workflowInfo={workflowInfo}
onRefresh={refreshWorkflowStatus}
/> */}
/>
</WorkflowModalContext.Provider>
);
}

View File

@ -1,6 +1,11 @@
"use client";
import React, { useState, useEffect } from "react";
import { Dialog, DialogContent, DialogHeader, DialogTitle } from "@/components/ui/dialog";
import {
Dialog,
DialogContent,
DialogHeader,
DialogTitle,
} from "@/components/ui/dialog";
import { Button } from "@/components/ui/button";
import { Card, CardContent } from "@/components/ui/card";
import { IconX, SettingsIcon } from "@/components/icons";
@ -20,7 +25,12 @@ interface WorkflowSetupModalProps {
onRefresh?: () => Promise<void>;
}
export default function WorkflowSetupModal({ isOpen, onClose, workflowInfo, onRefresh }: WorkflowSetupModalProps) {
export default function WorkflowSetupModal({
isOpen,
onClose,
workflowInfo,
onRefresh,
}: WorkflowSetupModalProps) {
const router = useRouter();
const pathname = usePathname();
const [isVisible, setIsVisible] = useState(false);
@ -33,7 +43,11 @@ export default function WorkflowSetupModal({ isOpen, onClose, workflowInfo, onRe
const handleClose = () => {
// Allow closing if workflow is setup OR if user is on tenant settings page
if (workflowInfo?.hasWorkflowSetup || pathname?.includes('/admin/settings/tenant') || pathname?.includes('/tenant')) {
if (
workflowInfo?.hasWorkflowSetup ||
pathname?.includes("/admin/settings/tenant") ||
pathname?.includes("/tenant")
) {
setIsVisible(false);
setTimeout(() => {
onClose();
@ -50,21 +64,35 @@ export default function WorkflowSetupModal({ isOpen, onClose, workflowInfo, onRe
if (!isOpen) return null;
return (
<Dialog
open={isVisible}
onOpenChange={(workflowInfo?.hasWorkflowSetup || pathname?.includes('/admin/settings/tenant') || pathname?.includes('/tenant')) ? handleClose : undefined}
<Dialog
open={isVisible}
onOpenChange={
workflowInfo?.hasWorkflowSetup ||
pathname?.includes("/admin/settings/tenant") ||
pathname?.includes("/tenant")
? handleClose
: undefined
}
>
<DialogContent
<DialogContent
className="max-w-md"
onPointerDownOutside={(e) => {
// Prevent closing by clicking outside unless workflow is setup or on tenant settings page
if (!workflowInfo?.hasWorkflowSetup && !pathname?.includes('/admin/settings/tenant') && !pathname?.includes('/tenant')) {
if (
!workflowInfo?.hasWorkflowSetup &&
!pathname?.includes("/admin/settings/tenant") &&
!pathname?.includes("/tenant")
) {
e.preventDefault();
}
}}
onEscapeKeyDown={(e) => {
// Prevent closing by pressing ESC unless workflow is setup or on tenant settings page
if (!workflowInfo?.hasWorkflowSetup && !pathname?.includes('/admin/settings/tenant') && !pathname?.includes('/tenant')) {
if (
!workflowInfo?.hasWorkflowSetup &&
!pathname?.includes("/admin/settings/tenant") &&
!pathname?.includes("/tenant")
) {
e.preventDefault();
}
}}
@ -85,46 +113,139 @@ export default function WorkflowSetupModal({ isOpen, onClose, workflowInfo, onRe
</DialogHeader>
<div className="space-y-4">
{!workflowInfo?.hasWorkflowSetup ? (
// No Workflow Setup
<Card className="border-orange-200 bg-orange-50">
<CardContent className="p-4">
<div className="flex items-start gap-3">
<div className="h-6 w-6 rounded-full bg-orange-600 flex items-center justify-center mt-1">
<span className="text-white text-sm">!</span>
{
!workflowInfo?.hasWorkflowSetup ? (
// No Workflow Setup
<Card className="border-orange-200 bg-orange-50">
<CardContent className="p-4">
<div className="flex items-start gap-3">
<div className="h-6 w-6 rounded-full bg-orange-600 flex items-center justify-center mt-1">
<span className="text-white text-sm">!</span>
</div>
<div className="flex-1">
<h3 className="font-medium text-orange-900 mb-2">
Workflow Belum Dikonfigurasi
</h3>
<p className="text-sm text-orange-700 mb-4">
Anda belum melakukan setup workflow, silahkan setup
terlebih dahulu.
</p>
<div className="flex gap-2">
<Button
onClick={handleSetupWorkflow}
className="bg-orange-600 hover:bg-orange-700 text-white"
size="sm"
>
<SettingsIcon className="h-4 w-4 mr-2" />
Setup Workflow
</Button>
{(pathname?.includes("/admin/settings/tenant") ||
pathname?.includes("/tenant")) && (
<Button
variant="outline"
onClick={handleClose}
size="sm"
>
Cancel
</Button>
)}
</div>
</div>
</div>
<div className="flex-1">
<h3 className="font-medium text-orange-900 mb-2">
Workflow Belum Dikonfigurasi
</h3>
<p className="text-sm text-orange-700 mb-4">
Anda belum melakukan setup workflow, silahkan setup terlebih dahulu.
</p>
<div className="flex gap-2">
<Button
</CardContent>
</Card>
) : (
<Card className="border-green-200 bg-green-50">
<CardContent className="p-5 space-y-4">
<div className="flex items-start gap-3">
<div className="h-6 w-6 rounded-full bg-green-600 flex items-center justify-center mt-1">
<span className="text-white text-sm"></span>
</div>
<div className="flex-1">
<h3 className="font-semibold text-green-900 mb-3">
Workflow Sudah Dikonfigurasi
</h3>
<div className="space-y-2 text-sm">
<div className="flex justify-between">
<span className="text-gray-600">
Default Workflow
</span>
<span className="font-medium">
{workflowInfo.defaultWorkflowName}
</span>
</div>
<div className="flex justify-between">
<span className="text-gray-600">Workflow ID</span>
<span className="font-mono">
#{workflowInfo.defaultWorkflowId}
</span>
</div>
<div className="flex justify-between">
<span className="text-gray-600">
Requires Approval
</span>
<span
className={
workflowInfo.requiresApproval
? "text-green-600 font-medium"
: "text-gray-500"
}
>
{workflowInfo.requiresApproval ? "Yes" : "No"}
</span>
</div>
<div className="flex justify-between">
<span className="text-gray-600">Auto Publish</span>
<span
className={
workflowInfo.autoPublishArticles
? "text-green-600 font-medium"
: "text-gray-500"
}
>
{workflowInfo.autoPublishArticles ? "Yes" : "No"}
</span>
</div>
<div className="flex justify-between">
<span className="text-gray-600">Approval Status</span>
<span
className={
workflowInfo.isApprovalActive
? "text-green-600 font-medium"
: "text-red-600 font-medium"
}
>
{workflowInfo.isApprovalActive
? "Active"
: "Inactive"}
</span>
</div>
</div>
{/* <div className="flex gap-2 mt-4">
<Button
onClick={handleSetupWorkflow}
className="bg-orange-600 hover:bg-orange-700 text-white"
variant="outline"
size="sm"
>
<SettingsIcon className="h-4 w-4 mr-2" />
Setup Workflow
Manage Workflow
</Button>
{(pathname?.includes('/admin/settings/tenant') || pathname?.includes('/tenant')) && (
<Button
variant="outline"
onClick={handleClose}
size="sm"
>
Cancel
</Button>
)}
<Button variant="outline" onClick={handleClose} size="sm">
Close
</Button>
</div> */}
</div>
</div>
</div>
</CardContent>
</Card>
) : ''
// Workflow Setup Complete
</CardContent>
</Card>
// Workflow Setup Complete
// <Card className="border-green-200 bg-green-50">
// <CardContent className="p-4">
// <div className="flex items-start gap-3">
@ -160,7 +281,7 @@ export default function WorkflowSetupModal({ isOpen, onClose, workflowInfo, onRe
// </div>
// </div>
// <div className="flex gap-2 mt-4">
// <Button
// <Button
// onClick={handleSetupWorkflow}
// variant="outline"
// size="sm"
@ -173,6 +294,8 @@ export default function WorkflowSetupModal({ isOpen, onClose, workflowInfo, onRe
// </div>
// </CardContent>
// </Card>
)
}
</div>
</DialogContent>

View File

@ -3,8 +3,8 @@
* For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
*/
declare const Collection_base: {
new (): import("@ckeditor/ckeditor5-utils/src/emittermixin.js").Emitter;
prototype: import("@ckeditor/ckeditor5-utils/src/emittermixin.js").Emitter;
new (): import("./emittermixin.js").Emitter;
prototype: import("./emittermixin.js").Emitter;
};
/**
* Collections are ordered sets of objects. Items in the collection can be retrieved by their indexes

View File

@ -22,7 +22,7 @@
*/
declare function diff<T>(a: ArrayLike<T>, b: ArrayLike<T>, cmp?: (a: T, b: T) => boolean): Array<DiffResult>;
declare namespace diff {
var fastDiff: typeof import("@ckeditor/ckeditor5-utils/src/fastdiff.js").default;
var fastDiff: typeof import("./fastdiff.js").default;
}
export default diff;
/**

View File

@ -2,7 +2,7 @@
* @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
* For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
*/
import type { DiffResult } from '@ckeditor/ckeditor5-utils/src/diff.js';
import type { DiffResult } from './diff.js';
/**
* @module utils/difftochanges
*/

View File

@ -5,9 +5,9 @@
/**
* @module utils/dom/emittermixin
*/
import { type Emitter, type CallbackOptions, type BaseEvent, type GetCallback } from '@ckeditor/ckeditor5-utils/src/emittermixin.js';
import type EventInfo from '@ckeditor/ckeditor5-utils/src/eventinfo.js';
import type { Constructor, Mixed } from '@ckeditor/ckeditor5-utils/src/mix.js';
import { type Emitter, type CallbackOptions, type BaseEvent, type GetCallback } from '../emittermixin.js';
import type EventInfo from '../eventinfo.js';
import type { Constructor, Mixed } from '../mix.js';
/**
* Mixin that injects the DOM events API into its host. It provides the API
* compatible with {@link module:utils/emittermixin~Emitter}.

View File

@ -2,7 +2,7 @@
* @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
* For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
*/
import Rect, { type RectSource } from '@ckeditor/ckeditor5-utils/src/dom/rect.js';
import Rect, { type RectSource } from './rect.js';
/**
* Calculates the `position: absolute` coordinates of a given element so it can be positioned with respect to the
* target in the visually most efficient way, taking various restrictions like viewport or limiter geometry

View File

@ -5,10 +5,10 @@
/**
* @module utils/emittermixin
*/
import EventInfo from '@ckeditor/ckeditor5-utils/src/eventinfo.js';
import { type PriorityString } from '@ckeditor/ckeditor5-utils/src/priorities.js';
import type { Constructor, Mixed } from '@ckeditor/ckeditor5-utils/src/mix.js';
import '@ckeditor/ckeditor5-utils/src/version.js';
import EventInfo from './eventinfo.js';
import { type PriorityString } from './priorities.js';
import type { Constructor, Mixed } from './mix.js';
import './version.js';
/**
* Mixin that injects the {@link ~Emitter events API} into its host.
*

View File

@ -2,8 +2,8 @@
* @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
* For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
*/
import type { DiffResult } from '@ckeditor/ckeditor5-utils/src/diff.js';
import type { Change } from '@ckeditor/ckeditor5-utils/src/difftochanges.js';
import type { DiffResult } from './diff.js';
import type { Change } from './difftochanges.js';
/**
* @module utils/fastdiff
*/

View File

@ -2,10 +2,10 @@
* @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
* For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
*/
declare const FocusTracker_base: import("@ckeditor/ckeditor5-utils/src/mix.js").Mixed<{
new (): import("@ckeditor/ckeditor5-utils/src/observablemixin.js").Observable;
prototype: import("@ckeditor/ckeditor5-utils/src/observablemixin.js").Observable;
}, import("@ckeditor/ckeditor5-utils/src/dom/emittermixin.js").DomEmitter>;
declare const FocusTracker_base: import("./mix.js").Mixed<{
new (): import("./observablemixin.js").Observable;
prototype: import("./observablemixin.js").Observable;
}, import("./dom/emittermixin.js").DomEmitter>;
/**
* Allows observing a group of `Element`s whether at least one of them is focused.
*

View File

@ -5,60 +5,60 @@
/**
* @module utils
*/
export { default as env } from '@ckeditor/ckeditor5-utils/src/env.js';
export { default as diff, type DiffResult } from '@ckeditor/ckeditor5-utils/src/diff.js';
export { default as fastDiff } from '@ckeditor/ckeditor5-utils/src/fastdiff.js';
export { default as diffToChanges } from '@ckeditor/ckeditor5-utils/src/difftochanges.js';
export { default as mix } from '@ckeditor/ckeditor5-utils/src/mix.js';
export type { Constructor, Mixed } from '@ckeditor/ckeditor5-utils/src/mix.js';
export { default as EmitterMixin, type Emitter, type BaseEvent, type CallbackOptions, type EmitterMixinDelegateChain, type GetCallback, type GetCallbackOptions, type GetEventInfo, type GetNameOrEventInfo } from '@ckeditor/ckeditor5-utils/src/emittermixin.js';
export { default as EventInfo } from '@ckeditor/ckeditor5-utils/src/eventinfo.js';
export { default as ObservableMixin, type Observable, type DecoratedMethodEvent, type ObservableChangeEvent, type ObservableSetEvent } from '@ckeditor/ckeditor5-utils/src/observablemixin.js';
export { default as CKEditorError, logError, logWarning } from '@ckeditor/ckeditor5-utils/src/ckeditorerror.js';
export { default as ElementReplacer } from '@ckeditor/ckeditor5-utils/src/elementreplacer.js';
export { default as abortableDebounce, type AbortableFunc } from '@ckeditor/ckeditor5-utils/src/abortabledebounce.js';
export { default as count } from '@ckeditor/ckeditor5-utils/src/count.js';
export { default as compareArrays } from '@ckeditor/ckeditor5-utils/src/comparearrays.js';
export { default as createElement } from '@ckeditor/ckeditor5-utils/src/dom/createelement.js';
export { default as Config } from '@ckeditor/ckeditor5-utils/src/config.js';
export { default as isIterable } from '@ckeditor/ckeditor5-utils/src/isiterable.js';
export { default as DomEmitterMixin, type DomEmitter } from '@ckeditor/ckeditor5-utils/src/dom/emittermixin.js';
export { default as findClosestScrollableAncestor } from '@ckeditor/ckeditor5-utils/src/dom/findclosestscrollableancestor.js';
export { default as global } from '@ckeditor/ckeditor5-utils/src/dom/global.js';
export { default as getAncestors } from '@ckeditor/ckeditor5-utils/src/dom/getancestors.js';
export { default as getDataFromElement } from '@ckeditor/ckeditor5-utils/src/dom/getdatafromelement.js';
export { default as getBorderWidths } from '@ckeditor/ckeditor5-utils/src/dom/getborderwidths.js';
export { default as isText } from '@ckeditor/ckeditor5-utils/src/dom/istext.js';
export { default as Rect, type RectSource } from '@ckeditor/ckeditor5-utils/src/dom/rect.js';
export { default as ResizeObserver } from '@ckeditor/ckeditor5-utils/src/dom/resizeobserver.js';
export { default as setDataInElement } from '@ckeditor/ckeditor5-utils/src/dom/setdatainelement.js';
export { default as toUnit } from '@ckeditor/ckeditor5-utils/src/dom/tounit.js';
export { default as indexOf } from '@ckeditor/ckeditor5-utils/src/dom/indexof.js';
export { default as insertAt } from '@ckeditor/ckeditor5-utils/src/dom/insertat.js';
export { default as isComment } from '@ckeditor/ckeditor5-utils/src/dom/iscomment.js';
export { default as isNode } from '@ckeditor/ckeditor5-utils/src/dom/isnode.js';
export { default as isRange } from '@ckeditor/ckeditor5-utils/src/dom/isrange.js';
export { default as isValidAttributeName } from '@ckeditor/ckeditor5-utils/src/dom/isvalidattributename.js';
export { default as isVisible } from '@ckeditor/ckeditor5-utils/src/dom/isvisible.js';
export { getOptimalPosition, type Options as PositionOptions, type PositioningFunction, type DomPoint } from '@ckeditor/ckeditor5-utils/src/dom/position.js';
export { default as remove } from '@ckeditor/ckeditor5-utils/src/dom/remove.js';
export * from '@ckeditor/ckeditor5-utils/src/dom/scroll.js';
export * from '@ckeditor/ckeditor5-utils/src/keyboard.js';
export * from '@ckeditor/ckeditor5-utils/src/language.js';
export { default as Locale, type LocaleTranslate, type Translations } from '@ckeditor/ckeditor5-utils/src/locale.js';
export { default as Collection, type CollectionAddEvent, type CollectionChangeEvent, type CollectionRemoveEvent } from '@ckeditor/ckeditor5-utils/src/collection.js';
export { default as first } from '@ckeditor/ckeditor5-utils/src/first.js';
export { default as FocusTracker } from '@ckeditor/ckeditor5-utils/src/focustracker.js';
export { default as KeystrokeHandler } from '@ckeditor/ckeditor5-utils/src/keystrokehandler.js';
export { default as toArray, type ArrayOrItem, type ReadonlyArrayOrItem } from '@ckeditor/ckeditor5-utils/src/toarray.js';
export { default as toMap } from '@ckeditor/ckeditor5-utils/src/tomap.js';
export { default as priorities, type PriorityString } from '@ckeditor/ckeditor5-utils/src/priorities.js';
export { default as retry, exponentialDelay } from '@ckeditor/ckeditor5-utils/src/retry.js';
export { default as insertToPriorityArray } from '@ckeditor/ckeditor5-utils/src/inserttopriorityarray.js';
export { default as spliceArray } from '@ckeditor/ckeditor5-utils/src/splicearray.js';
export { default as uid } from '@ckeditor/ckeditor5-utils/src/uid.js';
export { default as delay, type DelayedFunc } from '@ckeditor/ckeditor5-utils/src/delay.js';
export { default as verifyLicense } from '@ckeditor/ckeditor5-utils/src/verifylicense.js';
export { default as wait } from '@ckeditor/ckeditor5-utils/src/wait.js';
export * from '@ckeditor/ckeditor5-utils/src/unicode.js';
export { default as version, releaseDate } from '@ckeditor/ckeditor5-utils/src/version.js';
export { default as env } from './env.js';
export { default as diff, type DiffResult } from './diff.js';
export { default as fastDiff } from './fastdiff.js';
export { default as diffToChanges } from './difftochanges.js';
export { default as mix } from './mix.js';
export type { Constructor, Mixed } from './mix.js';
export { default as EmitterMixin, type Emitter, type BaseEvent, type CallbackOptions, type EmitterMixinDelegateChain, type GetCallback, type GetCallbackOptions, type GetEventInfo, type GetNameOrEventInfo } from './emittermixin.js';
export { default as EventInfo } from './eventinfo.js';
export { default as ObservableMixin, type Observable, type DecoratedMethodEvent, type ObservableChangeEvent, type ObservableSetEvent } from './observablemixin.js';
export { default as CKEditorError, logError, logWarning } from './ckeditorerror.js';
export { default as ElementReplacer } from './elementreplacer.js';
export { default as abortableDebounce, type AbortableFunc } from './abortabledebounce.js';
export { default as count } from './count.js';
export { default as compareArrays } from './comparearrays.js';
export { default as createElement } from './dom/createelement.js';
export { default as Config } from './config.js';
export { default as isIterable } from './isiterable.js';
export { default as DomEmitterMixin, type DomEmitter } from './dom/emittermixin.js';
export { default as findClosestScrollableAncestor } from './dom/findclosestscrollableancestor.js';
export { default as global } from './dom/global.js';
export { default as getAncestors } from './dom/getancestors.js';
export { default as getDataFromElement } from './dom/getdatafromelement.js';
export { default as getBorderWidths } from './dom/getborderwidths.js';
export { default as isText } from './dom/istext.js';
export { default as Rect, type RectSource } from './dom/rect.js';
export { default as ResizeObserver } from './dom/resizeobserver.js';
export { default as setDataInElement } from './dom/setdatainelement.js';
export { default as toUnit } from './dom/tounit.js';
export { default as indexOf } from './dom/indexof.js';
export { default as insertAt } from './dom/insertat.js';
export { default as isComment } from './dom/iscomment.js';
export { default as isNode } from './dom/isnode.js';
export { default as isRange } from './dom/isrange.js';
export { default as isValidAttributeName } from './dom/isvalidattributename.js';
export { default as isVisible } from './dom/isvisible.js';
export { getOptimalPosition, type Options as PositionOptions, type PositioningFunction, type DomPoint } from './dom/position.js';
export { default as remove } from './dom/remove.js';
export * from './dom/scroll.js';
export * from './keyboard.js';
export * from './language.js';
export { default as Locale, type LocaleTranslate, type Translations } from './locale.js';
export { default as Collection, type CollectionAddEvent, type CollectionChangeEvent, type CollectionRemoveEvent } from './collection.js';
export { default as first } from './first.js';
export { default as FocusTracker } from './focustracker.js';
export { default as KeystrokeHandler } from './keystrokehandler.js';
export { default as toArray, type ArrayOrItem, type ReadonlyArrayOrItem } from './toarray.js';
export { default as toMap } from './tomap.js';
export { default as priorities, type PriorityString } from './priorities.js';
export { default as retry, exponentialDelay } from './retry.js';
export { default as insertToPriorityArray } from './inserttopriorityarray.js';
export { default as spliceArray } from './splicearray.js';
export { default as uid } from './uid.js';
export { default as delay, type DelayedFunc } from './delay.js';
export { default as verifyLicense } from './verifylicense.js';
export { default as wait } from './wait.js';
export * from './unicode.js';
export { default as version, releaseDate } from './version.js';

View File

@ -2,7 +2,7 @@
* @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
* For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
*/
import { type PriorityString } from '@ckeditor/ckeditor5-utils/src/priorities.js';
import { type PriorityString } from './priorities.js';
/**
* @module utils/inserttopriorityarray
*/

View File

@ -7,7 +7,7 @@
*
* @module utils/keyboard
*/
import type { LanguageDirection } from '@ckeditor/ckeditor5-utils/src/language.js';
import type { LanguageDirection } from './language.js';
/**
* An object with `keyName => keyCode` pairs for a set of known keys.
*

View File

@ -2,9 +2,9 @@
* @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
* For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
*/
import type { Emitter } from '@ckeditor/ckeditor5-utils/src/emittermixin.js';
import { type KeystrokeInfo } from '@ckeditor/ckeditor5-utils/src/keyboard.js';
import type { PriorityString } from '@ckeditor/ckeditor5-utils/src/priorities.js';
import type { Emitter } from './emittermixin.js';
import { type KeystrokeInfo } from './keyboard.js';
import type { PriorityString } from './priorities.js';
/**
* Keystroke handler allows registering callbacks for given keystrokes.
*

View File

@ -5,9 +5,9 @@
/**
* @module utils/locale
*/
import { type ArrayOrItem } from '@ckeditor/ckeditor5-utils/src/toarray.js';
import { type Message } from '@ckeditor/ckeditor5-utils/src/translation-service.js';
import { type LanguageDirection } from '@ckeditor/ckeditor5-utils/src/language.js';
import { type ArrayOrItem } from './toarray.js';
import { type Message } from './translation-service.js';
import { type LanguageDirection } from './language.js';
/**
* Represents the localization services.
*/

View File

@ -5,8 +5,8 @@
/**
* @module utils/observablemixin
*/
import { type Emitter } from '@ckeditor/ckeditor5-utils/src/emittermixin.js';
import type { Constructor, Mixed } from '@ckeditor/ckeditor5-utils/src/mix.js';
import { type Emitter } from './emittermixin.js';
import type { Constructor, Mixed } from './mix.js';
/**
* A mixin that injects the "observable properties" and data binding functionality described in the
* {@link ~Observable} interface.

View File

@ -7,9 +7,9 @@
*/
import type { Translations } from './locale.js';
import { type ArrayOrItem } from './toarray.js';
// declare global {
// var CKEDITOR_TRANSLATIONS: Translations;
// }
declare global {
var CKEDITOR_TRANSLATIONS: Translations;
}
/**
* Adds translations to existing ones or overrides the existing translations. These translations will later
* be available for the {@link module:utils/locale~Locale#t `t()`} function.

View File

@ -5,10 +5,10 @@
/**
* @module widget/widgetresize
*/
import Resizer from '@ckeditor/ckeditor5-widget/src/widgetresize/resizer.js';
import Resizer from './widgetresize/resizer.js';
import { Plugin, type Editor } from '@ckeditor/ckeditor5-core';
import { type Element, type ViewContainerElement } from '@ckeditor/ckeditor5-engine';
import '@ckeditor/ckeditor5-widget/theme/widgetresize.css';
import '../theme/widgetresize.css';
/**
* The widget resize feature plugin.
*

View File

@ -3,8 +3,8 @@
* For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
*/
import { Rect, type DecoratedMethodEvent } from '@ckeditor/ckeditor5-utils';
import ResizeState from '@ckeditor/ckeditor5-widget/src/widgetresize/resizerstate.js';
import type { ResizerOptions } from '@ckeditor/ckeditor5-widget/src/widgetresize.js';
import ResizeState from './resizerstate.js';
import type { ResizerOptions } from '../widgetresize.js';
declare const Resizer_base: {
new (): import("@ckeditor/ckeditor5-utils").Observable;
prototype: import("@ckeditor/ckeditor5-utils").Observable;

View File

@ -2,7 +2,7 @@
* @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
* For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
*/
import type { ResizerOptions } from '@ckeditor/ckeditor5-widget/src/widgetresize.js';
import type { ResizerOptions } from '../widgetresize.js';
declare const ResizeState_base: {
new (): import("@ckeditor/ckeditor5-utils").Observable;
prototype: import("@ckeditor/ckeditor5-utils").Observable;