@project-sunbird/collection-editor-react 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (103) hide show
  1. package/dist/api/bulkUpload.d.ts +10 -0
  2. package/dist/api/categoryDefinition.d.ts +45 -0
  3. package/dist/api/client.d.ts +3 -0
  4. package/dist/api/content.d.ts +15 -0
  5. package/dist/api/dialcode.d.ts +12 -0
  6. package/dist/api/framework.d.ts +4 -0
  7. package/dist/api/hierarchy.d.ts +12 -0
  8. package/dist/api/user.d.ts +25 -0
  9. package/dist/collection-editor.umd.js +466 -0
  10. package/dist/components/AssetBrowser/AssetBrowser.d.ts +9 -0
  11. package/dist/components/AssetBrowser/index.d.ts +1 -0
  12. package/dist/components/AssignPageNumber/AssignPageNumber.d.ts +8 -0
  13. package/dist/components/AssignPageNumber/index.d.ts +1 -0
  14. package/dist/components/BulkUpload/CsvUpload.d.ts +10 -0
  15. package/dist/components/BulkUpload/index.d.ts +1 -0
  16. package/dist/components/Collaborators/ManageCollaborators.d.ts +8 -0
  17. package/dist/components/Collaborators/index.d.ts +1 -0
  18. package/dist/components/CollectionEditor/CollectionEditor.d.ts +5 -0
  19. package/dist/components/CollectionEditor/index.d.ts +2 -0
  20. package/dist/components/ContentPlayer/ContentPlayer.d.ts +10 -0
  21. package/dist/components/ContentPlayer/index.d.ts +1 -0
  22. package/dist/components/ContextualEditor/Breadcrumb.d.ts +10 -0
  23. package/dist/components/ContextualEditor/ContentEditForm.d.ts +11 -0
  24. package/dist/components/ContextualEditor/ContextualEditor.d.ts +12 -0
  25. package/dist/components/ContextualEditor/TabBar.d.ts +21 -0
  26. package/dist/components/ContextualEditor/TitleAppIcon.d.ts +9 -0
  27. package/dist/components/ContextualEditor/index.d.ts +1 -0
  28. package/dist/components/Dialcode/DialcodePanel.d.ts +10 -0
  29. package/dist/components/Dialcode/index.d.ts +1 -0
  30. package/dist/components/LibraryDock/FilterChips.d.ts +13 -0
  31. package/dist/components/LibraryDock/LibraryCard.d.ts +12 -0
  32. package/dist/components/LibraryDock/LibraryDock.d.ts +10 -0
  33. package/dist/components/LibraryDock/LibraryFilterPanel.d.ts +19 -0
  34. package/dist/components/LibraryDock/LibraryPreviewPanel.d.ts +10 -0
  35. package/dist/components/LibraryDock/index.d.ts +1 -0
  36. package/dist/components/OutlineTree/OutlineTree.d.ts +10 -0
  37. package/dist/components/OutlineTree/TreeNode.d.ts +9 -0
  38. package/dist/components/OutlineTree/index.d.ts +1 -0
  39. package/dist/components/ProgressStatus/ProgressStatus.d.ts +12 -0
  40. package/dist/components/ProgressStatus/index.d.ts +1 -0
  41. package/dist/components/ResourceReorder/ResourceReorderDialog.d.ts +10 -0
  42. package/dist/components/ResourceReorder/index.d.ts +1 -0
  43. package/dist/components/SparkMetaForm/FormSection.d.ts +9 -0
  44. package/dist/components/SparkMetaForm/SparkMetaForm.d.ts +14 -0
  45. package/dist/components/SparkMetaForm/fields/AppIconField.d.ts +11 -0
  46. package/dist/components/SparkMetaForm/fields/AppIconPickerModal.d.ts +10 -0
  47. package/dist/components/SparkMetaForm/fields/ChipGroupField.d.ts +11 -0
  48. package/dist/components/SparkMetaForm/fields/DateTimeField.d.ts +10 -0
  49. package/dist/components/SparkMetaForm/fields/DialcodeInputField.d.ts +10 -0
  50. package/dist/components/SparkMetaForm/fields/KeywordSuggestField.d.ts +10 -0
  51. package/dist/components/SparkMetaForm/fields/LicenseSelectField.d.ts +10 -0
  52. package/dist/components/SparkMetaForm/fields/MultiSelectField.d.ts +15 -0
  53. package/dist/components/SparkMetaForm/fields/NestedSelectField.d.ts +20 -0
  54. package/dist/components/SparkMetaForm/fields/RadioField.d.ts +15 -0
  55. package/dist/components/SparkMetaForm/fields/SelectField.d.ts +15 -0
  56. package/dist/components/SparkMetaForm/fields/TextField.d.ts +13 -0
  57. package/dist/components/SparkMetaForm/fields/index.d.ts +11 -0
  58. package/dist/components/SparkMetaForm/hooks/index.d.ts +3 -0
  59. package/dist/components/SparkMetaForm/hooks/useCascade.d.ts +16 -0
  60. package/dist/components/SparkMetaForm/hooks/useFieldPrepare.d.ts +42 -0
  61. package/dist/components/SparkMetaForm/index.d.ts +1 -0
  62. package/dist/components/SplitBuilderShell/SplitBuilderShell.d.ts +14 -0
  63. package/dist/components/SplitBuilderShell/index.d.ts +1 -0
  64. package/dist/components/Topbar/Topbar.d.ts +15 -0
  65. package/dist/components/Topbar/index.d.ts +1 -0
  66. package/dist/components/UnitContentList/ContentRow.d.ts +10 -0
  67. package/dist/components/UnitContentList/UnitContentList.d.ts +8 -0
  68. package/dist/components/UnitContentList/index.d.ts +1 -0
  69. package/dist/components/modals/ConfirmDialog.d.ts +13 -0
  70. package/dist/components/modals/PublishChecklist.d.ts +9 -0
  71. package/dist/components/modals/QualityParamsModal.d.ts +10 -0
  72. package/dist/components/modals/index.d.ts +3 -0
  73. package/dist/components/shared/Button.d.ts +14 -0
  74. package/dist/components/shared/Card.d.ts +9 -0
  75. package/dist/components/shared/Chip.d.ts +12 -0
  76. package/dist/components/shared/DropZone.d.ts +10 -0
  77. package/dist/components/shared/Spinner.d.ts +8 -0
  78. package/dist/components/shared/index.d.ts +5 -0
  79. package/dist/dev-main.d.ts +1 -0
  80. package/dist/hooks/index.d.ts +9 -0
  81. package/dist/hooks/useContentType.d.ts +18 -0
  82. package/dist/hooks/useEditorInit.d.ts +12 -0
  83. package/dist/hooks/useFramework.d.ts +5 -0
  84. package/dist/hooks/useLibrary.d.ts +24 -0
  85. package/dist/hooks/useSaveHierarchy.d.ts +6 -0
  86. package/dist/hooks/useTelemetry.d.ts +13 -0
  87. package/dist/hooks/useTree.d.ts +23 -0
  88. package/dist/index.cjs +466 -0
  89. package/dist/index.d.ts +8 -0
  90. package/dist/index.js +20941 -0
  91. package/dist/store/editor.store.d.ts +47 -0
  92. package/dist/store/index.d.ts +3 -0
  93. package/dist/store/library.store.d.ts +25 -0
  94. package/dist/store/tree.store.d.ts +31 -0
  95. package/dist/store/ui.store.d.ts +9 -0
  96. package/dist/style.css +1 -0
  97. package/dist/types/content.d.ts +43 -0
  98. package/dist/types/editor.d.ts +86 -0
  99. package/dist/types/framework.d.ts +23 -0
  100. package/dist/types/index.d.ts +3 -0
  101. package/dist/utils/telemetry.d.ts +18 -0
  102. package/dist/web-component/register.d.ts +1 -0
  103. package/package.json +62 -0
@@ -0,0 +1,47 @@
1
+ import { IEditorConfig, EditorMode, IButtonLoaders } from '../types/editor';
2
+ import { ICategoryField, IParsedCategoryDefinition } from '../api/categoryDefinition';
3
+
4
+ interface EditorState {
5
+ editorConfig: IEditorConfig | null;
6
+ editorMode: EditorMode;
7
+ buttonLoaders: IButtonLoaders;
8
+ showPreview: boolean;
9
+ pageId: string;
10
+ isCurrentNodeFolder: boolean;
11
+ isCurrentNodeRoot: boolean;
12
+ isQumlPlayer: boolean;
13
+ isDirty: boolean;
14
+ lastSaved: string | null;
15
+ rootFormConfig: ICategoryField[] | null;
16
+ unitFormConfig: ICategoryField[] | null;
17
+ childFormConfig: ICategoryField[] | null;
18
+ searchFormConfig: ICategoryField[] | null;
19
+ relationalFormConfig: ICategoryField[] | null;
20
+ publishChecklist: ICategoryField[] | null;
21
+ reviewChecklist: ICategoryField[] | null;
22
+ rfcChecklist: ICategoryField[] | null;
23
+ categoryMeta: {
24
+ schemaDefaults: Record<string, unknown>;
25
+ frameworkMetadata: {
26
+ orgFWType?: string[];
27
+ targetFWType?: string[];
28
+ };
29
+ sourcingSettings: Record<string, unknown>;
30
+ } | null;
31
+ setEditorConfig: (config: IEditorConfig) => void;
32
+ setEditorMode: (mode: EditorMode) => void;
33
+ setButtonLoader: (key: keyof IButtonLoaders, value: boolean) => void;
34
+ setShowPreview: (show: boolean) => void;
35
+ setPageId: (pageId: string) => void;
36
+ setNodeFlags: (flags: {
37
+ isFolder?: boolean;
38
+ isRoot?: boolean;
39
+ isQuml?: boolean;
40
+ }) => void;
41
+ setLastSaved: (ts: string) => void;
42
+ setIsDirty: (dirty: boolean) => void;
43
+ setCategoryDefinition: (parsed: IParsedCategoryDefinition) => void;
44
+ }
45
+ export declare const useEditorStore: import('zustand').UseBoundStore<import('zustand').StoreApi<EditorState>>;
46
+ export declare const getEditorStore: () => () => EditorState;
47
+ export {};
@@ -0,0 +1,3 @@
1
+ export * from './editor.store';
2
+ export * from './tree.store';
3
+ export * from './library.store';
@@ -0,0 +1,25 @@
1
+ import { IContent } from '../types/content';
2
+ import { LibraryFilters } from '../components/LibraryDock/LibraryFilterPanel';
3
+
4
+ interface LibraryState {
5
+ allContent: IContent[];
6
+ filteredContent: IContent[];
7
+ searchQuery: string;
8
+ activeFilter: string;
9
+ advancedFilters: LibraryFilters;
10
+ isLoading: boolean;
11
+ totalCount: number;
12
+ offset: number;
13
+ sortAZ: boolean;
14
+ setContent: (content: IContent[], total: number) => void;
15
+ appendContent: (content: IContent[], total: number) => void;
16
+ setFilter: (filter: string) => void;
17
+ setSearch: (query: string) => void;
18
+ setLoading: (loading: boolean) => void;
19
+ setAdvancedFilters: (filters: LibraryFilters) => void;
20
+ setOffset: (offset: number) => void;
21
+ setSortAZ: (sortAZ: boolean) => void;
22
+ applyFilter: () => void;
23
+ }
24
+ export declare const useLibraryStore: import('zustand').UseBoundStore<import('zustand').StoreApi<LibraryState>>;
25
+ export {};
@@ -0,0 +1,31 @@
1
+ import { INode } from '../types/editor';
2
+ import { IContent } from '../types/content';
3
+
4
+ interface TreeState {
5
+ treeData: INode[];
6
+ selectedNodeId: string | null;
7
+ treeCache: Record<string, Record<string, unknown>>;
8
+ breadcrumb: Array<{
9
+ id: string;
10
+ name: string;
11
+ }>;
12
+ activeNodeMeta: Record<string, unknown>;
13
+ setTreeData: (nodes: INode[]) => void;
14
+ selectNode: (id: string) => void;
15
+ updateNode: (id: string, patch: Record<string, unknown>) => void;
16
+ addNode: (parentId: string, type: 'unit' | 'subunit') => string;
17
+ deleteNode: (id: string) => void;
18
+ reorderChildren: (parentId: string, fromIndex: number, toIndex: number) => void;
19
+ addResource: (content: IContent, nodeId: string) => void;
20
+ markDirty: () => void;
21
+ getNodeById: (id: string) => INode | undefined;
22
+ getChildrenOf: (id: string) => INode[];
23
+ getBreadcrumb: (id: string) => Array<{
24
+ id: string;
25
+ name: string;
26
+ }>;
27
+ moveNode: (nodeId: string, fromParentId: string, toParentId: string) => void;
28
+ }
29
+ export declare const useTreeStore: import('zustand').UseBoundStore<import('zustand').StoreApi<TreeState>>;
30
+ export declare const getTreeStore: () => () => TreeState;
31
+ export {};
@@ -0,0 +1,9 @@
1
+ export type ModalType = 'publishChecklist' | 'qualityParams' | 'manageCollaborators' | 'csvUpload' | 'confirmDelete' | 'resourceReorder' | 'assignPageNumber' | null;
2
+ interface UiState {
3
+ activeModal: ModalType;
4
+ modalData: Record<string, unknown>;
5
+ openModal: (modal: ModalType, data?: Record<string, unknown>) => void;
6
+ closeModal: () => void;
7
+ }
8
+ export declare const useUiStore: import('zustand').UseBoundStore<import('zustand').StoreApi<UiState>>;
9
+ export {};
package/dist/style.css ADDED
@@ -0,0 +1 @@
1
+ @import"https://fonts.googleapis.com/css2?family=Plus+Jakarta+Sans:wght@400;500;600;700&display=swap";@keyframes _spin_1ah4d_9{0%{transform:rotate(0)}to{transform:rotate(360deg)}}._spin_1ah4d_9{animation:_spin_1ah4d_9 .8s linear infinite;display:inline-block;vertical-align:middle}._overlay_109ur_1{position:fixed;top:0;right:0;bottom:0;left:0;background:#00000080;z-index:1000;display:flex;align-items:center;justify-content:center}._modal_109ur_11{background:#fff;border-radius:8px;padding:24px;min-width:400px;max-width:600px;width:100%;box-shadow:0 20px 25px #00000026,0 8px 10px #0000001a;max-height:90vh;overflow-y:auto}._modalHeader_109ur_23{display:flex;justify-content:space-between;align-items:center;font-size:18px;font-weight:600;color:var(--sbx-gray-900, #111827);margin-bottom:16px}._modalHeaderClose_109ur_33{background:none;border:none;cursor:pointer;padding:4px;color:var(--sbx-gray-500, #6B7280);font-size:20px;line-height:1;border-radius:4px;display:flex;align-items:center;justify-content:center}._modalHeaderClose_109ur_33:hover{color:var(--sbx-gray-800, #1F2937);background:var(--sbx-gray-100, #F3F4F6)}._modalBody_109ur_51{margin-bottom:24px;color:var(--sbx-gray-700, #374151);font-size:14px;line-height:1.6}._modalFooter_109ur_58{display:flex;justify-content:flex-end;gap:8px;align-items:center}._checkRow_109ur_65{display:flex;align-items:center;gap:8px;margin-bottom:8px;font-size:14px;color:var(--sbx-gray-700, #374151)}._checkIcon_109ur_74{flex-shrink:0;width:20px;height:20px;display:flex;align-items:center;justify-content:center;font-size:14px}._pass_109ur_84{color:var(--sbx-success, #16A34A)}._fail_109ur_88{color:var(--sbx-error, #DC2626)}._divider_109ur_92{border:none;border-top:1px solid var(--sbx-gray-200, #E5E7EB);margin:16px 0}._errorBanner_109ur_98{background:#fef2f2;border:1px solid #FECACA;border-radius:6px;padding:10px 14px;font-size:13px;color:var(--sbx-error, #DC2626);margin-bottom:16px}._formGroup_109ur_108{margin-bottom:16px}._formGroup_109ur_108 label{display:block;font-size:13px;font-weight:600;color:var(--sbx-gray-700, #374151);margin-bottom:6px}._textarea_109ur_119{width:100%;border:1.5px solid var(--sbx-gray-300, #D1D5DB);border-radius:6px;padding:10px 12px;font-size:14px;color:var(--sbx-gray-900, #111827);font-family:inherit;resize:vertical;min-height:90px;transition:border-color .15s}._textarea_109ur_119:focus{outline:none;border-color:var(--sbx-primary, #2D6AE3);box-shadow:0 0 0 3px #2d6ae31f}._textarea_109ur_119::placeholder{color:var(--sbx-gray-400, #9CA3AF)}._sliderGroup_109ur_140{display:flex;align-items:center;gap:12px}._sliderGroup_109ur_140 input[type=range]{flex:1;accent-color:var(--sbx-primary, #2D6AE3);height:4px;cursor:pointer}._sliderValue_109ur_152{min-width:28px;text-align:center;font-weight:700;font-size:15px;color:var(--sbx-primary, #2D6AE3)}._sliderLabels_109ur_160{display:flex;justify-content:space-between;font-size:11px;color:var(--sbx-gray-400, #9CA3AF);margin-top:4px}._sectionTitle_109ur_168{font-size:13px;font-weight:600;color:var(--sbx-gray-500, #6B7280);text-transform:uppercase;letter-spacing:.05em;margin-bottom:12px}._container_1cpb1_1{display:flex;flex-direction:column;background:#fff;border-radius:var(--sbx-r-lg);box-shadow:var(--sbx-shadow-3);width:520px;max-width:95vw;max-height:85vh;overflow:hidden}._header_1cpb1_13{display:flex;align-items:center;justify-content:space-between;padding:20px 24px 16px;border-bottom:1px solid var(--sbx-gray-200);flex-shrink:0}._title_1cpb1_22{font-size:17px;font-weight:700;color:var(--sbx-gray-900);margin:0}._closeBtn_1cpb1_29{background:none;border:none;cursor:pointer;font-size:18px;color:var(--sbx-gray-500);padding:4px 8px;border-radius:var(--sbx-r-sm);line-height:1;transition:background .15s}._closeBtn_1cpb1_29:hover{background:var(--sbx-gray-100);color:var(--sbx-gray-800)}._body_1cpb1_45{flex:1;overflow-y:auto;padding:20px 24px;display:flex;flex-direction:column;gap:24px}._label_1cpb1_54{display:block;font-size:13px;font-weight:600;color:var(--sbx-gray-700);margin-bottom:8px}._searchSection_1cpb1_62{display:flex;flex-direction:column;position:relative}._searchRow_1cpb1_68{position:relative;display:flex;align-items:center}._searchInput_1cpb1_74{width:100%;height:38px;padding:0 40px 0 12px;border:1.5px solid var(--sbx-gray-300);border-radius:var(--sbx-r-sm);font-size:14px;color:var(--sbx-gray-900);transition:border-color .15s}._searchInput_1cpb1_74:focus{outline:none;border-color:var(--sbx-primary)}._searchSpinner_1cpb1_89{position:absolute;right:12px;width:16px;height:16px;border:2px solid var(--sbx-gray-300);border-top-color:var(--sbx-primary);border-radius:50%;animation:_spin_1cpb1_1 .7s linear infinite}@keyframes _spin_1cpb1_1{to{transform:rotate(360deg)}}._resultsList_1cpb1_105{list-style:none;margin:4px 0 0;padding:0;border:1.5px solid var(--sbx-gray-200);border-radius:var(--sbx-r-sm);overflow:hidden;background:#fff;box-shadow:var(--sbx-shadow-2);max-height:200px;overflow-y:auto}._resultItem_1cpb1_118{display:flex;align-items:center;justify-content:space-between;padding:10px 14px;gap:12px;transition:background .1s}._resultItem_1cpb1_118:not(:last-child){border-bottom:1px solid var(--sbx-gray-100)}._resultItem_1cpb1_118:hover{background:var(--sbx-gray-50)}._userInfo_1cpb1_133{display:flex;flex-direction:column;gap:2px;flex:1;min-width:0}._userName_1cpb1_141{font-size:14px;font-weight:600;color:var(--sbx-gray-800);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}._userEmail_1cpb1_150{font-size:12px;color:var(--sbx-gray-500);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}._noResults_1cpb1_158{font-size:13px;color:var(--sbx-gray-500);margin:8px 0 0;padding:10px 0}._collabSection_1cpb1_165{display:flex;flex-direction:column}._sectionTitle_1cpb1_170{font-size:14px;font-weight:600;color:var(--sbx-gray-700);margin:0 0 12px;display:flex;align-items:center;gap:8px}._badge_1cpb1_180{display:inline-flex;align-items:center;justify-content:center;min-width:20px;height:20px;padding:0 6px;border-radius:10px;background:var(--sbx-primary);color:#fff;font-size:11px;font-weight:700}._emptyCollab_1cpb1_194{font-size:13px;color:var(--sbx-gray-500);margin:0;padding:16px;text-align:center;background:var(--sbx-gray-50);border-radius:var(--sbx-r-sm);border:1px dashed var(--sbx-gray-300)}._collabList_1cpb1_205{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:8px}._collabItem_1cpb1_214{display:flex;align-items:center;gap:12px;padding:10px 14px;border:1px solid var(--sbx-gray-200);border-radius:var(--sbx-r-sm);background:var(--sbx-gray-50);transition:background .1s}._collabItem_1cpb1_214:hover{background:var(--sbx-gray-100)}._userAvatar_1cpb1_228{width:36px;height:36px;border-radius:50%;background:var(--sbx-primary-light);color:var(--sbx-primary);display:flex;align-items:center;justify-content:center;font-weight:700;font-size:15px;flex-shrink:0}._error_1cpb1_242{font-size:13px;color:var(--sbx-error);margin:0}._success_1cpb1_248{font-size:13px;color:var(--sbx-success);margin:0}._footer_1cpb1_254{display:flex;gap:10px;justify-content:flex-end;padding:16px 24px;border-top:1px solid var(--sbx-gray-200);flex-shrink:0}._topbar_1k1pv_1{display:flex;align-items:center;justify-content:space-between;height:var(--sbx-topbar-h, 60px);padding:0 20px;background:#fff;border-bottom:1px solid var(--sbx-gray-200);box-shadow:var(--sbx-shadow-1);flex-shrink:0;gap:16px;z-index:10}._left_1k1pv_15{display:flex;align-items:center;gap:12px;min-width:0;flex:1}._right_1k1pv_23{display:flex;align-items:center;gap:8px;flex-shrink:0}._backBtn_1k1pv_30{display:flex;align-items:center;justify-content:center;width:32px;height:32px;border-radius:var(--sbx-r-sm);border:1.5px solid var(--sbx-gray-200);background:#fff;cursor:pointer;color:var(--sbx-gray-600);flex-shrink:0;transition:border-color .15s,color .15s}._backBtn_1k1pv_30:hover{border-color:var(--sbx-primary);color:var(--sbx-primary)}._title_1k1pv_49{font-family:var(--sbx-font);font-size:16px;font-weight:600;color:var(--sbx-gray-900);margin:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:300px}._statusChip_1k1pv_61{font-size:12px;font-family:var(--sbx-font);flex-shrink:0;padding:2px 10px;border-radius:var(--sbx-r-xl);border:1.5px solid var(--sbx-gray-300);color:var(--sbx-gray-600);background:var(--sbx-gray-50);font-weight:500}._savedIndicator_1k1pv_73{display:flex;align-items:center;gap:4px;font-family:var(--sbx-font);font-size:12px;color:var(--sbx-gray-500);white-space:nowrap}._unsaved_1k1pv_83{color:var(--sbx-warning)}._iconBtn_1k1pv_87{display:flex;align-items:center;gap:5px;height:36px;padding:0 14px;border-radius:var(--sbx-r-sm);border:1.5px solid var(--sbx-gray-200);background:#fff;cursor:pointer;color:var(--sbx-gray-600);font-family:var(--sbx-font);font-size:12px;font-weight:500;white-space:nowrap;transition:border-color .15s,color .15s,background .15s}._iconBtn_1k1pv_87:hover{border-color:var(--sbx-primary);color:var(--sbx-primary);background:var(--sbx-primary-50, #EFF6FF)}._iconBtn_1k1pv_87:focus-visible{outline:2px solid var(--sbx-primary);outline-offset:2px}._iconBtnLabel_1k1pv_114{display:inline}._qrDropdown_1k1pv_118{position:relative}._qrMenu_1k1pv_122{position:absolute;top:calc(100% + 4px);right:0;background:#fff;border:1.5px solid var(--sbx-gray-200);border-radius:var(--sbx-r-md, 8px);box-shadow:var(--sbx-shadow-2, 0 4px 16px rgba(0, 0, 0, .12));min-width:190px;z-index:200;overflow:hidden}._qrMenu_1k1pv_122 button{display:flex;align-items:center;gap:8px;width:100%;padding:10px 14px;border:none;background:none;font-family:var(--sbx-font);font-size:13px;color:var(--sbx-gray-700);cursor:pointer;text-align:left;transition:background .12s}._qrMenu_1k1pv_122 button:hover:not(:disabled){background:var(--sbx-gray-50)}._qrMenu_1k1pv_122 button:disabled{opacity:.45;cursor:not-allowed}._reviewBtns_1k1pv_157,._sourcingBtns_1k1pv_166{display:flex;align-items:center;gap:6px;padding-left:8px;border-left:1px solid var(--sbx-gray-200);margin-left:4px}._modalOverlay_1k1pv_175{position:fixed;top:0;right:0;bottom:0;left:0;background:#00000080;z-index:1000;display:flex;align-items:center;justify-content:center}._sbOverlay_1k1pv_185{position:fixed;top:0;right:0;bottom:0;left:0;background:#00000073;display:flex;align-items:center;justify-content:center;z-index:1000}._sbModal_1k1pv_195{background:#fff;border-radius:var(--sbx-r-md, 8px);box-shadow:var(--sbx-shadow-3, 0 8px 32px rgba(0, 0, 0, .18));width:480px;max-width:calc(100vw - 32px);display:flex;flex-direction:column;overflow:hidden}._sbModalHeader_1k1pv_206{display:flex;align-items:center;justify-content:space-between;padding:16px 20px;border-bottom:1px solid var(--sbx-gray-200)}._sbModalTitle_1k1pv_214{font-family:var(--sbx-font);font-size:15px;font-weight:600;color:var(--sbx-gray-900)}._sbModalClose_1k1pv_221{background:none;border:none;cursor:pointer;font-size:20px;line-height:1;color:var(--sbx-gray-500);padding:0 4px}._sbModalClose_1k1pv_221:hover{color:var(--sbx-gray-900)}._sbModalBody_1k1pv_234{padding:20px;display:flex;flex-direction:column;gap:6px}._sbLabel_1k1pv_241{font-family:var(--sbx-font);font-size:13px;font-weight:500;color:var(--sbx-gray-700)}._sbTextarea_1k1pv_248{width:100%;box-sizing:border-box;font-family:var(--sbx-font);font-size:13px;color:var(--sbx-gray-900);border:1.5px solid var(--sbx-gray-300);border-radius:var(--sbx-r-sm, 6px);padding:10px 12px;resize:vertical;outline:none;transition:border-color .15s}._sbTextarea_1k1pv_248:focus{border-color:var(--sbx-primary)}._sbError_1k1pv_265{font-family:var(--sbx-font);font-size:12px;color:var(--sbx-error, #DC2626);margin:0}._sbModalFooter_1k1pv_272{display:flex;align-items:center;justify-content:flex-end;gap:10px;padding:14px 20px;border-top:1px solid var(--sbx-gray-200)}._row_10dbr_1{display:flex;align-items:center;gap:6px;padding:0 8px;cursor:pointer;border-radius:var(--sbx-r-sm);margin:1px 4px;position:relative;transition:background .1s;height:38px}._row_10dbr_1:hover{background:var(--sbx-gray-50)}._row_10dbr_1:hover ._grip_10dbr_16,._row_10dbr_1:hover ._menuBtn_10dbr_19{opacity:1}._selected_10dbr_23{background:var(--sbx-primary-light);border-left:3px solid var(--sbx-primary);padding-left:5px}._selected_10dbr_23 ._title_10dbr_28{color:var(--sbx-primary);font-weight:600}._dropTarget_10dbr_33{background:var(--sbx-primary-light);border:1.5px dashed var(--sbx-primary)}._grip_10dbr_16{color:var(--sbx-gray-300);cursor:grab;display:flex;opacity:0;flex-shrink:0;transition:opacity .1s}._grip_10dbr_16:active{cursor:grabbing}._toggle_10dbr_50{background:none;border:none;cursor:pointer;padding:2px;color:var(--sbx-gray-500);display:flex;align-items:center;flex-shrink:0;border-radius:var(--sbx-r-xs)}._toggle_10dbr_50:hover{background:var(--sbx-gray-200)}._ctIcon_10dbr_65{flex-shrink:0;width:24px;height:24px;border-radius:var(--sbx-r-xs);display:flex;align-items:center;justify-content:center;color:#fff;font-size:10px}._title_10dbr_28{flex:1;font-size:13px;color:var(--sbx-gray-700);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}._renameInput_10dbr_86{flex:1;font-size:13px;border:1.5px solid var(--sbx-primary);border-radius:var(--sbx-r-xs);padding:2px 6px;outline:none}._dropHere_10dbr_95{font-size:11px;color:var(--sbx-primary);font-weight:600;flex-shrink:0;background:var(--sbx-primary-light);padding:2px 8px;border-radius:var(--sbx-r-xl)}._menuWrap_10dbr_105{position:relative;flex-shrink:0}._menuBtn_10dbr_19{background:none;border:none;cursor:pointer;padding:4px;color:var(--sbx-gray-400);display:flex;align-items:center;border-radius:var(--sbx-r-xs);opacity:0;transition:opacity .1s}._menuBtn_10dbr_19:hover{background:var(--sbx-gray-100);color:var(--sbx-gray-700)}._menu_10dbr_19{position:absolute;right:0;top:100%;z-index:100;background:#fff;border:1px solid var(--sbx-gray-200);border-radius:var(--sbx-r-md);box-shadow:var(--sbx-shadow-3);min-width:160px;padding:4px}._menu_10dbr_19 button{display:flex;align-items:center;gap:8px;width:100%;padding:8px 12px;border:none;background:none;cursor:pointer;font-size:13px;color:var(--sbx-gray-700);border-radius:var(--sbx-r-sm);text-align:left}._menu_10dbr_19 button:hover{background:var(--sbx-gray-50)}._dangerItem_10dbr_157{color:var(--sbx-error)!important}._container_1m4t0_1{display:flex;flex-direction:column;background:#fff;border-radius:var(--sbx-r-lg);box-shadow:var(--sbx-shadow-3);width:560px;max-width:95vw;max-height:90vh;overflow:hidden}._header_1m4t0_13{display:flex;align-items:center;justify-content:space-between;padding:20px 24px 16px;border-bottom:1px solid var(--sbx-gray-200);flex-shrink:0}._title_1m4t0_22{font-size:17px;font-weight:700;color:var(--sbx-gray-900);margin:0}._closeBtn_1m4t0_29{background:none;border:none;cursor:pointer;font-size:18px;color:var(--sbx-gray-500);padding:4px 8px;border-radius:var(--sbx-r-sm);line-height:1;transition:background .15s}._closeBtn_1m4t0_29:hover{background:var(--sbx-gray-100);color:var(--sbx-gray-800)}._body_1m4t0_45{flex:1;overflow-y:auto;padding:20px 24px;display:flex;flex-direction:column;gap:16px}._dropZone_1m4t0_54{border:2px dashed var(--sbx-gray-300);border-radius:var(--sbx-r-md);padding:32px 24px;text-align:center;cursor:pointer;transition:all .15s;background:var(--sbx-gray-50)}._dropZone_1m4t0_54:hover{border-color:var(--sbx-primary);background:var(--sbx-primary-light)}._dropZone_1m4t0_54._dragOver_1m4t0_67{border-color:var(--sbx-primary);background:var(--sbx-primary-light);transform:scale(1.01)}._dropZone_1m4t0_54._hasFile_1m4t0_72{border-style:solid;border-color:var(--sbx-primary);background:var(--sbx-primary-light)}._hiddenInput_1m4t0_78{display:none}._fileInfo_1m4t0_82{display:flex;align-items:center;justify-content:center;gap:8px}._fileIcon_1m4t0_89{font-size:24px}._fileName_1m4t0_93{font-size:14px;font-weight:600;color:var(--sbx-gray-800);word-break:break-all}._fileSize_1m4t0_100{font-size:12px;color:var(--sbx-gray-500)}._dropHint_1m4t0_105{display:flex;flex-direction:column;align-items:center;gap:6px}._dropIcon_1m4t0_112{font-size:32px;margin-bottom:4px}._dropText_1m4t0_117{font-size:14px;font-weight:600;color:var(--sbx-gray-700);margin:0}._dropSubtext_1m4t0_124{font-size:12px;color:var(--sbx-gray-500);margin:0}._sampleLink_1m4t0_130{background:none;border:none;cursor:pointer;color:var(--sbx-primary);font-size:13px;text-decoration:underline;padding:0;align-self:flex-start;transition:color .15s}._sampleLink_1m4t0_130:hover{color:var(--sbx-primary-dark)}._statusBar_1m4t0_145{display:flex;align-items:center;gap:10px;padding:10px 14px;border-radius:var(--sbx-r-sm);font-size:13px;font-weight:600}._statusBar_1m4t0_145._status_uploading_1m4t0_154,._statusBar_1m4t0_145._status_processing_1m4t0_154{background:#eff6ff;color:var(--sbx-primary);border:1px solid #BFDBFE}._statusBar_1m4t0_145._status_done_1m4t0_159{background:#f0fdf4;color:var(--sbx-success);border:1px solid #BBF7D0}._statusBar_1m4t0_145._status_error_1m4t0_164{background:#fef2f2;color:var(--sbx-error);border:1px solid #FECACA}._successDetail_1m4t0_170{font-weight:400;color:var(--sbx-success)}._spinner_1m4t0_175{width:14px;height:14px;border:2px solid currentColor;border-top-color:transparent;border-radius:50%;animation:_spin_1m4t0_175 .7s linear infinite;display:inline-block;flex-shrink:0}@keyframes _spin_1m4t0_175{to{transform:rotate(360deg)}}._errorMsg_1m4t0_191{font-size:13px;color:var(--sbx-error);margin:0}._failedSection_1m4t0_197{border:1px solid #FECACA;border-radius:var(--sbx-r-sm);overflow:hidden}._failedTitle_1m4t0_203{font-size:13px;font-weight:600;color:var(--sbx-error);margin:0;padding:10px 14px;background:#fef2f2;border-bottom:1px solid #FECACA}._tableWrap_1m4t0_213{overflow-x:auto;max-height:200px;overflow-y:auto}._failedTable_1m4t0_219{width:100%;border-collapse:collapse;font-size:13px}._failedTable_1m4t0_219 th{padding:8px 12px;text-align:left;font-weight:600;color:var(--sbx-gray-600);background:var(--sbx-gray-50);border-bottom:1px solid var(--sbx-gray-200);position:sticky;top:0}._failedTable_1m4t0_219 td{padding:8px 12px;color:var(--sbx-gray-700);border-bottom:1px solid var(--sbx-gray-100);vertical-align:top}._failedTable_1m4t0_219 tr:last-child td{border-bottom:none}._reasonCell_1m4t0_244{color:var(--sbx-error)!important}._footer_1m4t0_248{display:flex;gap:10px;justify-content:flex-end;padding:16px 24px;border-top:1px solid var(--sbx-gray-200);flex-shrink:0}._container_1y30m_1{display:flex;flex-direction:column;height:100%;overflow:hidden}._header_1y30m_8{display:flex;align-items:center;justify-content:flex-end;padding:0 6px;height:40px;border-bottom:1px solid var(--sbx-gray-200);flex-shrink:0;background:#fff}._headerActions_1y30m_19{display:flex;align-items:center;gap:2px}._iconBtn_1y30m_25{display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;border:none;background:transparent;border-radius:var(--sbx-r-sm);color:var(--sbx-gray-500);cursor:pointer;transition:background .12s,color .12s}._iconBtn_1y30m_25:hover{background:var(--sbx-gray-100);color:var(--sbx-gray-800)}._menuWrap_1y30m_43{position:relative}._dropdownMenu_1y30m_47{position:absolute;top:calc(100% + 4px);right:0;z-index:200;min-width:220px;background:#fff;border:1px solid var(--sbx-gray-200);border-radius:var(--sbx-r-md);box-shadow:var(--sbx-shadow-2, 0 4px 16px rgba(0, 0, 0, .12));padding:4px 0;overflow:hidden}._dropdownMenu_1y30m_47 button{display:block;width:100%;text-align:left;padding:9px 14px;font-size:13px;font-weight:400;color:var(--sbx-gray-700);background:transparent;border:none;cursor:pointer;white-space:nowrap;transition:background .1s}._dropdownMenu_1y30m_47 button:hover{background:var(--sbx-gray-50);color:var(--sbx-gray-900)}._treeWrapper_1y30m_79{flex:1;overflow:hidden;padding:4px 0}._treeWrapper_1y30m_79::-webkit-scrollbar{width:4px}._treeWrapper_1y30m_79::-webkit-scrollbar-track{background:transparent}._treeWrapper_1y30m_79::-webkit-scrollbar-thumb{background:var(--sbx-gray-300);border-radius:2px}._csvModal_1y30m_95{position:fixed;top:0;right:0;bottom:0;left:0;background:#00000080;z-index:1000;display:flex;align-items:center;justify-content:center}._footer_1y30m_105{border-top:1px solid var(--sbx-gray-200);padding:10px 12px;display:flex;gap:8px;flex-shrink:0}._breadcrumb_zd1aj_1{display:flex;align-items:center;gap:4px;padding:0 0 8px;font-size:12px;color:var(--sbx-gray-500)}._crumb_zd1aj_10{background:none;border:none;cursor:pointer;color:var(--sbx-gray-500);font-size:12px;padding:2px 4px;border-radius:var(--sbx-r-xs);display:flex;align-items:center}._crumb_zd1aj_10:hover{color:var(--sbx-primary);background:var(--sbx-primary-light)}._sep_zd1aj_26{color:var(--sbx-gray-300);flex-shrink:0}._current_zd1aj_31{color:var(--sbx-gray-700);font-weight:500}._tabBar_qhks1_1{display:flex;border-bottom:1px solid var(--sbx-gray-200);margin-bottom:16px;gap:0}._tab_qhks1_1{display:flex;align-items:center;gap:6px;padding:10px 16px;border:none;background:none;cursor:pointer;font-size:13px;font-weight:500;color:var(--sbx-gray-500);border-bottom:2px solid transparent;margin-bottom:-1px;white-space:nowrap;transition:all .15s;position:relative}._tab_qhks1_1:hover{color:var(--sbx-primary)}._active_qhks1_29{color:var(--sbx-primary);border-bottom-color:var(--sbx-primary);font-weight:600}._error_qhks1_35{color:var(--sbx-error)}._errorDot_qhks1_39{width:6px;height:6px;border-radius:50%;background:var(--sbx-error);display:inline-block}._section_ylgu8_1{background:#fff;border-radius:var(--sbx-r-md);box-shadow:var(--sbx-shadow-1);padding:24px;display:flex;flex-direction:column;gap:20px}._header_ylgu8_11{display:flex;flex-direction:column;gap:4px}._title_ylgu8_17{font-size:15px;font-weight:600;color:var(--sbx-gray-900);margin:0}._description_ylgu8_24{font-size:13px;color:var(--sbx-gray-500);margin:0}._divider_ylgu8_30{border:none;border-top:1px solid var(--sbx-gray-100);margin:0}._fields_ylgu8_36{display:grid;grid-template-columns:1fr 1fr;gap:16px 24px}@media (max-width: 700px){._fields_ylgu8_36{grid-template-columns:1fr}}._field_hrhbs_1{display:flex;flex-direction:column;gap:6px}._fullWidth_hrhbs_7{grid-column:1/-1}._label_hrhbs_11{font-size:12px;font-weight:600;color:var(--sbx-gray-600);text-transform:uppercase;letter-spacing:.04em}._required_hrhbs_19{color:var(--sbx-error);margin-left:2px}._input_hrhbs_24{width:100%;padding:8px 12px;border:1.5px solid var(--sbx-gray-200);border-radius:var(--sbx-r-sm);font-size:14px;color:var(--sbx-gray-900);font-family:var(--sbx-font);outline:none;transition:border-color .15s;background:#fff}._input_hrhbs_24:focus{border-color:var(--sbx-primary)}._input_hrhbs_24:disabled{background:var(--sbx-gray-50);color:var(--sbx-gray-400);cursor:not-allowed}._textarea_hrhbs_45{resize:vertical;min-height:80px}._inputError_hrhbs_50{border-color:var(--sbx-error)}._error_hrhbs_54{font-size:12px;color:var(--sbx-error)}._selectBtn_hrhbs_59{display:flex;align-items:center;justify-content:space-between;width:100%;padding:8px 12px;border:1.5px solid var(--sbx-gray-200);border-radius:var(--sbx-r-sm);background:#fff;cursor:pointer;font-size:14px;font-family:var(--sbx-font);color:var(--sbx-gray-900);transition:border-color .15s}._selectBtn_hrhbs_59:hover:not(:disabled){border-color:var(--sbx-primary)}._selectBtn_hrhbs_59:disabled{background:var(--sbx-gray-50);cursor:not-allowed;opacity:.7}._selectOpen_hrhbs_83{border-color:var(--sbx-primary)}._placeholder_hrhbs_87{color:var(--sbx-gray-400)}._selectedVal_hrhbs_91{color:var(--sbx-gray-900)}._chevronUp_hrhbs_95{transform:rotate(180deg);transition:transform .15s}._dropdown_hrhbs_100{position:absolute;top:100%;left:0;right:0;z-index:200;background:#fff;border:1px solid var(--sbx-gray-200);border-radius:var(--sbx-r-md);box-shadow:var(--sbx-shadow-3);max-height:240px;overflow-y:auto;padding:4px;margin-top:4px}._option_hrhbs_116{display:flex;align-items:center;gap:8px;width:100%;padding:8px 12px;border:none;background:none;cursor:pointer;font-size:14px;color:var(--sbx-gray-700);border-radius:var(--sbx-r-sm);text-align:left}._option_hrhbs_116:hover{background:var(--sbx-gray-50)}._optionSelected_hrhbs_134{color:var(--sbx-primary);font-weight:500}._noOpts_hrhbs_139{display:block;padding:8px 12px;color:var(--sbx-gray-400);font-size:13px}._chipGroup_hrhbs_146{display:flex;flex-wrap:wrap;gap:8px;align-items:center;padding:8px;border:1.5px solid var(--sbx-gray-200);border-radius:var(--sbx-r-sm);min-height:40px;background:#fff}._chipInput_hrhbs_158{border:1px solid var(--sbx-primary);border-radius:var(--sbx-r-xl);padding:3px 10px;font-size:13px;outline:none;width:120px}._addChipBtn_hrhbs_167{display:inline-flex;align-items:center;gap:4px;background:none;border:1px dashed var(--sbx-gray-300);border-radius:var(--sbx-r-xl);padding:3px 10px;font-size:12px;color:var(--sbx-gray-500);cursor:pointer}._addChipBtn_hrhbs_167:hover{border-color:var(--sbx-primary);color:var(--sbx-primary)}._radioGroup_hrhbs_184{display:flex;gap:16px;flex-wrap:wrap;padding:4px 0}._radioLabel_hrhbs_191{display:flex;align-items:center;gap:6px;font-size:14px;cursor:pointer}._iconWrap_hrhbs_199{width:80px;height:80px;border-radius:var(--sbx-r-md);border:2px dashed var(--sbx-gray-300);cursor:pointer;overflow:hidden;display:flex;align-items:center;justify-content:center}._iconWrap_hrhbs_199:hover{border-color:var(--sbx-primary)}._iconPreview_hrhbs_214{width:100%;height:100%;object-fit:cover}._iconPlaceholder_hrhbs_220{display:flex;flex-direction:column;align-items:center;gap:4px;color:var(--sbx-gray-400);font-size:11px}._hidden_hrhbs_229{display:none}._removeIconBtn_hrhbs_233{display:flex;align-items:center;justify-content:center;gap:4px;width:80px;margin-top:4px;background:none;border:1px solid var(--sbx-error);border-radius:var(--sbx-r-sm);padding:3px 8px;font-size:12px;color:var(--sbx-error);cursor:pointer}._removeIconBtn_hrhbs_233:hover{background:#fff0f0}._tagChip_hrhbs_252{display:inline-flex;align-items:center;gap:4px;background:var(--sbx-primary-light, #e8f4fd);color:var(--sbx-primary);border-radius:var(--sbx-r-xl);padding:3px 10px;font-size:13px;font-weight:500}._tagChipRemove_hrhbs_264{display:inline-flex;align-items:center;background:none;border:none;padding:0 0 0 2px;cursor:pointer;color:var(--sbx-primary);line-height:1}._tagChipRemove_hrhbs_264:hover{color:var(--sbx-error)}._nestedSelectRow_hrhbs_278{display:flex;gap:12px;flex-wrap:wrap}._nestedSelectRow_hrhbs_278>*{min-width:140px}._dialcodeRow_hrhbs_287{display:flex;align-items:center;gap:8px}._validateBtn_hrhbs_293{flex-shrink:0;padding:8px 14px;background:var(--sbx-primary);color:#fff;border:none;border-radius:var(--sbx-r-sm);font-size:13px;font-family:var(--sbx-font);font-weight:600;cursor:pointer;white-space:nowrap;transition:background .15s}._validateBtn_hrhbs_293:hover:not(:disabled){background:var(--sbx-primary-dark, #0056b3)}._validateBtn_hrhbs_293:disabled{opacity:.6;cursor:not-allowed}._dialcodeValid_hrhbs_315{font-size:12px;color:var(--sbx-success, #2e7d32)}@keyframes _spin_hrhbs_1{to{transform:rotate(360deg)}}._dialcodeSpinner_hrhbs_325{animation:_spin_hrhbs_1 1s linear infinite}._overlay_1o29p_1{position:fixed;top:0;right:0;bottom:0;left:0;background:#00000080;z-index:2000;display:flex;align-items:center;justify-content:center;padding:16px}._modal_1o29p_12{background:#fff;border-radius:8px;box-shadow:0 8px 32px #0003;width:760px;max-width:100%;max-height:90vh;display:flex;flex-direction:column;overflow:hidden}._header_1o29p_24{display:flex;align-items:center;justify-content:space-between;padding:16px 20px;border-bottom:1px solid var(--sbx-gray-100, #f0f0f0);flex-shrink:0}._title_1o29p_33{font-size:16px;font-weight:600;color:var(--sbx-gray-900, #111)}._closeBtn_1o29p_39{display:flex;align-items:center;justify-content:center;width:32px;height:32px;border:none;background:none;color:var(--sbx-gray-500, #6b7280);cursor:pointer;border-radius:6px;transition:background .15s,color .15s}._closeBtn_1o29p_39:hover{background:var(--sbx-gray-100, #f3f4f6);color:var(--sbx-gray-800, #1f2937)}._tabs_1o29p_57{display:flex;gap:0;padding:0 20px;border-bottom:1px solid var(--sbx-gray-100, #f0f0f0);flex-shrink:0}._tab_1o29p_57{display:flex;align-items:center;padding:10px 18px;font-size:13px;font-weight:500;color:var(--sbx-gray-500, #6b7280);background:none;border:none;border-bottom:2px solid transparent;cursor:pointer;margin-bottom:-1px;transition:color .15s,border-color .15s}._tab_1o29p_57:hover{color:var(--sbx-primary, #1890ff)}._activeTab_1o29p_83{color:var(--sbx-primary, #1890ff);border-bottom-color:var(--sbx-primary, #1890ff)}._body_1o29p_88{flex:1;min-height:0;overflow:hidden;display:flex;flex-direction:column;padding:16px 20px;gap:12px}._searchWrap_1o29p_99{position:relative;flex-shrink:0}._searchIcon_1o29p_104{position:absolute;left:10px;top:50%;transform:translateY(-50%);color:var(--sbx-gray-400, #9ca3af);pointer-events:none}._searchInput_1o29p_113{width:100%;padding:8px 12px 8px 32px;border:1.5px solid var(--sbx-gray-200, #e5e7eb);border-radius:20px;font-size:13px;font-family:var(--sbx-font, inherit);outline:none;box-sizing:border-box;transition:border-color .15s}._searchInput_1o29p_113:focus{border-color:var(--sbx-primary, #1890ff)}._searchInput_1o29p_113::placeholder{color:var(--sbx-gray-400, #9ca3af)}._grid_1o29p_132{display:grid;grid-template-columns:repeat(6,1fr);gap:10px;overflow-y:auto;flex:1;min-height:0}._grid_1o29p_132::-webkit-scrollbar{width:4px}._grid_1o29p_132::-webkit-scrollbar-thumb{background:var(--sbx-gray-300, #d1d5db);border-radius:2px}._imgCell_1o29p_148{aspect-ratio:1;border:2px solid var(--sbx-gray-200, #e5e7eb);border-radius:8px;overflow:hidden;cursor:pointer;position:relative;display:flex;align-items:center;justify-content:center;background:var(--sbx-gray-50, #f9fafb);padding:0;transition:border-color .15s}._imgCell_1o29p_148:hover{border-color:var(--sbx-primary, #1890ff)}._imgCellSelected_1o29p_166{border-color:var(--sbx-primary, #1890ff);box-shadow:0 0 0 1px var(--sbx-primary, #1890ff)}._thumb_1o29p_171{width:100%;height:100%;object-fit:cover}._noThumb_1o29p_177{font-size:10px;color:var(--sbx-gray-400, #9ca3af);font-weight:500}._checkBadge_1o29p_183{position:absolute;top:4px;right:4px;width:20px;height:20px;background:var(--sbx-primary, #1890ff);border-radius:50%;display:flex;align-items:center;justify-content:center;color:#fff}._loadMoreBtn_1o29p_198{flex-shrink:0;display:flex;align-items:center;justify-content:center;width:100%;padding:8px 0;background:none;border:1px solid var(--sbx-primary, #1890ff);border-radius:4px;color:var(--sbx-primary, #1890ff);font-size:13px;font-weight:500;font-family:var(--sbx-font, inherit);cursor:pointer;transition:background .15s}._loadMoreBtn_1o29p_198:hover{background:var(--sbx-primary-light, #e6f4ff)}._loadingRow_1o29p_220{display:flex;align-items:center;justify-content:center;gap:8px;padding:24px;color:var(--sbx-gray-500, #6b7280);font-size:13px}._empty_1o29p_230{text-align:center;color:var(--sbx-gray-400, #9ca3af);font-size:13px;padding:32px}._spinner_1o29p_237{animation:_spin_1o29p_237 1s linear infinite}@keyframes _spin_1o29p_237{to{transform:rotate(360deg)}}._uploadArea_1o29p_247{display:flex;flex-direction:column;align-items:center;gap:12px;flex:1;justify-content:center}._dropZone_1o29p_256{width:100%;max-width:420px;min-height:200px;border:2px dashed var(--sbx-gray-300, #d1d5db);border-radius:10px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px;cursor:pointer;transition:border-color .15s,background .15s;padding:20px;box-sizing:border-box}._dropZone_1o29p_256:hover{border-color:var(--sbx-primary, #1890ff);background:var(--sbx-primary-light, #e6f4ff)}._uploadIcon_1o29p_277{color:var(--sbx-gray-400, #9ca3af)}._dropText_1o29p_281{margin:0;font-size:14px;font-weight:500;color:var(--sbx-gray-700, #374151)}._dropSubtext_1o29p_288{margin:0;font-size:12px;color:var(--sbx-gray-400, #9ca3af)}._uploadPreview_1o29p_294{max-width:100%;max-height:180px;object-fit:contain;border-radius:6px}._hiddenInput_1o29p_301{display:none}._fileName_1o29p_305{margin:0;font-size:12px;color:var(--sbx-gray-600, #4b5563)}._errorText_1o29p_311{margin:0;font-size:12px;color:#dc2626}._footer_1o29p_318{display:flex;align-items:center;justify-content:flex-end;gap:10px;padding:12px 20px;border-top:1px solid var(--sbx-gray-100, #f0f0f0);flex-shrink:0}._cancelBtn_1o29p_328{padding:8px 20px;background:none;border:1.5px solid var(--sbx-gray-300, #d1d5db);border-radius:6px;font-size:13px;font-weight:500;font-family:var(--sbx-font, inherit);color:var(--sbx-gray-700, #374151);cursor:pointer;transition:border-color .15s,background .15s}._cancelBtn_1o29p_328:hover{border-color:var(--sbx-gray-500, #6b7280);background:var(--sbx-gray-50, #f9fafb)}._confirmBtn_1o29p_345{display:flex;align-items:center;gap:6px;padding:8px 20px;background:var(--sbx-primary, #1890ff);border:none;border-radius:6px;font-size:13px;font-weight:600;font-family:var(--sbx-font, inherit);color:#fff;cursor:pointer;transition:opacity .15s}._confirmBtn_1o29p_345:hover:not(:disabled){opacity:.9}._confirmBtn_1o29p_345:disabled{opacity:.45;cursor:not-allowed}._form_szqex_1{display:flex;flex-direction:column;gap:20px}._ungrouped_szqex_7{display:grid;grid-template-columns:1fr 1fr;gap:16px 24px}@media (max-width: 700px){._ungrouped_szqex_7{grid-template-columns:1fr}}._noFields_szqex_18{color:var(--sbx-gray-400);font-size:13px;font-style:italic}._row_11nth_1{display:flex;align-items:center;gap:10px;padding:8px 12px;border-radius:var(--sbx-r-md);border:1px solid var(--sbx-gray-200);background:#fff;transition:box-shadow .15s}._row_11nth_1:hover{box-shadow:var(--sbx-shadow-1)}._row_11nth_1:hover ._removeBtn_11nth_14,._row_11nth_1:hover ._grip_11nth_17{opacity:1}._grip_11nth_17{color:var(--sbx-gray-300);cursor:grab;display:flex;align-items:center;opacity:0;transition:opacity .1s;flex-shrink:0}._grip_11nth_17:active{cursor:grabbing}._ctIcon_11nth_34{flex-shrink:0}._info_11nth_38{flex:1;min-width:0;display:flex;flex-direction:column;gap:1px}._name_11nth_46{font-size:13px;font-weight:500;color:var(--sbx-gray-800);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}._meta_11nth_55{font-size:11px;color:var(--sbx-gray-500)}._removeBtn_11nth_14{flex-shrink:0;display:flex;align-items:center;justify-content:center;width:24px;height:24px;border:none;background:none;color:var(--sbx-gray-400);cursor:pointer;border-radius:var(--sbx-r-xs);opacity:0;transition:opacity .1s,color .1s}._removeBtn_11nth_14:hover{color:var(--sbx-error);background:#dc262614}._container_lzvke_1{display:flex;flex-direction:column;gap:12px}._header_lzvke_7{display:flex;align-items:center;gap:8px}._heading_lzvke_13{font-size:13px;font-weight:600;color:var(--sbx-gray-700);text-transform:uppercase;letter-spacing:.04em}._count_lzvke_21{font-size:12px;font-weight:600;background:var(--sbx-gray-100);color:var(--sbx-gray-600);padding:1px 8px;border-radius:var(--sbx-r-xl)}._list_lzvke_30{display:flex;flex-direction:column;gap:4px}._emptyState_lzvke_36{padding:16px;text-align:center;color:var(--sbx-gray-400);border:1.5px dashed var(--sbx-gray-200);border-radius:var(--sbx-r-md)}._emptyState_lzvke_36 p{margin:0 0 4px;font-size:14px;font-weight:500}._emptyState_lzvke_36 span{font-size:12px}._addRow_lzvke_52{display:flex;align-items:center;gap:8px;width:100%;padding:10px 16px;border:1.5px dashed var(--sbx-gray-300);border-radius:var(--sbx-r-md);background:none;cursor:pointer;font-size:13px;color:var(--sbx-gray-500);transition:all .15s}._addRow_lzvke_52:hover{border-color:var(--sbx-primary);color:var(--sbx-primary);background:var(--sbx-primary-light)}._dropZone_ijo5w_1{display:none;align-items:center;justify-content:center;border:2px dashed var(--sbx-gray-300);border-radius:var(--sbx-r-md);padding:24px;color:var(--sbx-gray-500);font-size:14px;font-weight:500;transition:all .2s}._active_ijo5w_14{display:flex;border-color:var(--sbx-primary);color:var(--sbx-primary);background:var(--sbx-primary-light)}._contentPlayerRoot_gf3xd_1{display:flex;flex-direction:column;flex:1 1 auto;min-height:0;overflow:hidden}._stage_gf3xd_9{position:relative;background:#0d1117;display:flex;flex-direction:column;flex:1 1 auto;min-height:0;overflow:hidden}._playerHeader_gf3xd_19{position:absolute;top:0;left:0;right:0;z-index:10;display:flex;align-items:center;gap:10px;padding:10px 14px 24px;background:linear-gradient(to bottom,rgba(0,0,0,.72) 0%,transparent 100%);pointer-events:none}._playerHeaderThumb_gf3xd_33{width:32px;height:32px;border-radius:6px;object-fit:cover;flex-shrink:0;opacity:.9;border:1.5px solid rgba(255,255,255,.2)}._playerHeaderTitle_gf3xd_43{flex:1;font-size:13px;font-weight:600;color:#ffffffeb;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}._typeBadge_gf3xd_53{display:inline-flex;align-items:center;gap:4px;padding:3px 9px;border-radius:999px;font-size:11px;font-weight:700;letter-spacing:.5px;text-transform:uppercase;color:#fff;flex-shrink:0;pointer-events:auto}._typeBadge_gf3xd_53[data-type=video]{background:#e63946}._typeBadge_gf3xd_53[data-type=pdf]{background:#2563eb}._typeBadge_gf3xd_53[data-type=epub]{background:#7c3aed}._typeBadge_gf3xd_53[data-type=ecml]{background:#059669}._typeBadge_gf3xd_53[data-type=h5p]{background:#d97706}._typeBadge_gf3xd_53[data-type=scorm]{background:#0891b2}._typeBadge_gf3xd_53[data-type=audio]{background:#7c3aed}._typeBadge_gf3xd_53[data-type=other]{background:#64748b}._typeDot_gf3xd_92{width:6px;height:6px;border-radius:50%;background:#ffffffb3}._aspectRatio_gf3xd_99{position:relative;width:100%;flex:1 1 auto;min-height:0}._aspectRatio_gf3xd_99>*{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%}._playerFrame_gf3xd_112{width:100%;height:100%;border:none;display:block;background:#000}._coverOverlay_gf3xd_120{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;background:#0d1117;z-index:5;transition:opacity .4s ease}._coverOverlay_gf3xd_120._coverHidden_gf3xd_132{opacity:0;pointer-events:none}._coverThumb_gf3xd_137{width:80px;height:80px;border-radius:12px;object-fit:cover;opacity:.85;border:2px solid rgba(255,255,255,.15)}._coverPlayRing_gf3xd_146{position:relative;width:60px;height:60px;border-radius:50%;border:2px solid rgba(255,255,255,.3);display:flex;align-items:center;justify-content:center;background:#ffffff14;animation:_pulse_gf3xd_1 2s ease-in-out infinite}._coverPlayIcon_gf3xd_159{width:0;height:0;border-top:11px solid transparent;border-bottom:11px solid transparent;border-left:18px solid rgba(255,255,255,.85);margin-left:4px}._coverLabel_gf3xd_168{font-size:12px;color:#ffffff73;letter-spacing:.5px}._coverSkeleton_gf3xd_174{width:100%;height:100%;background:linear-gradient(90deg,#1a1f2e 25%,#242938,#1a1f2e 75%);background-size:200% 100%;animation:_shimmer_gf3xd_1 1.6s infinite}@keyframes _shimmer_gf3xd_1{0%{background-position:200% 0}to{background-position:-200% 0}}@keyframes _pulse_gf3xd_1{0%,to{transform:scale(1);opacity:.8}50%{transform:scale(1.1);opacity:1}}._playerWrapper_gf3xd_200{width:100%;height:100%;display:flex;align-items:center;justify-content:center;background:#000;overflow:hidden}._infoStrip_gf3xd_210{display:flex;align-items:center;gap:0;padding:0 4px;background:#161b27;border-top:1px solid rgba(255,255,255,.07);overflow-x:auto;flex-shrink:0;min-height:38px;scrollbar-width:none}._infoStrip_gf3xd_210::-webkit-scrollbar{display:none}._infoChip_gf3xd_226{display:inline-flex;align-items:center;gap:5px;padding:0 12px;height:38px;flex-shrink:0;border-right:1px solid rgba(255,255,255,.07);font-size:12px;color:#fff9;transition:color .15s}._infoChip_gf3xd_226:hover{color:#ffffffe6}._infoChip_gf3xd_226:last-child{border-right:none}._infoChipLabel_gf3xd_245{font-size:10px;font-weight:600;text-transform:uppercase;letter-spacing:.4px;color:#ffffff59;margin-right:2px}._infoChipIcon_gf3xd_254{font-size:13px;opacity:.6;flex-shrink:0}._qumlRoot_gf3xd_260{display:flex;flex-direction:column;flex:1 1 auto;min-height:0;background:#0d1117}._qumlRoot_gf3xd_260 ._playerWrapper_gf3xd_200{flex:1;min-height:0}._overlay_1856m_1{position:fixed;top:0;right:0;bottom:0;left:0;background:#00000080;z-index:1000;display:flex;align-items:center;justify-content:center}._modal_1856m_11{background:#fff;border-radius:8px;width:440px;max-height:70vh;display:flex;flex-direction:column;box-shadow:0 8px 32px #0000002e}._header_1856m_21{display:flex;justify-content:space-between;align-items:center;padding:16px 20px;font-weight:600;font-size:16px;border-bottom:1px solid #e8e8e8}._header_1856m_21 button{background:none;border:none;cursor:pointer}._body_1856m_37{padding:16px;overflow-y:auto;flex:1}._hint_1856m_43{font-size:13px;color:#555;margin-bottom:12px}._list_1856m_49{list-style:none;margin:0;padding:0}._item_1856m_55{display:flex;align-items:center;gap:8px;padding:10px 12px;border-radius:6px;cursor:pointer;font-size:14px}._item_1856m_55:hover{background:#f0f7ff}._selected_1856m_68{background:#e6f4ff;border:1px solid #91caff}._empty_1856m_73{padding:16px;color:#888;font-size:13px}._footer_1856m_79{display:flex;justify-content:flex-end;gap:8px;padding:12px 20px;border-top:1px solid #e8e8e8}._cancelBtn_1856m_87{padding:8px 16px;background:none;border:1px solid #d9d9d9;border-radius:4px;cursor:pointer}._moveBtn_1856m_95{padding:8px 16px;background:#1890ff;color:#fff;border:none;border-radius:4px;cursor:pointer}._moveBtn_1856m_95:disabled{background:#b0d4f9;cursor:not-allowed}._overlay_pv0x1_1{position:fixed;top:0;right:0;bottom:0;left:0;background:#00000080;z-index:1000;display:flex;align-items:center;justify-content:center}._modal_pv0x1_11{background:#fff;border-radius:8px;width:560px;max-height:80vh;display:flex;flex-direction:column;box-shadow:0 8px 32px #0000002e}._header_pv0x1_21{display:flex;justify-content:space-between;align-items:center;padding:16px 20px;font-weight:600;font-size:16px;border-bottom:1px solid #e8e8e8}._header_pv0x1_21 button{background:none;border:none;cursor:pointer}._body_pv0x1_37{padding:16px;overflow-y:auto;flex:1}._table_pv0x1_43{width:100%;border-collapse:collapse}._table_pv0x1_43 th,._table_pv0x1_43 td{padding:10px 12px;border-bottom:1px solid #f0f0f0;text-align:left;font-size:14px}._table_pv0x1_43 th{font-weight:600;color:#555;background:#fafafa}._pageInput_pv0x1_61{width:80px;padding:4px 8px;border:1px solid #d9d9d9;border-radius:4px}._empty_pv0x1_68{color:#888;text-align:center;padding:24px}._footer_pv0x1_74{display:flex;justify-content:flex-end;gap:8px;padding:12px 20px;border-top:1px solid #e8e8e8}._cancelBtn_pv0x1_82{padding:8px 16px;background:none;border:1px solid #d9d9d9;border-radius:4px;cursor:pointer}._saveBtn_pv0x1_90{display:flex;align-items:center;gap:6px;padding:8px 16px;background:#1890ff;color:#fff;border:none;border-radius:4px;cursor:pointer}._container_1a7t2_1{display:flex;flex-direction:column;gap:0;border-top:1px solid var(--sbx-gray-200);background:#fff;flex-shrink:0}._panelHeader_1a7t2_10{display:flex;align-items:center;justify-content:space-between;padding:10px 16px;border-bottom:1px solid var(--sbx-gray-100);gap:8px}._panelHeaderLeft_1a7t2_19{display:flex;align-items:center;gap:10px;flex:1;min-width:0}._panelCollapseBtn_1a7t2_27{display:flex;align-items:center;justify-content:center;width:28px;height:28px;flex-shrink:0;border:none;background:transparent;color:var(--sbx-gray-400);border-radius:var(--sbx-r-sm);cursor:pointer;transition:background .15s,color .15s}._panelCollapseBtn_1a7t2_27:hover{background:var(--sbx-gray-100);color:var(--sbx-gray-700)}._titleRow_1a7t2_46,._field_1a7t2_47{padding:0 16px}._container_1a7t2_1>._titleRow_1a7t2_46{padding-top:16px}._container_1a7t2_1>._field_1a7t2_47:last-of-type{padding-bottom:16px}._container_1a7t2_1>*+._titleRow_1a7t2_46,._container_1a7t2_1>*+._field_1a7t2_47{margin-top:16px}._moveBtn_1a7t2_64{font-size:12px;padding:4px 12px;border:1px solid var(--sbx-gray-300);border-radius:var(--sbx-r-sm);background:#fff;cursor:pointer;color:var(--sbx-gray-600)}._moveBtn_1a7t2_64:hover{border-color:var(--sbx-primary);color:var(--sbx-primary)}._titleRow_1a7t2_46{display:flex;align-items:center;gap:12px}._icon_1a7t2_84{width:48px;height:48px;border-radius:var(--sbx-r-sm);object-fit:cover;flex-shrink:0;border:1px solid var(--sbx-gray-200)}._nameInput_1a7t2_93{flex:1;font-size:18px;font-weight:600;color:var(--sbx-gray-900);border:none;border-bottom:2px solid var(--sbx-gray-200);padding:4px 0;background:transparent;outline:none}._nameInput_1a7t2_93:focus{border-bottom-color:var(--sbx-primary)}._nameInput_1a7t2_93:disabled{color:var(--sbx-gray-700);cursor:default}._field_1a7t2_47{display:flex;flex-direction:column;gap:8px}._fieldHeader_1a7t2_118{display:flex;align-items:center;justify-content:space-between}._label_1a7t2_124{display:flex;align-items:center;gap:6px;font-size:13px;font-weight:600;color:var(--sbx-gray-700)}._fieldCount_1a7t2_133{display:inline-flex;align-items:center;justify-content:center;min-width:18px;height:18px;padding:0 5px;border-radius:9px;background:var(--sbx-primary-light, #EFF6FF);color:var(--sbx-primary);font-size:11px;font-weight:600}._collapseBtn_1a7t2_147{display:flex;align-items:center;justify-content:center;width:24px;height:24px;border:none;background:transparent;color:var(--sbx-gray-500);border-radius:var(--sbx-r-sm);cursor:pointer;transition:background .15s,color .15s}._collapseBtn_1a7t2_147:hover{background:var(--sbx-gray-100);color:var(--sbx-gray-700)}._chevronUp_1a7t2_165{transform:rotate(180deg);transition:transform .2s}._chips_1a7t2_170{display:flex;flex-wrap:wrap;gap:6px}._chip_1a7t2_170{display:inline-flex;align-items:center;gap:4px;padding:3px 10px;border-radius:var(--sbx-r-xl);background:var(--sbx-primary-light, #EFF6FF);color:var(--sbx-primary);font-size:12px;font-weight:500}._chipRemove_1a7t2_188{background:none;border:none;cursor:pointer;color:inherit;padding:0;line-height:1;font-size:14px;opacity:.7}._chipRemove_1a7t2_188:hover{opacity:1}._keywordInput_1a7t2_202{display:flex;gap:8px}._input_1a7t2_207{flex:1;height:36px;padding:0 10px;border:1.5px solid var(--sbx-gray-300);border-radius:var(--sbx-r-sm);font-size:13px;outline:none}._input_1a7t2_207:focus{border-color:var(--sbx-primary)}._addBtn_1a7t2_220{height:36px;padding:0 16px;border:1.5px solid var(--sbx-gray-300);border-radius:var(--sbx-r-sm);background:#fff;font-size:13px;cursor:pointer}._addBtn_1a7t2_220:hover{border-color:var(--sbx-primary);color:var(--sbx-primary)}._radioGroup_1a7t2_234{display:flex;gap:20px}._radioLabel_1a7t2_239{display:flex;align-items:center;gap:6px;font-size:13px;color:var(--sbx-gray-700);cursor:pointer}._radioLabel_1a7t2_239 input{cursor:pointer;accent-color:var(--sbx-primary)}._iconBtn_vl14u_1{position:relative;width:44px;height:44px;flex-shrink:0;border-radius:var(--sbx-r-sm);border:1.5px dashed var(--sbx-gray-300);overflow:visible;display:flex;align-items:center;justify-content:center;background:var(--sbx-gray-50)}._iconBtn_vl14u_1._editable_vl14u_14{cursor:pointer}._iconBtn_vl14u_1._editable_vl14u_14:hover{border-color:var(--sbx-primary);background:var(--sbx-primary-light, #eef3fd)}._iconBtn_vl14u_1._editable_vl14u_14:focus-visible{outline:2px solid var(--sbx-primary);outline-offset:2px}._iconImg_vl14u_26{width:100%;height:100%;object-fit:cover;border-radius:calc(var(--sbx-r-sm) - 1px);display:block}._placeholder_vl14u_34{display:flex;align-items:center;justify-content:center;color:var(--sbx-gray-400)}._removeBtn_vl14u_41{position:absolute;top:-7px;right:-7px;width:18px;height:18px;border-radius:50%;background:var(--sbx-error, #dc2626);color:#fff;border:none;cursor:pointer;display:none;align-items:center;justify-content:center;padding:0}._iconBtn_vl14u_1:hover ._removeBtn_vl14u_41{display:flex}._leafContentLayout_1e8xj_1{display:flex;flex-direction:column;height:100%;overflow:hidden}._leafContentLayout_1e8xj_1>*:first-child{flex:1 1 auto;min-height:0}._leafContentLayout_1e8xj_1>*:last-child{flex:0 0 auto;overflow-y:auto;background:#fff}._container_1e8xj_17{padding:20px 24px;display:flex;flex-direction:column;gap:0;min-height:100%;position:relative}._emptyState_1e8xj_26{display:flex;align-items:center;justify-content:center;height:100%;color:var(--sbx-gray-400);font-size:14px;font-style:italic}._titleRow_1e8xj_36{display:flex;align-items:center;gap:10px;margin:8px 0 16px}._titleIcon_1e8xj_43{width:40px;height:40px;border-radius:var(--sbx-r-sm);object-fit:cover;flex-shrink:0;border:1px solid var(--sbx-gray-200)}._nodeTitle_1e8xj_52{font-size:22px;font-weight:700;color:var(--sbx-gray-900);margin:0;outline:none;border-radius:var(--sbx-r-sm);padding:2px 4px;min-height:1.3em}._nodeTitle_1e8xj_52:focus{background:var(--sbx-gray-50);box-shadow:0 0 0 2px var(--sbx-primary)}._nodeTitle_1e8xj_52:empty:before{content:attr(data-placeholder);color:var(--sbx-gray-400)}._nodeTitle_1e8xj_52[contenteditable=false]{cursor:default}._formArea_1e8xj_74{margin-bottom:24px}._contentListArea_1e8xj_78{border-top:1px solid var(--sbx-gray-200);padding-top:20px}._dropZone_1e8xj_83{position:absolute;top:0;right:0;bottom:0;left:0;z-index:5;border-radius:0}._reviewComment_1e8xj_90{display:flex;gap:8px;align-items:flex-start;background:#fffbe6;border:1px solid #ffe58f;border-radius:var(--sbx-r-sm, 4px);padding:10px 14px;margin-bottom:12px;font-size:13px;line-height:1.5}._reviewCommentLabel_1e8xj_103{font-weight:600;color:#ad6800;white-space:nowrap}._reviewCommentText_1e8xj_109{color:#595959}._dialcodeSection_1e8xj_113{border-top:1px solid var(--sbx-gray-200, #e8e8e8);padding-top:16px;margin-top:8px;margin-bottom:16px}._sectionTitle_1e8xj_120{font-size:13px;font-weight:600;color:var(--sbx-gray-600, #555);text-transform:uppercase;letter-spacing:.4px;margin-bottom:10px}._contentToolbar_1e8xj_129{display:flex;gap:8px;padding:8px 24px;border-bottom:1px solid var(--sbx-gray-200, #e8e8e8);background:var(--sbx-gray-50, #fafafa)}._moveBtn_1e8xj_137{padding:4px 12px;font-size:12px;border:1px solid var(--sbx-gray-300, #d9d9d9);border-radius:4px;background:#fff;cursor:pointer}._moveBtn_1e8xj_137:hover{border-color:var(--sbx-primary, #1890ff);color:var(--sbx-primary, #1890ff)}._assignPageRow_1e8xj_150{border-top:1px solid var(--sbx-gray-200, #e8e8e8);padding-top:12px;margin-top:8px}._assignPageBtn_1e8xj_156{font-size:13px;padding:6px 14px;border:1px solid var(--sbx-gray-300, #d9d9d9);border-radius:4px;background:#fff;cursor:pointer}._assignPageBtn_1e8xj_156:hover{border-color:var(--sbx-primary, #1890ff);color:var(--sbx-primary, #1890ff)}._card_yw3wq_1{display:flex;align-items:center;gap:10px;padding:10px 10px 10px 12px;border-radius:var(--sbx-r-md);border:1px solid var(--sbx-gray-200);background:#fff;cursor:grab;transition:all .15s;-webkit-user-select:none;user-select:none}._card_yw3wq_1:hover{border-color:var(--sbx-primary);box-shadow:var(--sbx-shadow-1)}._card_yw3wq_1:hover ._addBtn_yw3wq_17{opacity:1}._card_yw3wq_1:active{cursor:grabbing}._dragging_yw3wq_24{opacity:.4;box-shadow:none}._ctIcon_yw3wq_29{flex-shrink:0}._info_yw3wq_33{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}._name_yw3wq_41{font-size:13px;font-weight:500;color:var(--sbx-gray-800);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}._meta_yw3wq_50{font-size:11px;color:var(--sbx-gray-500);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}._addBtn_yw3wq_17{flex-shrink:0;display:flex;align-items:center;justify-content:center;width:28px;height:28px;border:none;background:var(--sbx-primary-light);color:var(--sbx-primary);border-radius:var(--sbx-r-sm);cursor:pointer;opacity:0;transition:opacity .15s,background .15s}._addBtn_yw3wq_17:hover{background:var(--sbx-primary);color:#fff}._added_yw3wq_78{border-color:#16a34a;background:#f0fdf4}._added_yw3wq_78:hover{border-color:#16a34a;box-shadow:var(--sbx-shadow-1)}._addedBadge_yw3wq_87{flex-shrink:0;display:flex;align-items:center;justify-content:center;width:20px;height:20px;border-radius:50%;background:#16a34a;color:#fff}._chips_xhhaq_1{display:flex;gap:6px;overflow-x:auto;padding-bottom:2px;scrollbar-width:none}._chips_xhhaq_1::-webkit-scrollbar{display:none}._chip_xhhaq_1{flex-shrink:0;font-size:12px;padding:3px 10px}._panel_1cl11_1{display:flex;flex-direction:column;height:100%;background:#fff;border-left:1px solid var(--sbx-gray-200);overflow:hidden}._header_1cl11_10{display:flex;align-items:center;justify-content:space-between;padding:14px 16px;border-bottom:1px solid var(--sbx-gray-100);flex-shrink:0}._headerTitle_1cl11_19{font-size:14px;font-weight:600;color:var(--sbx-gray-800)}._closeBtn_1cl11_25{display:flex;align-items:center;justify-content:center;width:28px;height:28px;border:none;background:transparent;color:var(--sbx-gray-500);border-radius:var(--sbx-r-sm);cursor:pointer;transition:background .15s,color .15s}._closeBtn_1cl11_25:hover{background:var(--sbx-gray-100);color:var(--sbx-gray-800)}._body_1cl11_43{flex:1;overflow-y:auto;padding:12px 16px;display:flex;flex-direction:column;gap:16px}._body_1cl11_43::-webkit-scrollbar{width:4px}._body_1cl11_43::-webkit-scrollbar-thumb{background:var(--sbx-gray-300);border-radius:2px}._section_1cl11_59{display:flex;flex-direction:column;gap:8px}._sectionLabel_1cl11_65{font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.06em;color:var(--sbx-gray-500)}._chips_1cl11_73{display:flex;flex-wrap:wrap;gap:6px}._chip_1cl11_73{padding:4px 10px;font-size:12px;font-family:var(--sbx-font);font-weight:500;border:1.5px solid var(--sbx-gray-200);border-radius:var(--sbx-r-xl);background:#fff;color:var(--sbx-gray-700);cursor:pointer;transition:border-color .15s,background .15s,color .15s;line-height:1.4}._chip_1cl11_73:hover{border-color:var(--sbx-primary);color:var(--sbx-primary)}._chip_1cl11_73._active_1cl11_96{border-color:var(--sbx-primary);background:var(--sbx-primary-light);color:var(--sbx-primary)}._footer_1cl11_102{display:flex;align-items:center;justify-content:flex-end;gap:8px;padding:12px 16px;border-top:1px solid var(--sbx-gray-100);flex-shrink:0}._resetBtn_1cl11_112{padding:6px 16px;font-size:13px;font-family:var(--sbx-font);font-weight:500;border:1.5px solid var(--sbx-gray-200);border-radius:var(--sbx-r-md);background:#fff;color:var(--sbx-gray-600);cursor:pointer;transition:border-color .15s,background .15s}._resetBtn_1cl11_112:hover{border-color:var(--sbx-gray-400);background:var(--sbx-gray-50)}._applyBtn_1cl11_129{padding:6px 16px;font-size:13px;font-family:var(--sbx-font);font-weight:600;border:none;border-radius:var(--sbx-r-md);background:var(--sbx-primary);color:#fff;cursor:pointer;transition:background .15s,opacity .15s}._applyBtn_1cl11_129:hover{opacity:.9}._applyBtn_1cl11_129:active{opacity:.8}._panel_447ww_1{display:flex;flex-direction:column;height:100%;background:#fff;border-left:1px solid var(--sbx-gray-200);overflow:hidden}._header_447ww_10{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:14px 16px;border-bottom:1px solid var(--sbx-gray-100);flex-shrink:0}._title_447ww_20{font-size:14px;font-weight:600;color:var(--sbx-gray-800);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0}._headerActions_447ww_31{display:flex;align-items:center;gap:2px;flex-shrink:0}._iconBtn_447ww_38{display:flex;align-items:center;justify-content:center;width:28px;height:28px;border:none;background:transparent;color:var(--sbx-gray-500);border-radius:var(--sbx-r-sm);cursor:pointer;transition:background .15s,color .15s}._iconBtn_447ww_38:hover{background:var(--sbx-gray-100);color:var(--sbx-gray-800)}._playerArea_447ww_56{flex:1;overflow:hidden;min-height:0}._footer_447ww_62{display:flex;align-items:center;justify-content:flex-end;padding:12px 16px;border-top:1px solid var(--sbx-gray-100);flex-shrink:0}._addBtn_447ww_71{padding:8px 20px;font-size:13px;font-family:var(--sbx-font);font-weight:600;border:none;border-radius:var(--sbx-r-md);background:var(--sbx-primary);color:#fff;cursor:pointer;transition:background .15s,opacity .15s}._addBtn_447ww_71:hover{opacity:.9}._addBtn_447ww_71:active{opacity:.8}._modalOverlay_447ww_90{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1000;background:#0000008c;display:flex;align-items:center;justify-content:center;padding:24px}._modalPanel_447ww_101{display:flex;flex-direction:column;width:100%;max-width:900px;height:90vh;background:#fff;border-radius:var(--sbx-r-lg, 10px);overflow:hidden;box-shadow:0 20px 60px #00000040}._dock_1gzy4_1{display:flex;flex-direction:column;height:100%;overflow:hidden}._header_1gzy4_8{display:flex;align-items:center;justify-content:space-between;padding:14px 16px 10px;border-bottom:1px solid var(--sbx-gray-100);flex-shrink:0}._headerLeft_1gzy4_17{display:flex;align-items:center;gap:8px;color:var(--sbx-gray-700)}._headerTitle_1gzy4_24{font-size:14px;font-weight:600;color:var(--sbx-gray-800)}._count_1gzy4_30{font-size:12px;font-weight:600;background:var(--sbx-gray-100);color:var(--sbx-gray-600);padding:2px 8px;border-radius:var(--sbx-r-xl)}._searchRow_1gzy4_39{display:flex;align-items:center;gap:6px;padding:10px 12px 6px;flex-shrink:0}._searchWrap_1gzy4_47{position:relative;flex:1;min-width:0}._searchIcon_1gzy4_53{position:absolute;left:10px;top:50%;transform:translateY(-50%);color:var(--sbx-gray-400);pointer-events:none}._searchInput_1gzy4_62{width:100%;padding:7px 10px 7px 32px;border:1.5px solid var(--sbx-gray-200);border-radius:var(--sbx-r-xl);font-size:13px;font-family:var(--sbx-font);outline:none;transition:border-color .15s;box-sizing:border-box}._searchInput_1gzy4_62:focus{border-color:var(--sbx-primary)}._searchInput_1gzy4_62::placeholder{color:var(--sbx-gray-400)}._filterToggleBtn_1gzy4_80{flex-shrink:0;position:relative;display:flex;align-items:center;justify-content:center;width:32px;height:32px;border:1.5px solid var(--sbx-gray-200);border-radius:var(--sbx-r-md);background:#fff;color:var(--sbx-gray-600);cursor:pointer;transition:border-color .15s,background .15s,color .15s}._filterToggleBtn_1gzy4_80:hover{border-color:var(--sbx-primary);color:var(--sbx-primary)}._filterToggleBtn_1gzy4_80._filterToggleBtnActive_1gzy4_99{border-color:var(--sbx-primary);background:var(--sbx-primary-light);color:var(--sbx-primary)}._filterBadge_1gzy4_105{position:absolute;top:-5px;right:-5px;min-width:16px;height:16px;padding:0 4px;border-radius:8px;background:var(--sbx-primary);color:#fff;font-size:10px;font-weight:700;display:flex;align-items:center;justify-content:center;line-height:1;box-sizing:border-box}._filters_1gzy4_124{padding:4px 12px 8px;flex-shrink:0;overflow-x:auto;scrollbar-width:none}._filters_1gzy4_124::-webkit-scrollbar{display:none}._mainArea_1gzy4_134{flex:1;overflow:hidden;min-height:0;position:relative;display:flex;flex-direction:column}._cardList_1gzy4_143{flex:1;overflow-y:auto;padding:4px 12px 12px;display:flex;flex-direction:column;gap:6px}._cardList_1gzy4_143::-webkit-scrollbar{width:4px}._cardList_1gzy4_143::-webkit-scrollbar-thumb{background:var(--sbx-gray-300);border-radius:2px}._skeleton_1gzy4_159{display:flex;align-items:center;gap:10px;padding:10px;border-radius:var(--sbx-r-md);background:var(--sbx-gray-50);animation:_pulse_1gzy4_1 1.5s ease-in-out infinite}._skeletonIcon_1gzy4_169{width:32px;height:32px;border-radius:6px;background:var(--sbx-gray-200);flex-shrink:0}._skeletonText_1gzy4_177{flex:1;display:flex;flex-direction:column;gap:6px}._skeletonLine_1gzy4_184{height:12px;background:var(--sbx-gray-200);border-radius:4px;width:80%}._skeletonLineSm_1gzy4_191{height:10px;background:var(--sbx-gray-100);border-radius:4px;width:50%}@keyframes _pulse_1gzy4_1{0%,to{opacity:1}50%{opacity:.5}}._loadMoreBtn_1gzy4_206{display:flex;align-items:center;justify-content:center;width:100%;padding:8px 0;margin-top:4px;background:none;border:1px solid var(--sbx-primary, #1890ff);border-radius:var(--sbx-r-sm, 4px);color:var(--sbx-primary, #1890ff);font-size:13px;font-weight:500;font-family:var(--sbx-font);cursor:pointer;transition:background .15s,color .15s}._loadMoreBtn_1gzy4_206:hover{background:var(--sbx-primary-light, #e6f4ff)}._loadMoreBtn_1gzy4_206:disabled{opacity:.5;cursor:not-allowed}._emptyState_1gzy4_231{display:flex;flex-direction:column;align-items:center;justify-content:center;flex:1;gap:8px;color:var(--sbx-gray-400);padding:24px;text-align:center}._emptyState_1gzy4_231 p{margin:0;font-size:14px;font-weight:500}._emptyState_1gzy4_231 span{font-size:12px}._collapseBtn_1gzy4_251{display:flex;align-items:center;justify-content:center;width:28px;height:28px;flex-shrink:0;border:none;background:transparent;color:var(--sbx-gray-400);border-radius:var(--sbx-r-sm);cursor:pointer;transition:background .15s,color .15s}._collapseBtn_1gzy4_251:hover{background:var(--sbx-gray-100);color:var(--sbx-gray-700)}._shell_90fon_1{display:flex;flex-direction:column;height:100%;overflow:hidden}._workspace_90fon_8{display:grid;grid-template-columns:var(--sbx-tree-w, 284px) 1fr var(--sbx-dock-w, 312px);flex:1;overflow:hidden;min-height:0;position:relative}._workspace_90fon_8._sidebarCollapsed_90fon_16{grid-template-columns:0 1fr var(--sbx-dock-w, 312px)}._workspace_90fon_8._dockCollapsed_90fon_19{grid-template-columns:var(--sbx-tree-w, 284px) 1fr 0}._workspace_90fon_8._sidebarCollapsed_90fon_16._dockCollapsed_90fon_19{grid-template-columns:0 1fr 0}@media (max-width: 1200px){._workspace_90fon_8{grid-template-columns:var(--sbx-tree-w, 284px) 1fr}._workspace_90fon_8 ._dock_90fon_19{display:none}._workspace_90fon_8._sidebarCollapsed_90fon_16{grid-template-columns:0 1fr}}@media (max-width: 900px){._workspace_90fon_8{grid-template-columns:1fr}._workspace_90fon_8 ._outline_90fon_40{display:none}}._reopenTab_90fon_45{position:absolute;left:0;top:10px;z-index:20;width:20px;height:36px;border-radius:0 var(--sbx-r-sm) var(--sbx-r-sm) 0;border:1px solid var(--sbx-gray-200);border-left:none;background:#fff;cursor:pointer;display:flex;align-items:center;justify-content:center;color:var(--sbx-gray-500);font-size:16px;font-weight:700;box-shadow:2px 0 4px #0000000f;transition:color .15s}._reopenTab_90fon_45:hover{color:var(--sbx-primary)}._outline_90fon_40{border-right:1px solid var(--sbx-gray-200);overflow:hidden;display:flex;flex-direction:column;background:#fff;transition:width .2s}._outlineHidden_90fon_79{overflow:hidden;width:0;min-width:0;border-right:none}._editor_90fon_86{overflow-y:auto;background:var(--sbx-gray-50);min-width:0}._dock_90fon_19{border-left:1px solid var(--sbx-gray-200);overflow:hidden;display:flex;flex-direction:column;background:#fff;transition:width .2s}._dockHidden_90fon_101{overflow:hidden;width:0;min-width:0;border-left:none}._dockReopenTab_90fon_108{position:absolute;right:0;top:10px;z-index:20;width:20px;height:36px;border-radius:var(--sbx-r-sm) 0 0 var(--sbx-r-sm);border:1px solid var(--sbx-gray-200);border-right:none;background:#fff;cursor:pointer;display:flex;align-items:center;justify-content:center;color:var(--sbx-gray-500);font-size:16px;font-weight:700;box-shadow:-2px 0 4px #0000000f;transition:color .15s}._dockReopenTab_90fon_108:hover{color:var(--sbx-primary)}._dragChip_90fon_133{background:var(--sbx-primary);color:#fff;border-radius:var(--sbx-r-xl);padding:6px 14px;font-size:13px;font-weight:600;box-shadow:var(--sbx-shadow-2);pointer-events:none;white-space:nowrap;max-width:200px;display:flex;align-items:center}._dragChipLabel_90fon_148{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:block}._placeholder_90fon_155{flex:1;display:flex;align-items:center;justify-content:center;min-height:120px;padding:24px}._placeholderLabel_90fon_164{font-family:var(--sbx-font);font-size:13px;color:var(--sbx-gray-400);background:var(--sbx-gray-100);border:1.5px dashed var(--sbx-gray-300);border-radius:var(--sbx-r-md);padding:10px 18px}.sb-split-builder{--sbx-primary: #2D6AE3;--sbx-primary-dark: #1A4FA8;--sbx-primary-light: #EEF3FD;--sbx-ai: #7A5BFF;--sbx-success: #16A34A;--sbx-error: #DC2626;--sbx-warning: #D97706;--sbx-info: #0EA5E9;--sbx-gray-50: #F9FAFB;--sbx-gray-100: #F3F4F6;--sbx-gray-200: #E5E7EB;--sbx-gray-300: #D1D5DB;--sbx-gray-400: #9CA3AF;--sbx-gray-500: #6B7280;--sbx-gray-600: #4B5563;--sbx-gray-700: #374151;--sbx-gray-800: #1F2937;--sbx-gray-900: #111827;--sbx-r-xs: 4px;--sbx-r-sm: 6px;--sbx-r-md: 10px;--sbx-r-lg: 14px;--sbx-r-xl: 20px;--sbx-shadow-1: 0 1px 3px rgba(0,0,0,.1), 0 1px 2px rgba(0,0,0,.06);--sbx-shadow-2: 0 4px 6px rgba(0,0,0,.07), 0 2px 4px rgba(0,0,0,.06);--sbx-shadow-3: 0 10px 15px rgba(0,0,0,.08), 0 4px 6px rgba(0,0,0,.05);--sbx-ct-video: #EA580C;--sbx-ct-pdf: #DC2626;--sbx-ct-h5p: #0D9488;--sbx-ct-scorm: #7C3AED;--sbx-ct-audio: #DB2777;--sbx-ct-quiz: #16A34A;--sbx-ct-default: #6B7280;--sbx-font: "Plus Jakarta Sans", "Noto Sans", "Noto Sans Devanagari", "Noto Sans Tamil", sans-serif;--sbx-topbar-h: 60px;--sbx-tree-w: 284px;--sbx-dock-w: 312px}.sbx-ct-sq--video{background-color:#ea580c;color:#fff;width:32px;height:32px;border-radius:6px;display:flex;align-items:center;justify-content:center;flex-shrink:0}.sbx-ct-badge--video{background-color:#ea580c1f;color:#ea580c;border-radius:4px;padding:2px 8px;font-size:11px;font-weight:600;display:inline-block}.sbx-ct-tint--video{color:#ea580c;font-weight:600}.sbx-ct-sq--pdf{background-color:#dc2626;color:#fff;width:32px;height:32px;border-radius:6px;display:flex;align-items:center;justify-content:center;flex-shrink:0}.sbx-ct-badge--pdf{background-color:#dc26261f;color:#dc2626;border-radius:4px;padding:2px 8px;font-size:11px;font-weight:600;display:inline-block}.sbx-ct-tint--pdf{color:#dc2626;font-weight:600}.sbx-ct-sq--h5p{background-color:#0d9488;color:#fff;width:32px;height:32px;border-radius:6px;display:flex;align-items:center;justify-content:center;flex-shrink:0}.sbx-ct-badge--h5p{background-color:#0d94881f;color:#0d9488;border-radius:4px;padding:2px 8px;font-size:11px;font-weight:600;display:inline-block}.sbx-ct-tint--h5p{color:#0d9488;font-weight:600}.sbx-ct-sq--scorm{background-color:#7c3aed;color:#fff;width:32px;height:32px;border-radius:6px;display:flex;align-items:center;justify-content:center;flex-shrink:0}.sbx-ct-badge--scorm{background-color:#7c3aed1f;color:#7c3aed;border-radius:4px;padding:2px 8px;font-size:11px;font-weight:600;display:inline-block}.sbx-ct-tint--scorm{color:#7c3aed;font-weight:600}.sbx-ct-sq--audio{background-color:#db2777;color:#fff;width:32px;height:32px;border-radius:6px;display:flex;align-items:center;justify-content:center;flex-shrink:0}.sbx-ct-badge--audio{background-color:#db27771f;color:#db2777;border-radius:4px;padding:2px 8px;font-size:11px;font-weight:600;display:inline-block}.sbx-ct-tint--audio{color:#db2777;font-weight:600}.sbx-ct-sq--quiz{background-color:#16a34a;color:#fff;width:32px;height:32px;border-radius:6px;display:flex;align-items:center;justify-content:center;flex-shrink:0}.sbx-ct-badge--quiz{background-color:#16a34a1f;color:#16a34a;border-radius:4px;padding:2px 8px;font-size:11px;font-weight:600;display:inline-block}.sbx-ct-tint--quiz{color:#16a34a;font-weight:600}.sbx-ct-sq--default{background-color:#6b7280;color:#fff;width:32px;height:32px;border-radius:6px;display:flex;align-items:center;justify-content:center;flex-shrink:0}.sbx-ct-badge--default{background-color:#6b72801f;color:#6b7280;border-radius:4px;padding:2px 8px;font-size:11px;font-weight:600;display:inline-block}.sbx-ct-tint--default{color:#6b7280;font-weight:600}*,*:before,*:after{box-sizing:border-box}.sb-split-builder{font-family:var(--sbx-font);color:var(--sbx-gray-900);line-height:1.5;-webkit-font-smoothing:antialiased}.sbx-chip{display:inline-flex;align-items:center;gap:6px;padding:4px 12px;border-radius:var(--sbx-r-xl);font-size:13px;font-weight:500;cursor:pointer;transition:all .15s;-webkit-user-select:none;user-select:none}.sbx-chip.filled{border:1.5px solid var(--sbx-primary);background:var(--sbx-primary);color:#fff}.sbx-chip.outline{border:1.5px solid var(--sbx-gray-300);color:var(--sbx-gray-700);background:#fff}.sbx-chip.outline:hover,.sbx-chip.outline.active{border-color:var(--sbx-primary);color:var(--sbx-primary);background:var(--sbx-primary-light)}.sbx-chip.filled.active{background:var(--sbx-primary-dark)}.sbx-chip .sbx-chip-remove{background:none;border:none;cursor:pointer;padding:0;line-height:1;color:inherit;opacity:.7}.sbx-chip .sbx-chip-remove:hover{opacity:1}.sbx-card{background:#fff;border-radius:var(--sbx-r-md);box-shadow:var(--sbx-shadow-1)}.sbx-btn,.sbx-btn-danger,.sbx-btn-ghost,.sbx-btn-primary{display:inline-flex;align-items:center;gap:6px;height:36px;border-radius:var(--sbx-r-md);padding:0 18px;font-size:14px;font-weight:600;cursor:pointer;border:none;transition:all .15s;white-space:nowrap;box-sizing:border-box}.sbx-btn:disabled,.sbx-btn-danger:disabled,.sbx-btn-ghost:disabled,.sbx-btn-primary:disabled{opacity:.5;cursor:not-allowed}.sbx-btn-primary{background:var(--sbx-primary);color:#fff}.sbx-btn-primary:hover:not(:disabled){background:var(--sbx-primary-dark)}.sbx-btn-ghost{background:transparent;color:var(--sbx-gray-700);border:1.5px solid var(--sbx-gray-300)}.sbx-btn-ghost:hover:not(:disabled){border-color:var(--sbx-primary);color:var(--sbx-primary)}.sbx-btn-danger{background:transparent;color:var(--sbx-error);border:1.5px solid var(--sbx-error)}.sbx-btn-danger:hover:not(:disabled){background:var(--sbx-error);color:#fff}.sbx-btn-sm{height:36px;padding:0 14px;font-size:13px;border-radius:var(--sbx-r-sm)}._root_qcpw6_1{width:100%;height:100vh;display:flex;flex-direction:column;overflow:hidden;background:var(--sbx-gray-50)}._loadingState_qcpw6_10{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100vh;gap:16px;color:var(--sbx-gray-500);font-family:var(--sbx-font)}._loadingState_qcpw6_10 ._loadingSpinner_qcpw6_20{width:40px;height:40px;border:3px solid var(--sbx-gray-200);border-top-color:var(--sbx-primary);border-radius:50%;animation:_spin_qcpw6_1 .8s linear infinite}@keyframes _spin_qcpw6_1{to{transform:rotate(360deg)}}._errorState_qcpw6_34{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100vh;gap:12px;font-family:var(--sbx-font);color:var(--sbx-error)}._errorState_qcpw6_34 h3{margin:0;font-size:18px}._errorState_qcpw6_34 p{margin:0;color:var(--sbx-gray-600);font-size:14px}._errorState_qcpw6_34 button{margin-top:8px;padding:8px 20px;border:1.5px solid var(--sbx-gray-300);border-radius:var(--sbx-r-sm);background:#fff;color:var(--sbx-gray-700);font-size:14px;cursor:pointer}._errorState_qcpw6_34 button:hover{border-color:var(--sbx-primary);color:var(--sbx-primary)}
@@ -0,0 +1,43 @@
1
+ export interface IContent {
2
+ identifier: string;
3
+ name: string;
4
+ description?: string;
5
+ mimeType?: string;
6
+ contentType?: string;
7
+ primaryCategory?: string;
8
+ appIcon?: string;
9
+ channel?: string;
10
+ organisation?: string[];
11
+ framework?: string;
12
+ status?: string;
13
+ visibility?: string;
14
+ pkgVersion?: number;
15
+ }
16
+ export interface ILibraryItem extends IContent {
17
+ isSelected?: boolean;
18
+ isDragging?: boolean;
19
+ }
20
+ export declare const CT_COLOR_MAP: {
21
+ readonly video: "#EA580C";
22
+ readonly pdf: "#DC2626";
23
+ readonly h5p: "#0D9488";
24
+ readonly scorm: "#7C3AED";
25
+ readonly audio: "#DB2777";
26
+ readonly quiz: "#16A34A";
27
+ readonly default: "#6B7280";
28
+ };
29
+ export declare const CT_ICON_MAP: {
30
+ readonly video: "Video";
31
+ readonly pdf: "FileText";
32
+ readonly h5p: "Layers";
33
+ readonly scorm: "Package";
34
+ readonly audio: "Music";
35
+ readonly quiz: "HelpCircle";
36
+ readonly default: "File";
37
+ };
38
+ export declare const LIBRARY_PRIMARY_CATEGORIES: readonly ["Course Assessment", "eTextbook", "Exam Question", "Explanation Content", "Learning Resource", "Practice Question Set", "SCORM Content", "Teacher Resource"];
39
+ export type LibraryPrimaryCategory = typeof LIBRARY_PRIMARY_CATEGORIES[number];
40
+ export declare const CT_FILTERS: ReadonlyArray<{
41
+ label: string;
42
+ value: string;
43
+ }>;
@@ -0,0 +1,86 @@
1
+ export type EditorMode = 'edit' | 'review' | 'read' | 'sourcingreview';
2
+ export type ToolbarAction = 'back' | 'preview' | 'sendForReview' | 'onFormValueChange' | 'onFormStatusChange' | 'addUnit' | 'addSubUnit' | 'saveCollection' | 'publish' | 'reject' | 'sendBackForCorrections' | 'sourcingApprove' | 'sourcingReject' | 'manageCollaborators' | 'csvUpload';
3
+ export interface IUser {
4
+ id: string;
5
+ fullName: string;
6
+ orgIds: string[];
7
+ }
8
+ export interface IContext {
9
+ authToken: string;
10
+ userId: string;
11
+ sid: string;
12
+ did: string;
13
+ uid?: string;
14
+ channel: string;
15
+ pdata: {
16
+ id: string;
17
+ ver: string;
18
+ pid?: string;
19
+ };
20
+ env: string;
21
+ contentId?: string;
22
+ identifier?: string;
23
+ framework?: string;
24
+ targetFWIds?: string[];
25
+ rollup?: Record<string, string>;
26
+ tags?: string[];
27
+ }
28
+ export interface IConfig {
29
+ mode: EditorMode;
30
+ objectType: string;
31
+ primaryCategory?: string;
32
+ framework?: string[];
33
+ targetFWIds?: string[];
34
+ toolbarConfig?: Record<string, unknown>;
35
+ hierarchy?: Record<string, unknown>;
36
+ children?: unknown[];
37
+ defaultFields?: Record<string, unknown>;
38
+ maxDepth?: number;
39
+ allowContentUnderRoot?: boolean;
40
+ }
41
+ export interface IEditorConfig {
42
+ context: IContext;
43
+ config: IConfig;
44
+ metadata?: Record<string, unknown>;
45
+ data?: unknown;
46
+ enableSplitBuilder?: boolean;
47
+ /** Base URL for all API calls (e.g. "https://your-domain.com"). Omit when using a proxy. */
48
+ apiBaseUrl?: string;
49
+ }
50
+ export interface IEditorEvents {
51
+ onToolbarEvent?: (event: {
52
+ action: ToolbarAction;
53
+ data?: unknown;
54
+ }) => void;
55
+ onContentAdded?: (item: unknown, targetNodeId: string) => void;
56
+ onHierarchySaved?: (hierarchy: unknown) => void;
57
+ onError?: (error: Error) => void;
58
+ }
59
+ export interface INode {
60
+ id: string;
61
+ identifier: string;
62
+ name: string;
63
+ title?: string;
64
+ description?: string;
65
+ primaryCategory?: string;
66
+ mimeType?: string;
67
+ objectType?: string;
68
+ contentType?: string;
69
+ visibility?: string;
70
+ status?: string;
71
+ appIcon?: string;
72
+ isFolder?: boolean;
73
+ children?: INode[];
74
+ metadata?: Record<string, unknown>;
75
+ parent?: string;
76
+ index?: number;
77
+ }
78
+ export interface IButtonLoaders {
79
+ saveCollection: boolean;
80
+ publishCollection: boolean;
81
+ addFromLibrary: boolean;
82
+ rejectCollection: boolean;
83
+ sendBackCollection: boolean;
84
+ sourcingApproveCollection: boolean;
85
+ sourcingRejectCollection: boolean;
86
+ }
@@ -0,0 +1,23 @@
1
+ export interface ITerm {
2
+ identifier: string;
3
+ name: string;
4
+ code: string;
5
+ index?: number;
6
+ associations?: ITerm[];
7
+ }
8
+ export interface ICategory {
9
+ identifier: string;
10
+ name: string;
11
+ code: string;
12
+ terms?: ITerm[];
13
+ }
14
+ export interface IFramework {
15
+ identifier: string;
16
+ name: string;
17
+ code: string;
18
+ categories?: ICategory[];
19
+ }
20
+ export interface IFrameworkDetails {
21
+ organisationFramework?: IFramework;
22
+ targetFrameworks?: IFramework[];
23
+ }
@@ -0,0 +1,3 @@
1
+ export * from './editor';
2
+ export * from './content';
3
+ export * from './framework';
@@ -0,0 +1,18 @@
1
+ interface TelemetryContext {
2
+ channel?: string;
3
+ pdata?: {
4
+ id: string;
5
+ ver: string;
6
+ pid?: string;
7
+ };
8
+ env?: string;
9
+ sid?: string;
10
+ uid?: string;
11
+ did?: string;
12
+ contentId?: string;
13
+ }
14
+ export declare function initTelemetry(ctx: TelemetryContext): void;
15
+ export declare function trackInteract(id: string, type: string, subtype?: string, extra?: Record<string, unknown>): void;
16
+ export declare function trackImpression(type: string, subtype: string, pageid: string): void;
17
+ export declare function trackError(error: Error, id: string): void;
18
+ export {};
@@ -0,0 +1 @@
1
+ export declare function registerCollectionEditor(tagName?: string): void;
package/package.json ADDED
@@ -0,0 +1,62 @@
1
+ {
2
+ "name": "@project-sunbird/collection-editor-react",
3
+ "version": "0.1.0",
4
+ "private": false,
5
+ "type": "module",
6
+ "main": "dist/index.cjs",
7
+ "module": "dist/index.js",
8
+ "types": "dist/index.d.ts",
9
+ "exports": {
10
+ ".": {
11
+ "import": "./dist/index.js",
12
+ "require": "./dist/index.cjs",
13
+ "types": "./dist/index.d.ts"
14
+ },
15
+ "./dist/style.css": "./dist/style.css"
16
+ },
17
+ "files": [
18
+ "dist"
19
+ ],
20
+ "sideEffects": [
21
+ "*.css"
22
+ ],
23
+ "publishConfig": {
24
+ "access": "public"
25
+ },
26
+ "scripts": {
27
+ "dev": "vite",
28
+ "build": "tsc -b && vite build",
29
+ "preview": "vite preview",
30
+ "test": "vitest run"
31
+ },
32
+ "dependencies": {
33
+ "@dnd-kit/core": "^6.1.0",
34
+ "@dnd-kit/sortable": "^8.0.0",
35
+ "@dnd-kit/utilities": "^3.2.2",
36
+ "@tanstack/react-query": "^5.51.0",
37
+ "axios": "^1.7.2",
38
+ "lucide-react": "^0.400.0",
39
+ "react-arborist": "^3.4.0",
40
+ "react-hook-form": "^7.52.0",
41
+ "react-hot-toast": "^2.4.1",
42
+ "react-to-webcomponent": "^1.1.0",
43
+ "zod": "^3.23.8",
44
+ "zustand": "^4.5.4"
45
+ },
46
+ "devDependencies": {
47
+ "@testing-library/jest-dom": "^6.4.6",
48
+ "@testing-library/react": "^16.0.0",
49
+ "@types/react": "^18.3.3",
50
+ "@types/react-dom": "^18.3.0",
51
+ "@vitejs/plugin-react": "^4.3.1",
52
+ "sass": "^1.77.6",
53
+ "typescript": "^5.5.3",
54
+ "vite": "^5.3.4",
55
+ "vite-plugin-dts": "^3.9.1",
56
+ "vitest": "^2.0.3"
57
+ },
58
+ "peerDependencies": {
59
+ "react": "^18.0.0",
60
+ "react-dom": "^18.0.0"
61
+ }
62
+ }