@antscorp/antsomi-ui 2.0.103 → 2.0.105
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/es/__mocks__/sql-query.json +56 -0
- package/es/assets/css/main.scss +2 -2
- package/es/components/atoms/App/App.d.ts +7 -0
- package/es/components/atoms/App/App.js +5 -0
- package/es/components/atoms/App/index.d.ts +1 -0
- package/es/components/atoms/App/index.js +1 -0
- package/es/components/atoms/Input/Input.d.ts +11 -17
- package/es/components/atoms/Input/Input.js +11 -12
- package/es/components/atoms/List/List.d.ts +1 -0
- package/es/components/atoms/List/List.js +1 -0
- package/es/components/atoms/List/index.d.ts +1 -0
- package/es/components/atoms/List/index.js +1 -0
- package/es/components/atoms/Scrollbars/Scrollbars.d.ts +3 -4
- package/es/components/atoms/Scrollbars/Scrollbars.js +2 -1
- package/es/components/atoms/SlideBar/SlideBar.js +1 -1
- package/es/components/atoms/Tag/Tag.js +1 -1
- package/es/components/atoms/index.d.ts +3 -0
- package/es/components/atoms/index.js +2 -0
- package/es/components/icons/FeedbackOutlinedIcon.d.ts +3 -0
- package/es/components/icons/FeedbackOutlinedIcon.js +7 -0
- package/es/components/icons/LazyIcon/LazyIcon.d.ts +5 -0
- package/es/components/icons/LazyIcon/LazyIcon.js +5 -0
- package/es/components/icons/NavigateBeforeIcon.d.ts +3 -0
- package/es/components/icons/NavigateBeforeIcon.js +7 -0
- package/es/components/icons/NavigateNextIcon.d.ts +3 -0
- package/es/components/icons/NavigateNextIcon.js +7 -0
- package/es/components/icons/PenSparkIcon.d.ts +3 -0
- package/es/components/icons/PenSparkIcon.js +7 -0
- package/es/components/icons/StatusSuccessIcon.d.ts +3 -0
- package/es/components/icons/StatusSuccessIcon.js +7 -0
- package/es/components/icons/SummarizeIconIcon.d.ts +3 -0
- package/es/components/icons/SummarizeIconIcon.js +7 -0
- package/es/components/icons/index.d.ts +5 -0
- package/es/components/icons/index.js +5 -0
- package/es/components/index.scss +1 -0
- package/es/components/molecules/AddDynamicContent/AddDynamicContent.d.ts +1 -2
- package/es/components/molecules/CalendarSelection/constants.d.ts +1 -1
- package/es/components/molecules/CalendarSelection/constants.js +1 -1
- package/es/components/molecules/CaptureScreen/CaptureScreen.d.ts +8 -2
- package/es/components/molecules/CaptureScreen/CaptureScreen.js +2 -2
- package/es/components/molecules/DrawerDetail/DrawerDetail.js +19 -7
- package/es/components/molecules/DrawerDetail/types.d.ts +5 -0
- package/es/components/molecules/EditingListV2/components/Loadable.d.ts +1 -1
- package/es/components/molecules/EditorScript/EditorScript.d.ts +1 -2
- package/es/components/molecules/EditorScript/EditorScript.js +5 -1
- package/es/components/molecules/FontSizeInput/index.scss +15 -0
- package/es/components/molecules/Select/styled.js +1 -1
- package/es/components/molecules/SelectAccount/type.d.ts +1 -1
- package/es/components/molecules/TagifyInput/utils.style.js +1 -0
- package/es/components/molecules/TemplateSaveAs/hooks/useTemplateSave.d.ts +1 -1
- package/es/components/organism/AccountProfile/components/AccountSetting/AccountSetting.js +2 -1
- package/es/components/organism/AccountProfile/components/AccountSetting/components/LanguageSelector/styles.d.ts +1 -1
- package/es/components/organism/AccountProfile/components/AccountSetting/components/LanguageSelector/styles.js +1 -1
- package/es/components/organism/ActivityTimeline/__mocks__/event_tracking.json +1290 -0
- package/es/components/organism/ActivityTimeline/__mocks__/timeline.json +3059 -0
- package/es/components/organism/DataTable/hooks/useDataTableListing/useDataTableListing.js +5 -4
- package/es/components/organism/Login/components/LoginWithEmail/styled.js +1 -1
- package/es/components/organism/Login/components/SetupGGAuthenticator/styled.js +1 -1
- package/es/components/organism/Login/components/SignIn/styled.js +1 -1
- package/es/components/organism/Login/components/WidgetLayout/styled.js +1 -1
- package/es/components/organism/Login/styled.d.ts +3 -3
- package/es/components/organism/Login/styled.js +11 -11
- package/es/components/organism/ModifyColumnModal/styled.d.ts +2 -2
- package/es/components/organism/PreviewTemplateModal/components/ThumbnailSlider/styled.d.ts +1 -2
- package/es/components/organism/PreviewTemplateModal/components/ThumbnailSlider/styled.js +3 -1
- package/es/components/organism/SQLGeneration/SQLGeneration.d.ts +3 -0
- package/es/components/organism/SQLGeneration/SQLGeneration.js +26 -0
- package/es/components/organism/SQLGeneration/components/CheckboxShowDiff.d.ts +2 -0
- package/es/components/organism/SQLGeneration/components/CheckboxShowDiff.js +16 -0
- package/es/components/organism/SQLGeneration/components/EditTableSourcesDrawer.d.ts +2 -0
- package/es/components/organism/SQLGeneration/components/EditTableSourcesDrawer.js +56 -0
- package/es/components/organism/SQLGeneration/components/ErrorDisplay.d.ts +21 -0
- package/es/components/organism/SQLGeneration/components/ErrorDisplay.js +69 -0
- package/es/components/organism/SQLGeneration/components/SQLGenerationActions.d.ts +4 -0
- package/es/components/organism/SQLGeneration/components/SQLGenerationActions.js +23 -0
- package/es/components/organism/SQLGeneration/components/SQLGenerationCodeBlock.d.ts +2 -0
- package/es/components/organism/SQLGeneration/components/SQLGenerationCodeBlock.js +22 -0
- package/es/components/organism/SQLGeneration/components/SQLGenerationEditPrompt.d.ts +2 -0
- package/es/components/organism/SQLGeneration/components/SQLGenerationEditPrompt.js +66 -0
- package/es/components/organism/SQLGeneration/components/SQLGenerationHeader.d.ts +2 -0
- package/es/components/organism/SQLGeneration/components/SQLGenerationHeader.js +10 -0
- package/es/components/organism/SQLGeneration/components/SQLGenerationModal.d.ts +2 -0
- package/es/components/organism/SQLGeneration/components/SQLGenerationModal.js +35 -0
- package/es/components/organism/SQLGeneration/components/SQLGenerationPagination.d.ts +4 -0
- package/es/components/organism/SQLGeneration/components/SQLGenerationPagination.js +13 -0
- package/es/components/organism/SQLGeneration/components/SQLGenerationPrompt.d.ts +2 -0
- package/es/components/organism/SQLGeneration/components/SQLGenerationPrompt.js +31 -0
- package/es/components/organism/SQLGeneration/components/SQLGenerationPromptDisplay.d.ts +2 -0
- package/es/components/organism/SQLGeneration/components/SQLGenerationPromptDisplay.js +15 -0
- package/es/components/organism/SQLGeneration/components/SQLGenerationQuerySummary.d.ts +2 -0
- package/es/components/organism/SQLGeneration/components/SQLGenerationQuerySummary.js +17 -0
- package/es/components/organism/SQLGeneration/components/SQLGenerationRefine.d.ts +1 -0
- package/es/components/organism/SQLGeneration/components/SQLGenerationRefine.js +55 -0
- package/es/components/organism/SQLGeneration/components/SQLGenerationResult.d.ts +5 -0
- package/es/components/organism/SQLGeneration/components/SQLGenerationResult.js +29 -0
- package/es/components/organism/SQLGeneration/components/index.d.ts +9 -0
- package/es/components/organism/SQLGeneration/components/index.js +9 -0
- package/es/components/organism/SQLGeneration/components/styled.d.ts +52 -0
- package/es/components/organism/SQLGeneration/components/styled.js +382 -0
- package/es/components/organism/SQLGeneration/constants.d.ts +48 -0
- package/es/components/organism/SQLGeneration/constants.js +48 -0
- package/es/components/organism/SQLGeneration/hooks/index.d.ts +1 -0
- package/es/components/organism/SQLGeneration/hooks/index.js +1 -0
- package/es/components/organism/SQLGeneration/hooks/useKeyboardNavigation.d.ts +14 -0
- package/es/components/organism/SQLGeneration/hooks/useKeyboardNavigation.js +123 -0
- package/es/components/organism/SQLGeneration/index.d.ts +10 -0
- package/es/components/organism/SQLGeneration/index.js +6 -0
- package/es/components/organism/SQLGeneration/index.scss +1 -0
- package/es/components/organism/SQLGeneration/integrations/AceEditor/index.d.ts +1 -0
- package/es/components/organism/SQLGeneration/integrations/AceEditor/index.js +1 -0
- package/es/components/organism/SQLGeneration/integrations/AceEditor/index.scss +4 -0
- package/es/components/organism/SQLGeneration/integrations/AceEditor/useAceEditor.d.ts +9 -0
- package/es/components/organism/SQLGeneration/integrations/AceEditor/useAceEditor.js +24 -0
- package/es/components/organism/SQLGeneration/integrations/AceEditor/useEnhancePlaceholder.d.ts +10 -0
- package/es/components/organism/SQLGeneration/integrations/AceEditor/useEnhancePlaceholder.js +172 -0
- package/es/components/organism/SQLGeneration/integrations/AceEditor/useInsertQuery.d.ts +8 -0
- package/es/components/organism/SQLGeneration/integrations/AceEditor/useInsertQuery.js +21 -0
- package/es/components/organism/SQLGeneration/integrations/AntsomiAI/index.d.ts +1 -0
- package/es/components/organism/SQLGeneration/integrations/AntsomiAI/index.js +1 -0
- package/es/components/organism/SQLGeneration/integrations/AntsomiAI/useAntsomiAI.d.ts +1 -0
- package/es/components/organism/SQLGeneration/integrations/AntsomiAI/useAntsomiAI.js +35 -0
- package/es/components/organism/SQLGeneration/integrations/AntsomiSqlWS/index.d.ts +1 -0
- package/es/components/organism/SQLGeneration/integrations/AntsomiSqlWS/index.js +1 -0
- package/es/components/organism/SQLGeneration/integrations/AntsomiSqlWS/useAntsomiSqlWS.d.ts +7 -0
- package/es/components/organism/SQLGeneration/integrations/AntsomiSqlWS/useAntsomiSqlWS.js +10 -0
- package/es/components/organism/SQLGeneration/selectors.d.ts +857 -0
- package/es/components/organism/SQLGeneration/selectors.js +61 -0
- package/es/components/organism/SQLGeneration/store/index.d.ts +2 -0
- package/es/components/organism/SQLGeneration/store/index.js +1 -0
- package/es/components/organism/SQLGeneration/store/provider.d.ts +7 -0
- package/es/components/organism/SQLGeneration/store/provider.js +40 -0
- package/es/components/organism/SQLGeneration/store/store.d.ts +383 -0
- package/es/components/organism/SQLGeneration/store/store.js +309 -0
- package/es/components/organism/SQLGeneration/store/types.d.ts +97 -0
- package/es/components/organism/SQLGeneration/store/types.js +1 -0
- package/es/components/organism/SQLGeneration/types.d.ts +29 -0
- package/es/components/organism/SQLGeneration/types.js +1 -0
- package/es/components/organism/index.d.ts +1 -0
- package/es/components/organism/index.js +1 -0
- package/es/components/organism/index.scss +1 -0
- package/es/components/template/TemplateListing/hooks/useTemplateListing.d.ts +3 -4
- package/es/hooks/index.d.ts +1 -0
- package/es/hooks/index.js +1 -0
- package/es/hooks/useFocusManagement.d.ts +14 -0
- package/es/hooks/useFocusManagement.js +124 -0
- package/es/locales/ja/google-sheet.json +2 -2
- package/es/providers/ConfigProvider/ConfigProvider.js +4 -1
- package/es/providers/ConfigProvider/GlobalStyle.js +153 -46
- package/es/queries/AI/index.d.ts +23 -0
- package/es/queries/AI/index.js +4 -0
- package/es/queries/AI/useSqlGeneration.d.ts +25 -0
- package/es/queries/AI/useSqlGeneration.js +13 -0
- package/es/queries/TemplateListing/index.d.ts +2 -2
- package/es/queries/index.d.ts +1 -0
- package/es/queries/index.js +1 -0
- package/es/services/AI/index.d.ts +15 -0
- package/es/services/AI/index.js +15 -0
- package/es/types/auth.d.ts +25 -0
- package/es/types/auth.js +1 -0
- package/es/types/index.d.ts +1 -0
- package/es/types/index.js +1 -0
- package/es/utils/common.d.ts +1 -0
- package/es/utils/common.js +16 -1
- package/es/utils/web.d.ts +16 -3
- package/es/utils/web.js +36 -3
- package/es/utils/zustand.d.ts +10 -0
- package/es/utils/zustand.js +8 -0
- package/package.json +16 -11
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
{
|
|
2
|
+
"queries": [
|
|
3
|
+
{
|
|
4
|
+
"name": "Tìm nhân viên có mức lương cao thứ hai của mỗi phòng ban",
|
|
5
|
+
"description": "Sử dụng Window Function DENSE_RANK() để xếp hạng nhân viên theo lương trong mỗi phòng ban và lấy ra những người có thứ hạng là 2.",
|
|
6
|
+
"query": "-- Sử dụng Window Function DENSE_RANK() để xếp hạng nhân viên theo lương trong mỗi phòng ban.\n-- DENSE_RANK() sẽ gán cùng một thứ hạng cho các nhân viên có cùng mức lương.\n-- Sau đó, chúng ta chỉ cần chọn những nhân viên có thứ hạng là 2.\nSELECT \n e.name,\n d.name AS department_name,\n e.salary\nFROM (\n SELECT\n e.name,\n e.salary,\n e.department_id,\n d.name AS department_name,\n -- Xếp hạng nhân viên theo mức lương giảm dần trong từng phòng ban.\n -- PARTITION BY chia dữ liệu thành các nhóm theo department_id.\n -- ORDER BY sắp xếp các dòng trong mỗi nhóm theo salary.\n DENSE_RANK() OVER (PARTITION BY e.department_id ORDER BY e.salary DESC) as salary_rank\n FROM \n employees e\n JOIN \n departments d ON e.department_id = d.id\n) as ranked_employees\nWHERE \n ranked_employees.salary_rank = 2;"
|
|
7
|
+
},
|
|
8
|
+
{
|
|
9
|
+
"name": "Tính tổng doanh số tích lũy của mỗi nhân viên theo thời gian",
|
|
10
|
+
"description": "Sử dụng Window Function SUM() với ORDER BY để tính tổng doanh số tích lũy (Running Total) cho từng nhân viên theo ngày bán hàng.",
|
|
11
|
+
"query": "-- Sử dụng Window Function SUM() với ORDER BY để tính tổng doanh số tích lũy (Running Total).\n-- Điều này cho phép chúng ta tính tổng của một cột trong một cửa sổ dữ liệu được sắp xếp.\nSELECT\n s.employee_id,\n s.sale_date,\n s.amount,\n -- Tính tổng doanh số tích lũy cho mỗi nhân viên.\n -- PARTITION BY employee_id đảm bảo tổng chỉ tính trong phạm vi của từng nhân viên.\n -- ORDER BY sale_date sắp xếp các giao dịch theo thời gian.\n -- Cửa sổ mặc định sẽ là từ đầu partition đến dòng hiện tại.\n SUM(s.amount) OVER (PARTITION BY s.employee_id ORDER BY s.sale_date) as cumulative_sales\nFROM\n sales s\nORDER BY \n s.employee_id, \n s.sale_date;"
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
"name": "Tìm phòng ban có doanh số cao hơn mức trung bình của tất cả các phòng ban",
|
|
15
|
+
"description": "Kết hợp Common Table Expression (CTE) để tính tổng doanh số của mỗi phòng ban, sau đó dùng subquery để so sánh với mức trung bình chung.",
|
|
16
|
+
"query": "-- Sử dụng Common Table Expression (CTE) để tính tổng doanh số của mỗi phòng ban trước.\n-- Điều này giúp cho truy vấn chính trở nên gọn gàng và dễ hiểu hơn.\nWITH DepartmentSales AS (\n -- Bước 1: Tính tổng doanh số của mỗi phòng ban.\n SELECT \n d.id AS department_id,\n d.name AS department_name,\n SUM(s.amount) as total_department_sales\n FROM \n departments d\n JOIN \n employees e ON d.id = e.department_id\n JOIN \n sales s ON e.id = s.employee_id\n GROUP BY \n d.id, d.name\n)\n-- Bước 2: Truy vấn chính. Lấy những phòng ban có tổng doanh số lớn hơn mức trung bình của tất cả các phòng ban.\nSELECT\n department_name,\n total_department_sales\nFROM \n DepartmentSales\nWHERE\n total_department_sales > (\n -- Subquery: Tính mức trung bình của tổng doanh số của tất cả các phòng ban.\n -- Chúng ta không thể sử dụng trực tiếp AVG() trên total_department_sales ở đây.\n SELECT \n AVG(total_department_sales)\n FROM \n DepartmentSales\n );"
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
"name": "Tìm nhân viên không có giao dịch bán hàng trong 30 ngày gần nhất",
|
|
20
|
+
"description": "Sử dụng LEFT JOIN từ bảng nhân viên đến bảng doanh số và dùng HAVING cùng hàm DATEDIFF() để lọc ra những nhân viên không có giao dịch gần đây.",
|
|
21
|
+
"query": "-- Tìm nhân viên không có giao dịch nào trong 30 ngày gần nhất.\n-- Bước 1: LEFT JOIN từ bảng employees đến bảng sales.\n-- Điều này đảm bảo tất cả nhân viên đều được hiển thị, ngay cả khi họ không có giao dịch nào.\nSELECT \n e.name,\n e.department_id,\n e.salary\nFROM \n employees e\nLEFT JOIN \n sales s ON e.id = s.employee_id\nGROUP BY \n e.id, e.name, e.department_id, e.salary\n-- Bước 2: Sử dụng HAVING để lọc các nhóm (nhân viên)\n-- có giao dịch gần nhất (MAX(s.sale_date)) đã lâu hơn 30 ngày so với ngày hiện tại (CURDATE()).\n-- COALESCE() được sử dụng để xử lý trường hợp nhân viên chưa bao giờ có giao dịch nào,\n-- khi đó MAX(s.sale_date) sẽ là NULL. COALESCE sẽ thay thế NULL bằng một ngày rất xa trong quá khứ\n-- để đảm bảo điều kiện DATEDIFF() luôn đúng.\nHAVING \n COALESCE(MAX(s.sale_date), '1900-01-01') < CURDATE() - INTERVAL 30 DAY;"
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
"name": "Phân loại nhân viên dựa trên mức lương so với trung bình của phòng ban",
|
|
25
|
+
"description": "Sử dụng Window Function AVG() OVER() để tính mức lương trung bình của từng phòng ban, sau đó dùng CASE statement để phân loại từng nhân viên.",
|
|
26
|
+
"query": "-- Phân loại nhân viên dựa trên mức lương của họ so với mức lương trung bình của phòng ban.\nSELECT \n e.name,\n d.name AS department_name,\n e.salary,\n -- Sử dụng CASE statement để tạo một phân loại mới.\n -- Mức lương của từng nhân viên được so sánh với mức lương trung bình của phòng ban.\n CASE\n -- AVG(e.salary) OVER (PARTITION BY e.department_id) tính mức lương trung bình của mỗi phòng ban.\n -- Đây là một Window Function, giúp chúng ta tính toán giá trị tổng hợp (AVG) mà không làm mất các dòng dữ liệu chi tiết.\n WHEN e.salary > AVG(e.salary) OVER (PARTITION BY e.department_id) THEN 'Above Average'\n WHEN e.salary < AVG(e.salary) OVER (PARTITION BY e.department_id) THEN 'Below Average'\n ELSE 'Average'\n END AS salary_category\nFROM \n employees e\nJOIN \n departments d ON e.department_id = d.id;"
|
|
27
|
+
}
|
|
28
|
+
],
|
|
29
|
+
"queries_optimization": [
|
|
30
|
+
{
|
|
31
|
+
"name": "Query 1: Top 3 lương cao nhất mỗi phòng ban (Correlated Subquery)",
|
|
32
|
+
"description": "Đây là cách tiếp cận cổ điển nhưng kém hiệu quả nhất, sử dụng một subquery phụ thuộc vào truy vấn chính. Subquery này sẽ chạy lại cho mỗi dòng của bảng chính, gây tốn tài nguyên trên dữ liệu lớn.",
|
|
33
|
+
"query": "-- Sử dụng Correlated Subquery để tìm 3 nhân viên có lương cao nhất.\n-- Subquery bên trong sẽ đếm số lượng nhân viên trong cùng phòng ban\n-- có mức lương cao hơn hoặc bằng nhân viên hiện tại.\n-- Nếu số lượng đó nhỏ hơn 3, nhân viên hiện tại sẽ được chọn.\nSELECT\n\te1.name,\n\te1.salary,\n\td.name AS department_name\nFROM\n\temployees e1\nJOIN\n\tdepartments d ON e1.department_id = d.id\nWHERE\n\t3 > (SELECT\n\t\tCOUNT(DISTINCT e2.salary)\n\tFROM\n\t\temployees e2\n\tWHERE\n\t\te2.department_id = e1.department_id\n\t\tAND e2.salary > e1.salary\n\t);"
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
"name": "Query 2: Top 3 lương cao nhất mỗi phòng ban (Self-JOIN)",
|
|
37
|
+
"description": "Một cách tiếp cận cũ khác sử dụng Self-JOIN. Đây là một cải tiến nhỏ so với subquery nhưng vẫn phức tạp và khó đọc. Hiệu suất cũng không cao trên dữ liệu lớn.",
|
|
38
|
+
"query": "-- Sử dụng kỹ thuật Self-JOIN để so sánh mỗi nhân viên với những người khác\n-- trong cùng phòng ban có mức lương cao hơn.\n-- Sau đó, GROUP BY và COUNT() để lọc ra những nhân viên nằm trong top 3.\nSELECT\n\te1.name,\n\te1.salary,\n\td.name AS department_name\nFROM\n\temployees e1\nJOIN\n\tdepartments d ON e1.department_id = d.id\nLEFT JOIN\n\temployees e2 ON e1.department_id = e2.department_id AND e1.salary < e2.salary\nGROUP BY\n\te1.id, e1.name, e1.salary, d.name\nHAVING\n\tCOUNT(DISTINCT e2.salary) < 3\nORDER BY\n\td.name, e1.salary DESC;"
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
"name": "Query 3: Top 3 lương cao nhất mỗi phòng ban (Window Function: RANK())",
|
|
42
|
+
"description": "Đây là cách hiện đại và được khuyến nghị nhất. Sử dụng Window Function giúp truy vấn hiệu quả và dễ đọc hơn rất nhiều. RANK() sẽ xếp hạng các nhân viên và bỏ qua các số thứ tự nếu có các giá trị bằng nhau.",
|
|
43
|
+
"query": "-- Cách hiện đại và hiệu quả nhất dùng Window Function RANK() trong một CTE (Common Table Expression).\n-- CTE giúp truy vấn dễ đọc hơn bằng cách tạo một tập kết quả tạm thời có tên.\nWITH RankedEmployees AS (\n\tSELECT\n\t\te.name,\n\t\te.salary,\n\t\td.name AS department_name,\n\t\t-- RANK() xếp hạng nhân viên theo lương trong từng phòng ban.\n\t\t-- PARTITION BY chia dữ liệu thành các nhóm theo department_id.\n\t\t-- ORDER BY sắp xếp các dòng trong mỗi nhóm theo salary DESC.\n\t\tRANK() OVER (PARTITION BY e.department_id ORDER BY e.salary DESC) as rnk\n\tFROM\n\t\temployees e\n\tJOIN\n\t\tdepartments d ON e.department_id = d.id\n)\n-- Truy vấn chính sẽ chọn ra các nhân viên có thứ hạng <= 3 từ CTE.\nSELECT\n\tname,\n\tsalary,\n\tdepartment_name\nFROM\n\tRankedEmployees\nWHERE\n\trnk <= 3\nORDER BY\n\tdepartment_name, salary DESC;"
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
"name": "Query 4: Top 3 lương cao nhất mỗi phòng ban (Window Function: DENSE_RANK())",
|
|
47
|
+
"description": "Một biến thể của Query 3, sử dụng DENSE_RANK(). Chức năng này tương tự RANK() nhưng sẽ không bỏ qua các số thứ tự khi có các giá trị bằng nhau, phù hợp cho nhiều trường hợp phân tích hơn.",
|
|
48
|
+
"query": "-- Biến thể của cách trên, dùng DENSE_RANK() thay vì RANK().\n-- DENSE_RANK() sẽ không bỏ qua các số thứ tự khi có các giá trị bằng nhau.\nWITH RankedEmployees AS (\n\tSELECT\n\t\te.name,\n\t\te.salary,\n\t\td.name AS department_name,\n\t\t-- DENSE_RANK() xếp hạng nhân viên, không bỏ qua các số thứ tự.\n\t\tDENSE_RANK() OVER (PARTITION BY e.department_id ORDER BY e.salary DESC) as rnk\n\tFROM\n\t\temployees e\n\tJOIN\n\t\tdepartments d ON e.department_id = d.id\n)\n-- Truy vấn chính sẽ chọn ra các nhân viên có thứ hạng <= 3.\nSELECT\n\tname,\n\tsalary,\n\tdepartment_name\nFROM\n\tRankedEmployees\nWHERE\n\trnk <= 3\nORDER BY\n\tdepartment_name, salary DESC;"
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
"name": "Query 5: Top 3 lương cao nhất mỗi phòng ban (Với JSON output)",
|
|
52
|
+
"description": "Đây là một cách tiếp cận nâng cao hơn, kết hợp Window Function và các hàm JSON để nhóm dữ liệu thành một định dạng JSON duy nhất. Rất hữu ích cho việc tạo API hoặc xử lý dữ liệu phức tạp trên tầng ứng dụng.",
|
|
53
|
+
"query": "-- Kết hợp Window Function với hàm JSON để nhóm dữ liệu thành một định dạng JSON duy nhất.\n-- Rất hữu ích khi bạn muốn trả về dữ liệu có cấu trúc từ database mà không cần xử lý thêm ở tầng ứng dụng.\nWITH RankedEmployees AS (\n\tSELECT\n\t\te.name,\n\t\te.salary,\n\t\td.name AS department_name,\n\t\tROW_NUMBER() OVER (PARTITION BY e.department_id ORDER BY e.salary DESC) as rnk\n\tFROM\n\t\temployees e\n\tJOIN\n\t\tdepartments d ON e.department_id = d.id\n)\nSELECT\n\tdepartment_name,\n\t-- Sử dụng JSON_ARRAYAGG để tổng hợp các nhân viên vào một mảng JSON.\n\tJSON_ARRAYAGG(\n\t\tJSON_OBJECT('name', name, 'salary', salary)\n\t) AS top_employees\nFROM\n\tRankedEmployees\nWHERE\n\trnk <= 3\nGROUP BY\n\tdepartment_name\nORDER BY\n\tdepartment_name;"
|
|
54
|
+
}
|
|
55
|
+
]
|
|
56
|
+
}
|
package/es/assets/css/main.scss
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './App';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './App';
|
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
/// <reference types="hoist-non-react-statics" />
|
|
2
1
|
import React, { ReactNode } from 'react';
|
|
3
|
-
import { InputProps as AntdInputProps,
|
|
2
|
+
import { InputProps as AntdInputProps, InputRef } from 'antd';
|
|
4
3
|
export interface InputProps extends AntdInputProps {
|
|
5
4
|
noborder?: 'true' | 'false' | boolean;
|
|
6
5
|
debounce?: number;
|
|
@@ -16,20 +15,15 @@ export interface InputProps extends AntdInputProps {
|
|
|
16
15
|
disableUndo?: boolean;
|
|
17
16
|
withWrapper?: boolean;
|
|
18
17
|
}
|
|
19
|
-
export declare const Input:
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
TextArea: React.ForwardRefExoticComponent<import("antd/es/input").TextAreaProps & React.RefAttributes<import("antd/es/input/TextArea").TextAreaRef>>;
|
|
28
|
-
Password: React.ForwardRefExoticComponent<
|
|
29
|
-
}, {}> & {
|
|
30
|
-
DefaultInput: typeof AntdInput;
|
|
31
|
-
CustomSearch: typeof SearchInput;
|
|
18
|
+
export declare const Input: React.ForwardRefExoticComponent<InputProps & React.RefAttributes<InputRef>> & {
|
|
19
|
+
readonly DefaultInput: React.ForwardRefExoticComponent<AntdInputProps & React.RefAttributes<InputRef>> & {
|
|
20
|
+
Group: React.FC<import("antd/es/input").GroupProps>;
|
|
21
|
+
Search: React.ForwardRefExoticComponent<import("antd/es/input").SearchProps & React.RefAttributes<InputRef>>;
|
|
22
|
+
TextArea: React.ForwardRefExoticComponent<import("antd/es/input").TextAreaProps & React.RefAttributes<import("antd/es/input/TextArea").TextAreaRef>>;
|
|
23
|
+
Password: React.ForwardRefExoticComponent<import("antd/es/input").PasswordProps & React.RefAttributes<InputRef>>;
|
|
24
|
+
};
|
|
25
|
+
readonly CustomSearch: React.ForwardRefExoticComponent<InputProps & React.RefAttributes<InputRef>>;
|
|
26
|
+
readonly TextArea: React.ForwardRefExoticComponent<import("antd/es/input").TextAreaProps & React.RefAttributes<import("antd/es/input/TextArea").TextAreaRef>>;
|
|
27
|
+
readonly Password: React.ForwardRefExoticComponent<InputProps & React.RefAttributes<InputRef>>;
|
|
32
28
|
};
|
|
33
|
-
declare const SearchInput: React.ForwardRefExoticComponent<InputProps & React.RefAttributes<InputRef>>;
|
|
34
29
|
export declare const TextArea: React.ForwardRefExoticComponent<import("antd/es/input").TextAreaProps & React.RefAttributes<import("antd/es/input/TextArea").TextAreaRef>>;
|
|
35
|
-
export {};
|
|
@@ -17,7 +17,7 @@ import { PreviewVisibilityEyeIcon, VisibilityOffEyeIcon } from '../../icons';
|
|
|
17
17
|
const PATH = '@antscorp/antsomi-ui/es/components/atoms/Input/Input.tsx';
|
|
18
18
|
const OriginInput = React.forwardRef((props, ref) => {
|
|
19
19
|
// Props
|
|
20
|
-
const {
|
|
20
|
+
const { debounce = 400, isHideErrMessage = false, withWrapper = true, errorArchive, required, labelColor, isReverseMask, focused, label, onAfterChange, onChange, errorMsg, ...restProps } = props;
|
|
21
21
|
// State
|
|
22
22
|
const [value, setValue] = useState(props.value);
|
|
23
23
|
const [isFocused, setFocused] = useState(false);
|
|
@@ -74,21 +74,20 @@ const OriginInput = React.forwardRef((props, ref) => {
|
|
|
74
74
|
setFocused(true);
|
|
75
75
|
}
|
|
76
76
|
restProps.onBlur && restProps.onBlur(e);
|
|
77
|
-
}, onChange: onChangeInput, ...getPreventKeyboardAction(listDisableActions
|
|
77
|
+
}, onChange: onChangeInput, ...getPreventKeyboardAction(listDisableActions, {
|
|
78
|
+
onKeydown: restProps.onKeyDown,
|
|
79
|
+
onKeyup: restProps.onKeyUp,
|
|
80
|
+
}) }), (restProps.status === 'error' || errorArchive || requiredMsg) && !isHideErrMessage ? (_jsx(Text, { color: "#ff4d4f", style: { marginLeft: 8, marginTop: 5 }, children: errorMsg || errorArchive || requiredMsg })) : null] }));
|
|
78
81
|
if (!withWrapper)
|
|
79
82
|
return content;
|
|
80
83
|
return _jsx("div", { className: "input__wrapper", children: content });
|
|
81
84
|
});
|
|
82
|
-
OriginInput.defaultProps = {
|
|
83
|
-
debounce: 400,
|
|
84
|
-
isHideErrMessage: false,
|
|
85
|
-
withWrapper: true,
|
|
86
|
-
};
|
|
87
|
-
export const Input = OriginInput;
|
|
88
85
|
const SearchInput = React.forwardRef((props, ref) => (_jsx(OriginInput, { bordered: false, autoFocus: true, suffix: _jsx(Icon, { type: "icon-ants-search-2", size: 24, color: globalToken?.bw8 }), ...props, ref: ref, className: `${props.className} antsomi-search-input` })));
|
|
89
86
|
const PasswordInput = React.forwardRef((props, ref) => (_jsx(AntdInput.Password, { iconRender: visible => visible ? (_jsx(StyledIconWrapper, { type: "text", children: _jsx(PreviewVisibilityEyeIcon, {}) })) : (_jsx(StyledIconWrapper, { type: "text", children: _jsx(VisibilityOffEyeIcon, {}) })), ...props, ref: ref })));
|
|
90
|
-
Input
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
87
|
+
export const Input = Object.assign(OriginInput, {
|
|
88
|
+
DefaultInput: AntdInput,
|
|
89
|
+
CustomSearch: SearchInput,
|
|
90
|
+
TextArea: StyledInput.TextArea,
|
|
91
|
+
Password: PasswordInput,
|
|
92
|
+
});
|
|
94
93
|
export const { TextArea } = StyledInput;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { List, type ListProps } from 'antd';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { List } from 'antd';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { List, type ListProps } from './List';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { List } from './List';
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { ScrollbarProps as CustomScrollbarProps } from 'react-custom-scrollbars';
|
|
2
|
-
import
|
|
3
|
-
export
|
|
4
|
-
|
|
5
|
-
export declare const Scrollbars: React.FC<ScrollbarsProps>;
|
|
2
|
+
import { FC } from 'react';
|
|
3
|
+
export type ScrollbarsProps = CustomScrollbarProps & {};
|
|
4
|
+
export declare const Scrollbars: FC<ScrollbarsProps>;
|
|
@@ -40,7 +40,8 @@ export const Scrollbars = forwardRef((props, refProp) => {
|
|
|
40
40
|
ref.current.thumbVertical.style.height = `${thumbHeight}px`;
|
|
41
41
|
ref.current.thumbVertical.style.transform = `translateY(${thumbVerticalPosition}px)`;
|
|
42
42
|
ref.current.thumbHorizontal.style.width = `${thumbWidth}px`;
|
|
43
|
-
ref.current.thumbHorizontal.style.transform =
|
|
43
|
+
ref.current.thumbHorizontal.style.transform =
|
|
44
|
+
`translateX(${thumbHorizontalPosition}px)`;
|
|
44
45
|
}
|
|
45
46
|
// Handle show hide track bar
|
|
46
47
|
ref.current.trackVertical.style.visibility =
|
|
@@ -270,7 +270,7 @@ export const SlideBar = props => {
|
|
|
270
270
|
if (!disabledDelete) {
|
|
271
271
|
handleDeleteSlide(state.cacheInfoClicked);
|
|
272
272
|
}
|
|
273
|
-
}, children: t(translations.delete.title) }) })] }), arrow: false, children: _jsx(Icon, { type: "icon-ants-three-dot-vertical", color: activeId === item.value ? THEME.token?.colorPrimary : THEME.token?.colorText, size:
|
|
273
|
+
}, children: t(translations.delete.title) }) })] }), arrow: false, children: _jsx(Icon, { type: "icon-ants-three-dot-vertical", color: activeId === item.value ? THEME.token?.colorPrimary : THEME.token?.colorText, size: 20, onClick: (event) => handleClick(event, item), disabled: false }) }))] })) }, item.value));
|
|
274
274
|
});
|
|
275
275
|
const renderSliderDragDrop = () => (_jsx(WrapperOverflow, { ref: wrapperOverflowRef, id: "wrapper-overflow", children: _jsx(DragDropContext, { onDragEnd: handleDragEnd, children: _jsx(Droppable, { droppableId: "droppable", direction: "horizontal", children: (providedDroppable, _snapshotDroppable) => (_jsx(MainContent, { ref: providedDroppable.innerRef, ...providedDroppable.droppableProps, children: renderMainContent() })) }) }) }));
|
|
276
276
|
return (_jsxs(ContainerSlideBar, { children: [_jsxs(SliderWrapper, { size: size, isViewMode: isViewMode, className: classNames({ 'slider-wrapper--borderless': borderless }), children: [_jsx(Icon, { type: "icon-ants-angle-left", style: { fontSize: '16px', cursor: 'pointer', color: THEME.token?.colorPrimary }, className: "btn-arrow-left btn-action-slide-template", disabled: state.disabledPrev, onClick: (e) => {
|
|
@@ -10,7 +10,7 @@ import { CloseIcon } from '../../icons';
|
|
|
10
10
|
import { Flex } from '../Flex';
|
|
11
11
|
import { Button } from '../Button';
|
|
12
12
|
import { Typography } from '../Typography';
|
|
13
|
-
import { SearchPopover } from '../../molecules';
|
|
13
|
+
import { SearchPopover } from '../../molecules/SearchPopover';
|
|
14
14
|
// Constants
|
|
15
15
|
import { globalToken } from '@antscorp/antsomi-ui/es/constants';
|
|
16
16
|
import { translate, translations } from '@antscorp/antsomi-ui/es/locales';
|
|
@@ -33,6 +33,7 @@ export { ContentEditable } from './ContentEditable';
|
|
|
33
33
|
export { Image } from './Image';
|
|
34
34
|
export { IconField } from './IconField';
|
|
35
35
|
export { Suspense } from './Suspense';
|
|
36
|
+
export { App } from './App';
|
|
36
37
|
export { default as MobileBrandingBar } from './MobileBrandingBar';
|
|
37
38
|
export { MobileFrameV3 } from './MobileFrameV3';
|
|
38
39
|
export * from './Flex';
|
|
@@ -48,9 +49,11 @@ export * from './RateV2';
|
|
|
48
49
|
export * from './Popover';
|
|
49
50
|
export * from './Iframe';
|
|
50
51
|
export * from './Avatar';
|
|
52
|
+
export * from './List';
|
|
51
53
|
export * from './Upload';
|
|
52
54
|
export * from './NotificationStatus';
|
|
53
55
|
export type { SliderProps } from './Slider';
|
|
54
56
|
export type { PaginationProps } from './Pagination';
|
|
55
57
|
export type { InputDynamicProps } from './InputDynamic';
|
|
56
58
|
export type { ImageProps } from './Image';
|
|
59
|
+
export type { AppProps } from './App';
|
|
@@ -33,6 +33,7 @@ export { ContentEditable } from './ContentEditable';
|
|
|
33
33
|
export { Image } from './Image';
|
|
34
34
|
export { IconField } from './IconField';
|
|
35
35
|
export { Suspense } from './Suspense';
|
|
36
|
+
export { App } from './App';
|
|
36
37
|
export { default as MobileBrandingBar } from './MobileBrandingBar';
|
|
37
38
|
export { MobileFrameV3 } from './MobileFrameV3';
|
|
38
39
|
export * from './Flex';
|
|
@@ -48,5 +49,6 @@ export * from './RateV2';
|
|
|
48
49
|
export * from './Popover';
|
|
49
50
|
export * from './Iframe';
|
|
50
51
|
export * from './Avatar';
|
|
52
|
+
export * from './List';
|
|
51
53
|
export * from './Upload';
|
|
52
54
|
export * from './NotificationStatus';
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { forwardRef } from 'react';
|
|
3
|
+
import { useIcon } from './hooks/useIcon';
|
|
4
|
+
export const FeedbackOutlinedIcon = forwardRef((props, ref) => {
|
|
5
|
+
const { width, height } = useIcon(props);
|
|
6
|
+
return (_jsx("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", ...props, ref: ref, width: width, height: height, children: _jsx("path", { d: "M20 2H4C2.9 2 2.01 2.9 2.01 4L2 22L6 18H20C21.1 18 22 17.1 22 16V4C22 2.9 21.1 2 20 2ZM20 16H5.17L4.58 16.59L4 17.17V4H20V16ZM11 12H13V14H11V12ZM11 6H13V10H11V6Z", fill: "currentColor" }) }));
|
|
7
|
+
});
|
|
@@ -174,6 +174,7 @@ export declare const LazyIcon: {
|
|
|
174
174
|
ExtendValueIcon: import("react").LazyExoticComponent<import("react").ForwardRefExoticComponent<import("../types").IconProps & import("react").RefAttributes<SVGSVGElement>>>;
|
|
175
175
|
FactCheckIcon: import("react").LazyExoticComponent<import("react").ForwardRefExoticComponent<import("../types").IconProps & import("react").RefAttributes<SVGSVGElement>>>;
|
|
176
176
|
FailSlim: import("react").LazyExoticComponent<import("react").ForwardRefExoticComponent<import("../types").IconProps & import("react").RefAttributes<SVGSVGElement>>>;
|
|
177
|
+
FeedbackOutlinedIcon: import("react").LazyExoticComponent<import("react").ForwardRefExoticComponent<import("../types").IconProps & import("react").RefAttributes<SVGSVGElement>>>;
|
|
177
178
|
FeedbackRatingIcon: import("react").LazyExoticComponent<import("react").ForwardRefExoticComponent<import("../types").IconProps & import("react").RefAttributes<SVGSVGElement>>>;
|
|
178
179
|
FileDownloadIcon: import("react").LazyExoticComponent<import("react").ForwardRefExoticComponent<import("../types").IconProps & import("react").RefAttributes<SVGSVGElement>>>;
|
|
179
180
|
FileTransferIcon: import("react").LazyExoticComponent<import("react").ForwardRefExoticComponent<import("../types").IconProps & import("react").RefAttributes<SVGSVGElement>>>;
|
|
@@ -257,6 +258,8 @@ export declare const LazyIcon: {
|
|
|
257
258
|
MoreInfoIcon: import("react").LazyExoticComponent<import("react").ForwardRefExoticComponent<import("../types").IconProps & import("react").RefAttributes<SVGSVGElement>>>;
|
|
258
259
|
MoveToIcon: import("react").LazyExoticComponent<import("react").ForwardRefExoticComponent<import("../types").IconProps & import("react").RefAttributes<SVGSVGElement>>>;
|
|
259
260
|
MuteIcon: import("react").LazyExoticComponent<import("react").ForwardRefExoticComponent<import("../types").IconProps & import("react").RefAttributes<SVGSVGElement>>>;
|
|
261
|
+
NavigateBeforeIcon: import("react").LazyExoticComponent<import("react").ForwardRefExoticComponent<import("../types").IconProps & import("react").RefAttributes<SVGSVGElement>>>;
|
|
262
|
+
NavigateNextIcon: import("react").LazyExoticComponent<import("react").ForwardRefExoticComponent<import("../types").IconProps & import("react").RefAttributes<SVGSVGElement>>>;
|
|
260
263
|
NodeViewIcon: import("react").LazyExoticComponent<import("react").ForwardRefExoticComponent<import("../types").IconProps & import("react").RefAttributes<SVGSVGElement>>>;
|
|
261
264
|
NoteNewIcon: import("react").LazyExoticComponent<import("react").ForwardRefExoticComponent<import("../types").IconProps & import("react").RefAttributes<SVGSVGElement>>>;
|
|
262
265
|
NotificationIcon: import("react").LazyExoticComponent<import("react").ForwardRefExoticComponent<import("../types").IconProps & import("react").RefAttributes<SVGSVGElement>>>;
|
|
@@ -270,6 +273,7 @@ export declare const LazyIcon: {
|
|
|
270
273
|
PaymentIcon: import("react").LazyExoticComponent<import("react").ForwardRefExoticComponent<import("../types").IconProps & import("react").RefAttributes<SVGSVGElement>>>;
|
|
271
274
|
PenDrawingIcon: import("react").LazyExoticComponent<import("react").ForwardRefExoticComponent<import("../types").IconProps & import("react").RefAttributes<SVGSVGElement>>>;
|
|
272
275
|
PenRulerIcon: import("react").LazyExoticComponent<import("react").ForwardRefExoticComponent<import("../types").IconProps & import("react").RefAttributes<SVGSVGElement>>>;
|
|
276
|
+
PenSparkIcon: import("react").LazyExoticComponent<import("react").ForwardRefExoticComponent<import("../types").IconProps & import("react").RefAttributes<SVGSVGElement>>>;
|
|
273
277
|
PersonAddDisabledIcon: import("react").LazyExoticComponent<import("react").ForwardRefExoticComponent<import("../types").IconProps & import("react").RefAttributes<SVGSVGElement>>>;
|
|
274
278
|
PersonUserAccountIcon: import("react").LazyExoticComponent<import("react").ForwardRefExoticComponent<import("../types").IconProps & import("react").RefAttributes<SVGSVGElement>>>;
|
|
275
279
|
PhoneCallbackIcon: import("react").LazyExoticComponent<import("react").ForwardRefExoticComponent<import("../types").IconProps & import("react").RefAttributes<SVGSVGElement>>>;
|
|
@@ -341,6 +345,7 @@ export declare const LazyIcon: {
|
|
|
341
345
|
SqlWorkspaceIcon: import("react").LazyExoticComponent<import("react").ForwardRefExoticComponent<import("../types").IconProps & import("react").RefAttributes<SVGSVGElement>>>;
|
|
342
346
|
StatisticIcon: import("react").LazyExoticComponent<import("react").ForwardRefExoticComponent<import("../types").IconProps & import("react").RefAttributes<SVGSVGElement>>>;
|
|
343
347
|
StatusInfoIcon: import("react").LazyExoticComponent<import("react").ForwardRefExoticComponent<import("../types").IconProps & import("react").RefAttributes<SVGSVGElement>>>;
|
|
348
|
+
StatusSuccessIcon: import("react").LazyExoticComponent<import("react").ForwardRefExoticComponent<import("../types").IconProps & import("react").RefAttributes<SVGSVGElement>>>;
|
|
344
349
|
StickerIcon: import("react").LazyExoticComponent<import("react").ForwardRefExoticComponent<import("../types").IconProps & import("react").RefAttributes<SVGSVGElement>>>;
|
|
345
350
|
StopRecordIcon: import("react").LazyExoticComponent<import("react").ForwardRefExoticComponent<import("../types").IconProps & import("react").RefAttributes<SVGSVGElement>>>;
|
|
346
351
|
StoreIcon: import("react").LazyExoticComponent<import("react").ForwardRefExoticComponent<import("../types").IconProps & import("react").RefAttributes<SVGSVGElement>>>;
|
|
@@ -177,6 +177,7 @@ export const LazyIcon = {
|
|
|
177
177
|
ExtendValueIcon: lazy(() => import('../ExtendValueIcon').then(m => ({ default: m.ExtendValueIcon }))),
|
|
178
178
|
FactCheckIcon: lazy(() => import('../FactCheckIcon').then(m => ({ default: m.FactCheckIcon }))),
|
|
179
179
|
FailSlim: lazy(() => import('../FailSlim').then(m => ({ default: m.FailSlim }))),
|
|
180
|
+
FeedbackOutlinedIcon: lazy(() => import('../FeedbackOutlinedIcon').then(m => ({ default: m.FeedbackOutlinedIcon }))),
|
|
180
181
|
FeedbackRatingIcon: lazy(() => import('../FeedbackRatingIcon').then(m => ({ default: m.FeedbackRatingIcon }))),
|
|
181
182
|
FileDownloadIcon: lazy(() => import('../FileDownloadIcon').then(m => ({ default: m.FileDownloadIcon }))),
|
|
182
183
|
FileTransferIcon: lazy(() => import('../FileTransferIcon').then(m => ({ default: m.FileTransferIcon }))),
|
|
@@ -258,6 +259,8 @@ export const LazyIcon = {
|
|
|
258
259
|
MoreInfoIcon: lazy(() => import('../MoreInfoIcon').then(m => ({ default: m.MoreInfoIcon }))),
|
|
259
260
|
MoveToIcon: lazy(() => import('../MoveToIcon').then(m => ({ default: m.MoveToIcon }))),
|
|
260
261
|
MuteIcon: lazy(() => import('../MuteIcon').then(m => ({ default: m.MuteIcon }))),
|
|
262
|
+
NavigateBeforeIcon: lazy(() => import('../NavigateBeforeIcon').then(m => ({ default: m.NavigateBeforeIcon }))),
|
|
263
|
+
NavigateNextIcon: lazy(() => import('../NavigateNextIcon').then(m => ({ default: m.NavigateNextIcon }))),
|
|
261
264
|
NodeViewIcon: lazy(() => import('../NodeViewIcon').then(m => ({ default: m.NodeViewIcon }))),
|
|
262
265
|
NoteNewIcon: lazy(() => import('../NoteNewIcon').then(m => ({ default: m.NoteNewIcon }))),
|
|
263
266
|
NotificationIcon: lazy(() => import('../NotificationIcon').then(m => ({ default: m.NotificationIcon }))),
|
|
@@ -271,6 +274,7 @@ export const LazyIcon = {
|
|
|
271
274
|
PaymentIcon: lazy(() => import('../PaymentIcon').then(m => ({ default: m.PaymentIcon }))),
|
|
272
275
|
PenDrawingIcon: lazy(() => import('../PenDrawingIcon').then(m => ({ default: m.PenDrawingIcon }))),
|
|
273
276
|
PenRulerIcon: lazy(() => import('../PenRulerIcon').then(m => ({ default: m.PenRulerIcon }))),
|
|
277
|
+
PenSparkIcon: lazy(() => import('../PenSparkIcon').then(m => ({ default: m.PenSparkIcon }))),
|
|
274
278
|
PersonAddDisabledIcon: lazy(() => import('../PersonAddDisabledIcon').then(m => ({ default: m.PersonAddDisabledIcon }))),
|
|
275
279
|
PersonUserAccountIcon: lazy(() => import('../PersonUserAccountIcon').then(m => ({ default: m.PersonUserAccountIcon }))),
|
|
276
280
|
PhoneCallbackIcon: lazy(() => import('../PhoneCallbackIcon').then(m => ({ default: m.PhoneCallbackIcon }))),
|
|
@@ -344,6 +348,7 @@ export const LazyIcon = {
|
|
|
344
348
|
SqlWorkspaceIcon: lazy(() => import('../SqlWorkspaceIcon').then(m => ({ default: m.SqlWorkspaceIcon }))),
|
|
345
349
|
StatisticIcon: lazy(() => import('../StatisticIcon').then(m => ({ default: m.StatisticIcon }))),
|
|
346
350
|
StatusInfoIcon: lazy(() => import('../StatusInfoIcon').then(m => ({ default: m.StatusInfoIcon }))),
|
|
351
|
+
StatusSuccessIcon: lazy(() => import('../StatusSuccessIcon').then(m => ({ default: m.StatusSuccessIcon }))),
|
|
347
352
|
StickerIcon: lazy(() => import('../StickerIcon').then(m => ({ default: m.StickerIcon }))),
|
|
348
353
|
StopRecordIcon: lazy(() => import('../StopRecordIcon').then(m => ({ default: m.StopRecordIcon }))),
|
|
349
354
|
StoreIcon: lazy(() => import('../StoreIcon').then(m => ({ default: m.StoreIcon }))),
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { forwardRef } from 'react';
|
|
3
|
+
import { useIcon } from './hooks/useIcon';
|
|
4
|
+
export const NavigateBeforeIcon = forwardRef((props, ref) => {
|
|
5
|
+
const { width, height } = useIcon(props);
|
|
6
|
+
return (_jsx("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", ...props, ref: ref, width: width, height: height, children: _jsx("path", { d: "M15.41 7.41L14 6L8 12L14 18L15.41 16.59L10.83 12L15.41 7.41Z", fill: "currentColor" }) }));
|
|
7
|
+
});
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { forwardRef } from 'react';
|
|
3
|
+
import { useIcon } from './hooks/useIcon';
|
|
4
|
+
export const NavigateNextIcon = forwardRef((props, ref) => {
|
|
5
|
+
const { width, height } = useIcon(props);
|
|
6
|
+
return (_jsx("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", ...props, ref: ref, width: width, height: height, children: _jsx("path", { d: "M10 6L8.59 7.41L13.17 12L8.59 16.59L10 18L16 12L10 6Z", fill: "currentColor" }) }));
|
|
7
|
+
});
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { forwardRef } from 'react';
|
|
3
|
+
import { useIcon } from './hooks/useIcon';
|
|
4
|
+
export const PenSparkIcon = forwardRef((props, ref) => {
|
|
5
|
+
const { width, height } = useIcon(props);
|
|
6
|
+
return (_jsx("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", ...props, ref: ref, width: width, height: height, children: _jsx("path", { d: "M21.4795 7.15625L20.2326 5.8975C20.0696 5.73091 19.8754 5.59864 19.6614 5.50836C19.4474 5.41809 19.2177 5.3716 18.9857 5.3716C18.7538 5.3716 18.5241 5.41809 18.3101 5.50836C18.096 5.59864 17.9019 5.73091 17.7389 5.8975L5.52889 18.2237V22H9.26952L21.4795 9.67375C22.1735 8.985 22.1735 7.85687 21.4795 7.15625ZM8.54021 20.2188H7.29334V18.96L16.492 9.67375L17.7389 10.9325L8.54021 20.2188ZM12.5867 8.34375C9.6577 8.34375 7.29334 5.95688 7.29334 3C7.29334 5.95688 4.92898 8.34375 2 8.34375C4.92898 8.34375 7.29334 10.7306 7.29334 13.6875C7.29334 10.7306 9.6577 8.34375 12.5867 8.34375Z", fill: "currentColor" }) }));
|
|
7
|
+
});
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { forwardRef } from 'react';
|
|
3
|
+
import { useIcon } from './hooks/useIcon';
|
|
4
|
+
export const StatusSuccessIcon = forwardRef((props, ref) => {
|
|
5
|
+
const { width, height } = useIcon(props);
|
|
6
|
+
return (_jsx("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", ...props, ref: ref, width: width, height: height, children: _jsx("path", { d: "M12 2C6.42857 2 2 6.42857 2 12C2 17.5714 6.42857 22 12 22C17.5714 22 22 17.5714 22 12C22 6.42857 17.5714 2 12 2ZM10 17L5 12L6.42857 10.5714L10 14.1429L17.5714 6.57143L19 8L10 17Z", fill: "currentColor" }) }));
|
|
7
|
+
});
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { forwardRef } from 'react';
|
|
3
|
+
import { useIcon } from './hooks/useIcon';
|
|
4
|
+
export const SummarizeIconIcon = forwardRef((props, ref) => {
|
|
5
|
+
const { width, height } = useIcon(props);
|
|
6
|
+
return (_jsx("svg", { viewBox: "0 0 25 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", ...props, ref: ref, width: width, height: height, children: _jsx("path", { d: "M7.5 20C6.97005 19.9984 6.46225 19.7872 6.08752 19.4125C5.71279 19.0377 5.50158 18.5299 5.5 18L5.51001 6C5.51 5.4713 5.71934 4.9641 6.09225 4.58931C6.46517 4.21452 6.9713 4.00264 7.5 4H17.5C18.0299 4.00158 18.5377 4.2128 18.9125 4.58753C19.2872 4.96227 19.4984 5.47005 19.5 6V18C19.4984 18.5299 19.2872 19.0377 18.9125 19.4125C18.5377 19.7872 18.0299 19.9984 17.5 20H7.5ZM7.5 18H17.5V6H7.5V18ZM8.5 16V14H10.5V16H8.5ZM11.5 15V14H15.5V15H11.5ZM8.5 13V11H10.5V13H8.5ZM11.5 12V11H15.5V12H11.5ZM8.5 10V8H10.5V10H8.5ZM11.5 9V8H15.5V9H11.5Z", fill: "currentColor" }) }));
|
|
7
|
+
});
|
|
@@ -169,6 +169,7 @@ export { ExportMenuIcon } from './ExportMenuIcon';
|
|
|
169
169
|
export { ExtendValueIcon } from './ExtendValueIcon';
|
|
170
170
|
export { FactCheckIcon } from './FactCheckIcon';
|
|
171
171
|
export { FailSlim } from './FailSlim';
|
|
172
|
+
export { FeedbackOutlinedIcon } from './FeedbackOutlinedIcon';
|
|
172
173
|
export { FeedbackRatingIcon } from './FeedbackRatingIcon';
|
|
173
174
|
export { FileDownloadIcon } from './FileDownloadIcon';
|
|
174
175
|
export { FileTransferIcon } from './FileTransferIcon';
|
|
@@ -250,6 +251,8 @@ export { MoreIcon } from './MoreIcon';
|
|
|
250
251
|
export { MoreInfoIcon } from './MoreInfoIcon';
|
|
251
252
|
export { MoveToIcon } from './MoveToIcon';
|
|
252
253
|
export { MuteIcon } from './MuteIcon';
|
|
254
|
+
export { NavigateBeforeIcon } from './NavigateBeforeIcon';
|
|
255
|
+
export { NavigateNextIcon } from './NavigateNextIcon';
|
|
253
256
|
export { NodeViewIcon } from './NodeViewIcon';
|
|
254
257
|
export { NoteNewIcon } from './NoteNewIcon';
|
|
255
258
|
export { NotificationIcon } from './NotificationIcon';
|
|
@@ -263,6 +266,7 @@ export { PauseIcon } from './PauseIcon';
|
|
|
263
266
|
export { PaymentIcon } from './PaymentIcon';
|
|
264
267
|
export { PenDrawingIcon } from './PenDrawingIcon';
|
|
265
268
|
export { PenRulerIcon } from './PenRulerIcon';
|
|
269
|
+
export { PenSparkIcon } from './PenSparkIcon';
|
|
266
270
|
export { PersonAddDisabledIcon } from './PersonAddDisabledIcon';
|
|
267
271
|
export { PersonUserAccountIcon } from './PersonUserAccountIcon';
|
|
268
272
|
export { PhoneCallbackIcon } from './PhoneCallbackIcon';
|
|
@@ -334,6 +338,7 @@ export { SQLWorkspace30Icon } from './SQLWorkspace30Icon';
|
|
|
334
338
|
export { SqlWorkspaceIcon } from './SqlWorkspaceIcon';
|
|
335
339
|
export { StatisticIcon } from './StatisticIcon';
|
|
336
340
|
export { StatusInfoIcon } from './StatusInfoIcon';
|
|
341
|
+
export { StatusSuccessIcon } from './StatusSuccessIcon';
|
|
337
342
|
export { StickerIcon } from './StickerIcon';
|
|
338
343
|
export { StopRecordIcon } from './StopRecordIcon';
|
|
339
344
|
export { StoreIcon } from './StoreIcon';
|
|
@@ -169,6 +169,7 @@ export { ExportMenuIcon } from './ExportMenuIcon';
|
|
|
169
169
|
export { ExtendValueIcon } from './ExtendValueIcon';
|
|
170
170
|
export { FactCheckIcon } from './FactCheckIcon';
|
|
171
171
|
export { FailSlim } from './FailSlim';
|
|
172
|
+
export { FeedbackOutlinedIcon } from './FeedbackOutlinedIcon';
|
|
172
173
|
export { FeedbackRatingIcon } from './FeedbackRatingIcon';
|
|
173
174
|
export { FileDownloadIcon } from './FileDownloadIcon';
|
|
174
175
|
export { FileTransferIcon } from './FileTransferIcon';
|
|
@@ -250,6 +251,8 @@ export { MoreIcon } from './MoreIcon';
|
|
|
250
251
|
export { MoreInfoIcon } from './MoreInfoIcon';
|
|
251
252
|
export { MoveToIcon } from './MoveToIcon';
|
|
252
253
|
export { MuteIcon } from './MuteIcon';
|
|
254
|
+
export { NavigateBeforeIcon } from './NavigateBeforeIcon';
|
|
255
|
+
export { NavigateNextIcon } from './NavigateNextIcon';
|
|
253
256
|
export { NodeViewIcon } from './NodeViewIcon';
|
|
254
257
|
export { NoteNewIcon } from './NoteNewIcon';
|
|
255
258
|
export { NotificationIcon } from './NotificationIcon';
|
|
@@ -263,6 +266,7 @@ export { PauseIcon } from './PauseIcon';
|
|
|
263
266
|
export { PaymentIcon } from './PaymentIcon';
|
|
264
267
|
export { PenDrawingIcon } from './PenDrawingIcon';
|
|
265
268
|
export { PenRulerIcon } from './PenRulerIcon';
|
|
269
|
+
export { PenSparkIcon } from './PenSparkIcon';
|
|
266
270
|
export { PersonAddDisabledIcon } from './PersonAddDisabledIcon';
|
|
267
271
|
export { PersonUserAccountIcon } from './PersonUserAccountIcon';
|
|
268
272
|
export { PhoneCallbackIcon } from './PhoneCallbackIcon';
|
|
@@ -334,6 +338,7 @@ export { SQLWorkspace30Icon } from './SQLWorkspace30Icon';
|
|
|
334
338
|
export { SqlWorkspaceIcon } from './SqlWorkspaceIcon';
|
|
335
339
|
export { StatisticIcon } from './StatisticIcon';
|
|
336
340
|
export { StatusInfoIcon } from './StatusInfoIcon';
|
|
341
|
+
export { StatusSuccessIcon } from './StatusSuccessIcon';
|
|
337
342
|
export { StickerIcon } from './StickerIcon';
|
|
338
343
|
export { StopRecordIcon } from './StopRecordIcon';
|
|
339
344
|
export { StoreIcon } from './StoreIcon';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
@use './organism';
|
|
@@ -16,7 +16,7 @@ export interface LabeledTreeValue extends LabeledValue {
|
|
|
16
16
|
type: number | null;
|
|
17
17
|
status?: any;
|
|
18
18
|
}
|
|
19
|
-
interface AddDynamicContentProps {
|
|
19
|
+
export interface AddDynamicContentProps {
|
|
20
20
|
defaultDynamicIndex?: number;
|
|
21
21
|
journeySettings: Record<string, any>;
|
|
22
22
|
contentSources: Record<string, any>;
|
|
@@ -32,4 +32,3 @@ interface AddDynamicContentProps {
|
|
|
32
32
|
APIConfig: APIConfig;
|
|
33
33
|
}
|
|
34
34
|
export declare const AddDynamicContent: React.FC<AddDynamicContentProps>;
|
|
35
|
-
export {};
|
|
@@ -3,7 +3,7 @@ export declare const TRIGGER_OUT_MODE: {
|
|
|
3
3
|
readonly auto: "auto";
|
|
4
4
|
readonly manual: "manual";
|
|
5
5
|
};
|
|
6
|
-
export declare const LOCAL_TIMEZONE
|
|
6
|
+
export declare const LOCAL_TIMEZONE: string;
|
|
7
7
|
export declare const RANGE_LIMIT: number;
|
|
8
8
|
export declare const DEFAULT_NUM_UP_TO = 30;
|
|
9
9
|
export declare const AUTO_UPDATE_TO_KEY: {
|
|
@@ -2,7 +2,7 @@ export const TRIGGER_OUT_MODE = {
|
|
|
2
2
|
auto: 'auto',
|
|
3
3
|
manual: 'manual',
|
|
4
4
|
};
|
|
5
|
-
export const LOCAL_TIMEZONE =
|
|
5
|
+
export const LOCAL_TIMEZONE = Intl.DateTimeFormat().resolvedOptions().timeZone;
|
|
6
6
|
export const RANGE_LIMIT = 365 * 2;
|
|
7
7
|
export const DEFAULT_NUM_UP_TO = 30;
|
|
8
8
|
export const AUTO_UPDATE_TO_KEY = {
|