Compare commits
	
		
			120 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					47bb87a88f | ||
| 
						 | 
					a96c2e1078 | ||
| 
						 | 
					26d95eed25 | ||
| 
						 | 
					be65328f24 | ||
| 
						 | 
					85fd14fa02 | ||
| 
						 | 
					9c485b3b01 | ||
| 
						 | 
					e993f1549c | ||
| 
						 | 
					0db67ea42a | ||
| 
						 | 
					b9e621bd68 | ||
| 
						 | 
					93d59f8887 | ||
| 
						 | 
					190e4f4ffa | ||
| 
						 | 
					dc404c9d7e | ||
| 
						 | 
					dd4324d64f | ||
| 
						 | 
					1878083056 | ||
| 
						 | 
					7b6271962a | ||
| 
						 | 
					2edc8dfde8 | ||
| 
						 | 
					004d530880 | ||
| 
						 | 
					fd2cc9fcfc | ||
| 
						 | 
					4c93326bb6 | ||
| 
						 | 
					ef3d7a8b67 | ||
| 
						 | 
					3b3be086b1 | ||
| 
						 | 
					b424518212 | ||
| 
						 | 
					99a8201398 | ||
| 
						 | 
					eb9b41e4f6 | ||
| 
						 | 
					fef6d3f499 | ||
| 
						 | 
					14f11c27a7 | ||
| 
						 | 
					2118bce0f0 | ||
| 
						 | 
					88be6c1fd4 | ||
| 
						 | 
					0dcc9b9568 | ||
| 
						 | 
					ff3269ec05 | ||
| 
						 | 
					659dc2e3e7 | ||
| 
						 | 
					c36cd33180 | ||
| 
						 | 
					58231c9139 | ||
| 
						 | 
					1643e7bdeb | ||
| 
						 | 
					42d4cbac8c | ||
| 
						 | 
					7452ca6965 | ||
| 
						 | 
					27aede7794 | ||
| 
						 | 
					e9e2736cb2 | ||
| 
						 | 
					74c1730425 | ||
| 
						 | 
					94bed7fcce | ||
| 
						 | 
					8abf2a7bfc | ||
| 
						 | 
					ee659eaa03 | ||
| 
						 | 
					7c5db0848e | ||
| 
						 | 
					4b43f720e9 | ||
| 
						 | 
					766b5164b8 | ||
| 
						 | 
					7868ca9f42 | ||
| 
						 | 
					0411742864 | ||
| 
						 | 
					9831ac5a10 | ||
| 
						 | 
					91c6fb9249 | ||
| 
						 | 
					c155013668 | ||
| 
						 | 
					1b0f293c87 | ||
| 
						 | 
					df2dc03aa0 | ||
| 
						 | 
					205d431c89 | ||
| 
						 | 
					0abe18cdf9 | ||
| 
						 | 
					a151f56b5d | ||
| 
						 | 
					2b6b733261 | ||
| 
						 | 
					b56b04925c | ||
| 
						 | 
					635fb53c9f | ||
| 
						 | 
					d6659795bc | ||
| 
						 | 
					348f80568e | ||
| 
						 | 
					5f9c74a9ad | ||
| 
						 | 
					5409288388 | ||
| 
						 | 
					2309306ef5 | ||
| 
						 | 
					3574cecc7c | ||
| 
						 | 
					29b8edc051 | ||
| 
						 | 
					5fc10a7e64 | ||
| 
						 | 
					807cd22e0c | ||
| 
						 | 
					03772f6b4f | ||
| 
						 | 
					885eb719de | ||
| 
						 | 
					94656ec7a5 | ||
| 
						 | 
					a0e966b64f | ||
| 
						 | 
					a8fe491c1b | ||
| 
						 | 
					ddeef3b134 | ||
| 
						 | 
					d45677e92d | ||
| 
						 | 
					9c7d03c285 | ||
| 
						 | 
					be1b109f23 | ||
| 
						 | 
					05eaf85a3d | ||
| 
						 | 
					53f443d452 | ||
| 
						 | 
					134c62f931 | ||
| 
						 | 
					4bb4766e1a | ||
| 
						 | 
					24db32369a | ||
| 
						 | 
					e77ee60a5b | ||
| 
						 | 
					6c65c2e9cc | ||
| 
						 | 
					70f545f78b | ||
| 
						 | 
					fb702c87ce | ||
| 
						 | 
					eaa067814f | ||
| 
						 | 
					667685ed0f | ||
| 
						 | 
					2940431efa | ||
| 
						 | 
					94ec43b608 | ||
| 
						 | 
					a2efed803f | ||
| 
						 | 
					8749591be0 | ||
| 
						 | 
					c5e0ea6fa4 | ||
| 
						 | 
					ab07da0b03 | ||
| 
						 | 
					8397bef392 | ||
| 
						 | 
					7c3c62860e | ||
| 
						 | 
					76ba4ce4c5 | ||
| 
						 | 
					0c0fad719f | ||
| 
						 | 
					b75c6fe4e7 | ||
| 
						 | 
					d9fcbeec72 | ||
| 
						 | 
					5d79721b6d | ||
| 
						 | 
					4be3592cf4 | ||
| 
						 | 
					b4cdcbbbd7 | ||
| 
						 | 
					e9c7f4be06 | ||
| 
						 | 
					0530f9172c | ||
| 
						 | 
					e1e55c4b2a | ||
| 
						 | 
					c6f7ff70f8 | ||
| 
						 | 
					02aaabdc4e | ||
| 
						 | 
					0f673947af | ||
| 
						 | 
					f35f62fdf3 | ||
| 
						 | 
					68474e75d5 | ||
| 
						 | 
					eaf75cedb0 | ||
| 
						 | 
					fe8b9f9e91 | ||
| 
						 | 
					07d3745747 | ||
| 
						 | 
					44cf5ca264 | ||
| 
						 | 
					44d10c2390 | ||
| 
						 | 
					9698821828 | ||
| 
						 | 
					9f8500fc7e | ||
| 
						 | 
					e5dbbf2eaa | ||
| 
						 | 
					959e5402b8 | ||
| 
						 | 
					492c9324d2 | 
@@ -1,29 +0,0 @@
 | 
			
		||||
module.exports = {
 | 
			
		||||
    root: true,
 | 
			
		||||
    env: { browser: true, es2020: true },
 | 
			
		||||
    extends: [
 | 
			
		||||
        'eslint:recommended',
 | 
			
		||||
        'plugin:react/recommended',
 | 
			
		||||
        'plugin:@typescript-eslint/recommended',
 | 
			
		||||
        'plugin:react-hooks/recommended',
 | 
			
		||||
        'plugin:css-modules/recommended',
 | 
			
		||||
        'plugin:tailwindcss/recommended',
 | 
			
		||||
        'plugin:prettier/recommended',
 | 
			
		||||
        // 'plugin:jsx-a11y/recommended',
 | 
			
		||||
    ],
 | 
			
		||||
    ignorePatterns: ['dist', '.eslintrc.cjs'],
 | 
			
		||||
    parser: '@typescript-eslint/parser',
 | 
			
		||||
    plugins: ['react-refresh', 'css-modules', 'tailwindcss', 'jsx-a11y'],
 | 
			
		||||
    rules: {
 | 
			
		||||
        '@typescript-eslint/consistent-type-imports': 'error',
 | 
			
		||||
        'react-refresh/only-export-components': [
 | 
			
		||||
            'warn',
 | 
			
		||||
            { allowConstantExport: true },
 | 
			
		||||
        ],
 | 
			
		||||
        'react/no-unescaped-entities': 'off',
 | 
			
		||||
        'react/prop-types': 'off',
 | 
			
		||||
    },
 | 
			
		||||
    settings: {
 | 
			
		||||
        react: { version: 'detect' },
 | 
			
		||||
    },
 | 
			
		||||
};
 | 
			
		||||
							
								
								
									
										176
									
								
								CHANGELOG.md
									
									
									
									
									
								
							
							
						
						@@ -1,5 +1,181 @@
 | 
			
		||||
# Changelog
 | 
			
		||||
 | 
			
		||||
## [1.8.0](https://github.com/chartdb/chartdb/compare/v1.7.0...v1.8.0) (2025-02-13)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### Features
 | 
			
		||||
 | 
			
		||||
* **dbml-import:** add error highlighting for dbml imports ([#556](https://github.com/chartdb/chartdb/issues/556)) ([190e4f4](https://github.com/chartdb/chartdb/commit/190e4f4ffa834fa621f264dc608ca3f3b393a331))
 | 
			
		||||
* **docker image:** add support for custom inference servers ([#543](https://github.com/chartdb/chartdb/issues/543)) ([1878083](https://github.com/chartdb/chartdb/commit/1878083056ea4db7a05cdeeb38a4f7b9f5f95bd1))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### Bug Fixes
 | 
			
		||||
 | 
			
		||||
* **canvas:** add right-click option to create relationships ([#568](https://github.com/chartdb/chartdb/issues/568)) ([e993f15](https://github.com/chartdb/chartdb/commit/e993f1549c4c86bb9e7e36062db803ba6613b3b3))
 | 
			
		||||
* **canvas:** locate table from canvas ([#560](https://github.com/chartdb/chartdb/issues/560)) ([dc404c9](https://github.com/chartdb/chartdb/commit/dc404c9d7ee272c93aac69646bac859829a5234e))
 | 
			
		||||
* **docker:** add option to hide popups ([#580](https://github.com/chartdb/chartdb/issues/580)) ([a96c2e1](https://github.com/chartdb/chartdb/commit/a96c2e107838d2dc13b586923fd9dbe06598cdd8))
 | 
			
		||||
* **export-sql:** show create script for only filtered schemas ([#570](https://github.com/chartdb/chartdb/issues/570)) ([85fd14f](https://github.com/chartdb/chartdb/commit/85fd14fa02bb2879c36bba53369dbf2e7fa578d4))
 | 
			
		||||
* **i18n:** fix Ukrainian ([#554](https://github.com/chartdb/chartdb/issues/554)) ([7b62719](https://github.com/chartdb/chartdb/commit/7b6271962a99bfe5ffbd0176e714c76368ef5c41))
 | 
			
		||||
* **import dbml:** add import for indexes ([#566](https://github.com/chartdb/chartdb/issues/566)) ([0db67ea](https://github.com/chartdb/chartdb/commit/0db67ea42a5f9585ca1d246db7a7ff0239bec0ba))
 | 
			
		||||
* **import-query:** improve the cleanup for messy json input ([#562](https://github.com/chartdb/chartdb/issues/562)) ([93d59f8](https://github.com/chartdb/chartdb/commit/93d59f8887765098d040a3184aaee32112f67267))
 | 
			
		||||
* **index unique:** extract unique toggle for faster editing ([#559](https://github.com/chartdb/chartdb/issues/559)) ([dd4324d](https://github.com/chartdb/chartdb/commit/dd4324d64f7638ada5c022a2ab38bd8e6986af25))
 | 
			
		||||
* **mssql-import:** improve script readability by adding edition comment ([#572](https://github.com/chartdb/chartdb/issues/572)) ([be65328](https://github.com/chartdb/chartdb/commit/be65328f24b0361638b9e2edb39eaa9906e77f67))
 | 
			
		||||
* **realtionships section:** add the schema to source/target tables ([#561](https://github.com/chartdb/chartdb/issues/561)) ([b9e621b](https://github.com/chartdb/chartdb/commit/b9e621bd680730a0ffbf1054d735bfa418711cae))
 | 
			
		||||
* **sqlserver-import:** open ssms guide when max chars ([#565](https://github.com/chartdb/chartdb/issues/565)) ([9c485b3](https://github.com/chartdb/chartdb/commit/9c485b3b01a131bf551c7e95916b0c416f6aa0b5))
 | 
			
		||||
* **table actions:** fix size of table actions ([#578](https://github.com/chartdb/chartdb/issues/578)) ([26d95ee](https://github.com/chartdb/chartdb/commit/26d95eed25d86452d9168a9d93a301ba50d934e3))
 | 
			
		||||
 | 
			
		||||
## [1.7.0](https://github.com/chartdb/chartdb/compare/v1.6.1...v1.7.0) (2025-02-03)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### Features
 | 
			
		||||
 | 
			
		||||
* **dbml-editor:** add dbml editor in side pannel ([#534](https://github.com/chartdb/chartdb/issues/534)) ([88be6c1](https://github.com/chartdb/chartdb/commit/88be6c1fd4a7e1f20937e8204c14d8fc1c2665b4))
 | 
			
		||||
* **import-dbml:** add import dbml functionality ([#549](https://github.com/chartdb/chartdb/issues/549)) ([b424518](https://github.com/chartdb/chartdb/commit/b424518212290a870fdb7c420a303f65f5901429))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### Bug Fixes
 | 
			
		||||
 | 
			
		||||
* **canvas edit:** add option to edit names in canvas ([#536](https://github.com/chartdb/chartdb/issues/536)) ([0dcc9b9](https://github.com/chartdb/chartdb/commit/0dcc9b9568cfe749d44d2e93cb365ba3d3a1e71c))
 | 
			
		||||
* **dbml-editor:** add shortcuts to dbml and filter: [#534](https://github.com/chartdb/chartdb/issues/534) ([#535](https://github.com/chartdb/chartdb/issues/535)) ([3b3be08](https://github.com/chartdb/chartdb/commit/3b3be086b1e8d5acf999f8504580d9e2f956f7da))
 | 
			
		||||
* **dbml:** add error handling ([#545](https://github.com/chartdb/chartdb/issues/545)) ([fef6d3f](https://github.com/chartdb/chartdb/commit/fef6d3f4996130a3769d1f25b4b1f2090293a1bf))
 | 
			
		||||
* **empty-state:** fix dark-mode for empty-state ([#547](https://github.com/chartdb/chartdb/issues/547)) ([99a8201](https://github.com/chartdb/chartdb/commit/99a820139861546a012d7b562ddbb9b77698151a))
 | 
			
		||||
* **examples:** fix employee example dbml ([#544](https://github.com/chartdb/chartdb/issues/544)) ([2118bce](https://github.com/chartdb/chartdb/commit/2118bce0f00d55eb19d22b9fa2d4964ba2533a09))
 | 
			
		||||
* **i18n:** translation/Ukrainian ([#529](https://github.com/chartdb/chartdb/issues/529)) ([ff3269e](https://github.com/chartdb/chartdb/commit/ff3269ec0510bbae4bc114e65a1ea86a656e8785))
 | 
			
		||||
* **open-diagram:** add arrow keys navigation in open diagram dialog ([#537](https://github.com/chartdb/chartdb/issues/537)) ([14f11c2](https://github.com/chartdb/chartdb/commit/14f11c27a7ad5b990131c8495148cabf12835082))
 | 
			
		||||
* **performance:** fix bundle size ([#551](https://github.com/chartdb/chartdb/issues/551)) ([4c93326](https://github.com/chartdb/chartdb/commit/4c93326bb6e3eaa143373c500a0c641e95a53fb9))
 | 
			
		||||
* **performance:** reduce bundle size ([#553](https://github.com/chartdb/chartdb/issues/553)) ([004d530](https://github.com/chartdb/chartdb/commit/004d530880a50dea6e9786eb9ae63cf592a4d852))
 | 
			
		||||
* **performance:** resolve error on startup ([#552](https://github.com/chartdb/chartdb/issues/552)) ([fd2cc9f](https://github.com/chartdb/chartdb/commit/fd2cc9fcfc8f4a9f0bc79def47d89114159392fb))
 | 
			
		||||
* **psql-import:** remove typo for import command (psql) ([#546](https://github.com/chartdb/chartdb/issues/546)) ([eb9b41e](https://github.com/chartdb/chartdb/commit/eb9b41e4f656bec1451c45763f4ea5b547aeec5c))
 | 
			
		||||
* **scroll:** fix scroll area ([#550](https://github.com/chartdb/chartdb/issues/550)) ([ef3d7a8](https://github.com/chartdb/chartdb/commit/ef3d7a8b67431e923b75bf8287b86bbc8abe723b))
 | 
			
		||||
 | 
			
		||||
## [1.6.1](https://github.com/chartdb/chartdb/compare/v1.6.0...v1.6.1) (2025-01-26)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### Bug Fixes
 | 
			
		||||
 | 
			
		||||
* change empty state image ([#531](https://github.com/chartdb/chartdb/issues/531)) ([42d4cba](https://github.com/chartdb/chartdb/commit/42d4cbac8ce352e0e4e155d7003bfb85296b897f))
 | 
			
		||||
* **chat-type:** remove typo of char datatype in examples ([#530](https://github.com/chartdb/chartdb/issues/530)) ([58231c9](https://github.com/chartdb/chartdb/commit/58231c91393de30ebff817f0ebc57a5c5579f106))
 | 
			
		||||
* **empty_state:** customize empty state ([#533](https://github.com/chartdb/chartdb/issues/533)) ([1643e7b](https://github.com/chartdb/chartdb/commit/1643e7bdeb1bbaf081ab064e871d102c87243c0a))
 | 
			
		||||
* **Image Export:** importing css rules error while download image ([#524](https://github.com/chartdb/chartdb/issues/524)) ([e9e2736](https://github.com/chartdb/chartdb/commit/e9e2736cb2203702d53df9afc30b8e989a8c9953))
 | 
			
		||||
* **shortcuts:** add zoom all shortcut ([#528](https://github.com/chartdb/chartdb/issues/528)) ([7452ca6](https://github.com/chartdb/chartdb/commit/7452ca6965b0332a93b686c397ddf51013e42506))
 | 
			
		||||
* **filter-tables:** show clean filter if no-results ([#532](https://github.com/chartdb/chartdb/issues/532)) ([c36cd33](https://github.com/chartdb/chartdb/commit/c36cd33180badaa9b7f9e27c765f19cb03a50ccd))
 | 
			
		||||
 | 
			
		||||
## [1.6.0](https://github.com/chartdb/chartdb/compare/v1.5.1...v1.6.0) (2025-01-02)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### Features
 | 
			
		||||
 | 
			
		||||
* **view-menu:** add toggle for mini map visibility ([#496](https://github.com/chartdb/chartdb/issues/496)) ([#505](https://github.com/chartdb/chartdb/issues/505)) ([8abf2a7](https://github.com/chartdb/chartdb/commit/8abf2a7bfcc36d39e60ac133b0e5e569de1bbc72))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### Bug Fixes
 | 
			
		||||
 | 
			
		||||
* add loadDiagramFromData logic to chartdb provider ([#513](https://github.com/chartdb/chartdb/issues/513)) ([ee659ea](https://github.com/chartdb/chartdb/commit/ee659eaa038a94ee13801801e84152df4d79683d))
 | 
			
		||||
* **dependency:** upgrade react query to v7 - clean console warnings ([#504](https://github.com/chartdb/chartdb/issues/504)) ([7c5db08](https://github.com/chartdb/chartdb/commit/7c5db0848e49dfdb7e7120f77003d1e37f8d71b0))
 | 
			
		||||
* **i18n:** translation/Arabic ([#509](https://github.com/chartdb/chartdb/issues/509)) ([4b43f72](https://github.com/chartdb/chartdb/commit/4b43f720e90e49d5461e68d188e3865000f52497))
 | 
			
		||||
 | 
			
		||||
## [1.5.1](https://github.com/chartdb/chartdb/compare/v1.5.0...v1.5.1) (2024-12-15)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### Bug Fixes
 | 
			
		||||
 | 
			
		||||
* **export:** fix SQL server field.nullable type to boolean ([#486](https://github.com/chartdb/chartdb/issues/486)) ([a151f56](https://github.com/chartdb/chartdb/commit/a151f56b5d950e0b5cc54363684ada95889024b3))
 | 
			
		||||
* **readme:** Update README.md - add CockroachDB ([#482](https://github.com/chartdb/chartdb/issues/482)) ([2b6b733](https://github.com/chartdb/chartdb/commit/2b6b73326155f18d6d56779c0657a3506e2d2cde))
 | 
			
		||||
 | 
			
		||||
## [1.5.0](https://github.com/chartdb/chartdb/compare/v1.4.0...v1.5.0) (2024-12-11)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### Features
 | 
			
		||||
 | 
			
		||||
* **CockroachDB:** Add CockroachDB support ([#472](https://github.com/chartdb/chartdb/issues/472)) ([5409288](https://github.com/chartdb/chartdb/commit/54092883883b135f6ace51d86754b1df76603d30))
 | 
			
		||||
* **i18n:** translate share and dialog sections in Indonesian locale files ([#468](https://github.com/chartdb/chartdb/issues/468)) ([3574cec](https://github.com/chartdb/chartdb/commit/3574cecc7c73dcab404b82115d20e1ad0cd26b37))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### Bug Fixes
 | 
			
		||||
 | 
			
		||||
* **core:** fix update diagram id ([#477](https://github.com/chartdb/chartdb/issues/477)) ([348f805](https://github.com/chartdb/chartdb/commit/348f80568e0f686ee478147fdc43a5d43b5c1ebb))
 | 
			
		||||
* **dialogs:** fix footer position on dialogs ([#470](https://github.com/chartdb/chartdb/issues/470)) ([2309306](https://github.com/chartdb/chartdb/commit/2309306ef590783b00a2489209092107dd9a3788))
 | 
			
		||||
* **sql-server import:** nullable should be boolean instead of string ([#480](https://github.com/chartdb/chartdb/issues/480)) ([635fb53](https://github.com/chartdb/chartdb/commit/635fb53c9f7ebd1e5ef4d9274af041edc08f04c3))
 | 
			
		||||
 | 
			
		||||
## [1.4.0](https://github.com/chartdb/chartdb/compare/v1.3.1...v1.4.0) (2024-12-02)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### Features
 | 
			
		||||
 | 
			
		||||
* **add templates:** add six more templates  ([#452](https://github.com/chartdb/chartdb/issues/452)) ([be1b109](https://github.com/chartdb/chartdb/commit/be1b109f23e62df4cc63fa8914c2754f7809cc08))
 | 
			
		||||
* **add templates:** add six more templates (django-axes, laravel-activitylog, octobox, pay-rails, pixelfed, polr) ([#460](https://github.com/chartdb/chartdb/issues/460)) ([03772f6](https://github.com/chartdb/chartdb/commit/03772f6b4f99f9c4350356aa0f2a4666f4f1794d))
 | 
			
		||||
* **add templates:** add six more templates (reversion, screeenly, staytus, deployer, devise, talk) ([#457](https://github.com/chartdb/chartdb/issues/457)) ([ddeef3b](https://github.com/chartdb/chartdb/commit/ddeef3b134efa893e1c1e15e2f87c27157200e2d))
 | 
			
		||||
* **clickhouse:** add ClickHouse support ([#463](https://github.com/chartdb/chartdb/issues/463)) ([807cd22](https://github.com/chartdb/chartdb/commit/807cd22e0c739f339fa07fe1d2f043c5411ae41f))
 | 
			
		||||
* **i18n:** Added bangla translations ([#432](https://github.com/chartdb/chartdb/issues/432)) ([885eb71](https://github.com/chartdb/chartdb/commit/885eb719de577c2652fbed1ed287f38fcc98c148))
 | 
			
		||||
* **side-panel:** Add functionality of order tables by drag & drop ([#425](https://github.com/chartdb/chartdb/issues/425)) ([a0e966b](https://github.com/chartdb/chartdb/commit/a0e966b64f8070d4595d47b2fb39e8bbf427b794))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### Bug Fixes
 | 
			
		||||
 | 
			
		||||
* **clipboard:** defensive for navigator clipboard ([#462](https://github.com/chartdb/chartdb/issues/462)) ([5fc10a7](https://github.com/chartdb/chartdb/commit/5fc10a7e649fc5877bb297b519b1b6a8b81f1323))
 | 
			
		||||
* **import-database:** update database type after importing into an existing generic diagra ([#456](https://github.com/chartdb/chartdb/issues/456)) ([a8fe491](https://github.com/chartdb/chartdb/commit/a8fe491c1b5a30d9f4144cefa9111dd3dfd5df1a))
 | 
			
		||||
* **Last Saved:** Translate the "last saved" relative date message ([#400](https://github.com/chartdb/chartdb/issues/400)) ([d45677e](https://github.com/chartdb/chartdb/commit/d45677e92d72efc6cea8f865ce46f0be6ec9961f))
 | 
			
		||||
* **mariadb-types:** Add uuid data type ([#459](https://github.com/chartdb/chartdb/issues/459)) ([94656ec](https://github.com/chartdb/chartdb/commit/94656ec7a5435c2da262fb3bc6a6d381d554b0c1))
 | 
			
		||||
* window type ([#454](https://github.com/chartdb/chartdb/issues/454)) ([9c7d03c](https://github.com/chartdb/chartdb/commit/9c7d03c285ff6f818eef3199c9b7a530d03a1fec))
 | 
			
		||||
 | 
			
		||||
## [1.3.1](https://github.com/chartdb/chartdb/compare/v1.3.0...v1.3.1) (2024-11-26)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### Bug Fixes
 | 
			
		||||
 | 
			
		||||
* **docker:** make OPENAI_API_KEY optional in docker run ([#448](https://github.com/chartdb/chartdb/issues/448)) ([4bb4766](https://github.com/chartdb/chartdb/commit/4bb4766e1ac8d69e138668eb8a46de5affe62ceb))
 | 
			
		||||
 | 
			
		||||
## [1.3.0](https://github.com/chartdb/chartdb/compare/v1.2.0...v1.3.0) (2024-11-25)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### Features
 | 
			
		||||
 | 
			
		||||
* **side panel:** collapsible side panel on desktop view + keyboard shortcut ([#439](https://github.com/chartdb/chartdb/issues/439)) ([70f545f](https://github.com/chartdb/chartdb/commit/70f545f78bab9c510a6e5936fa5b259b806b6c69))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### Bug Fixes
 | 
			
		||||
 | 
			
		||||
* **dialogs:** fix height of dialogs for small screens ([#440](https://github.com/chartdb/chartdb/issues/440)) ([667685e](https://github.com/chartdb/chartdb/commit/667685ed0f6a8cc61ae86b3ba60e052fbe6a9e1a))
 | 
			
		||||
* **drawer:** set fix min size ([#429](https://github.com/chartdb/chartdb/issues/429)) ([c5e0ea6](https://github.com/chartdb/chartdb/commit/c5e0ea6fa4017666ff3bc1e3071c487df48afd3d))
 | 
			
		||||
* **export-sql:** add unique to export script ([#422](https://github.com/chartdb/chartdb/issues/422)) ([b75c6fe](https://github.com/chartdb/chartdb/commit/b75c6fe4e78f3e2058be680f2fa0442db3b4a6bd))
 | 
			
		||||
* fix layout warnings ([#434](https://github.com/chartdb/chartdb/issues/434)) ([94ec43b](https://github.com/chartdb/chartdb/commit/94ec43b60845bb8c3592ce1b1450ca0171a53f99))
 | 
			
		||||
* **i18n:** add bahasa indonesia translation ([#331](https://github.com/chartdb/chartdb/issues/331)) ([ab07da0](https://github.com/chartdb/chartdb/commit/ab07da0b031f0d4050ff6b44ddcb94cb6c0010b6))
 | 
			
		||||
* **i18n:** add missing type to vi.ts ([#444](https://github.com/chartdb/chartdb/issues/444)) ([e77ee60](https://github.com/chartdb/chartdb/commit/e77ee60a5b47e0854d11b0ee2f16d6956737d0ff))
 | 
			
		||||
* **i18n:** Add Telugu Language ([#352](https://github.com/chartdb/chartdb/issues/352)) ([8749591](https://github.com/chartdb/chartdb/commit/8749591be036e131de4bfeed1e6eece8d62980dd))
 | 
			
		||||
* **i18n:** add Turkish translations ([#315](https://github.com/chartdb/chartdb/issues/315)) ([d9fcbee](https://github.com/chartdb/chartdb/commit/d9fcbeec726b7bde9f7d202bf09dc6b617e3ad80))
 | 
			
		||||
* **i18n:** add Vietnamese translations ([#435](https://github.com/chartdb/chartdb/issues/435)) ([6c65c2e](https://github.com/chartdb/chartdb/commit/6c65c2e9cce600b9778b84ce5b5f1625dc6f1a58))
 | 
			
		||||
* **i18n:** Translating to Gujarati language ([#433](https://github.com/chartdb/chartdb/issues/433)) ([2940431](https://github.com/chartdb/chartdb/commit/2940431efa1a6aa54d80c61d5e05f0ad47cd67ba))
 | 
			
		||||
* **i18n:** Translation of the export error into Russian ([#418](https://github.com/chartdb/chartdb/issues/418)) ([7c3c628](https://github.com/chartdb/chartdb/commit/7c3c62860efc98d3aabf2132a79ac945ffc8315a))
 | 
			
		||||
* **i18n:** update korean for 1.2.0 ([#419](https://github.com/chartdb/chartdb/issues/419)) ([8397bef](https://github.com/chartdb/chartdb/commit/8397bef3924610d94661aae99c55ba4fa376a186))
 | 
			
		||||
* **import script:** remove double quotes ([#442](https://github.com/chartdb/chartdb/issues/442)) ([fb702c8](https://github.com/chartdb/chartdb/commit/fb702c87ce5254bf6e0209c692305f5086956090))
 | 
			
		||||
* **share:** fix export to handle broken indexes & relationships ([#416](https://github.com/chartdb/chartdb/issues/416)) ([4be3592](https://github.com/chartdb/chartdb/commit/4be3592cf4d160be83ddf1db01ffe9afdef119fa))
 | 
			
		||||
* **templates:** add Five more templates (bouncer, cabot, feedbin, Pythonic, flarum, freescout) ([#441](https://github.com/chartdb/chartdb/issues/441)) ([eaa0678](https://github.com/chartdb/chartdb/commit/eaa067814fd96fcc1ee10488ee747a71a8e8ec7a))
 | 
			
		||||
 | 
			
		||||
## [1.2.0](https://github.com/chartdb/chartdb/compare/v1.1.0...v1.2.0) (2024-11-17)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### Features
 | 
			
		||||
 | 
			
		||||
* **duplicate table:** duplicate table from the canvas and sidebar ([#404](https://github.com/chartdb/chartdb/issues/404)) ([44cf5ca](https://github.com/chartdb/chartdb/commit/44cf5ca264f52851f2dffb51a752a52b6fa7ec8d))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### Bug Fixes
 | 
			
		||||
 | 
			
		||||
* **AI exports:** add cahching layer to SQL exports ([#390](https://github.com/chartdb/chartdb/issues/390)) ([e5dbbf2](https://github.com/chartdb/chartdb/commit/e5dbbf2eaab6d80a531d451211b6f5a415bc7ce3))
 | 
			
		||||
* **canvas:** fix auto zoom on diagram load ([#395](https://github.com/chartdb/chartdb/issues/395)) ([492c932](https://github.com/chartdb/chartdb/commit/492c9324d27b561470c4967ce2e99f82eec467d8))
 | 
			
		||||
* **dockerfile:** support SPA refresh to resolve nginx return 404 ([#384](https://github.com/chartdb/chartdb/issues/384)) ([eaf75ce](https://github.com/chartdb/chartdb/commit/eaf75cedb0e024236c7684bb533856d7f80074da))
 | 
			
		||||
* **docs:** update license reference ([#403](https://github.com/chartdb/chartdb/issues/403)) ([44d10c2](https://github.com/chartdb/chartdb/commit/44d10c23907165288951a9d2ec3165ad23f81c61))
 | 
			
		||||
* **export image:** Add support for displaying cardinality relationships + background ([#407](https://github.com/chartdb/chartdb/issues/407)) ([68474e7](https://github.com/chartdb/chartdb/commit/68474e75d56ed4b4b445cc9b7f59cca96a4ca5db))
 | 
			
		||||
* **i18n:** add Nepali translations ([#406](https://github.com/chartdb/chartdb/issues/406)) ([e1e55c4](https://github.com/chartdb/chartdb/commit/e1e55c4b2ac7755b0810dc1f21da44903fe68a54))
 | 
			
		||||
* **i18n:** change language keeps selected language also after refreshing the page ([#409](https://github.com/chartdb/chartdb/issues/409)) ([f35f62f](https://github.com/chartdb/chartdb/commit/f35f62fdf38ca84065f171a31b80aa8123b1d8b9))
 | 
			
		||||
* **i18n:** Create Translations in Marathi language ([#266](https://github.com/chartdb/chartdb/issues/266)) ([c6f7ff7](https://github.com/chartdb/chartdb/commit/c6f7ff70f841efb9cf1766338f409fe0ea7bb998))
 | 
			
		||||
* **i18n:** fix language nav: close when lang selected, hide tooltip when lang selected ([#411](https://github.com/chartdb/chartdb/issues/411)) ([02aaabd](https://github.com/chartdb/chartdb/commit/02aaabdc4e9b1570d81ff03fe1e6da0307f22999))
 | 
			
		||||
* **templates:** add five more templates (Sylius, Monica, Attendize, SaaS Pegasus & BookStack) ([#408](https://github.com/chartdb/chartdb/issues/408)) ([0f67394](https://github.com/chartdb/chartdb/commit/0f673947af469e86f70737427ac8fb3c2420d1a2))
 | 
			
		||||
* **templates:** add six more templates (ticketit, snipe-it, refinerycms, comfortable-mexican-sofa, buddypress, lobsters) ([#402](https://github.com/chartdb/chartdb/issues/402)) ([07d3745](https://github.com/chartdb/chartdb/commit/07d374574775d132e1cba0908c47dcbbd6cd2c3f))
 | 
			
		||||
* **templates:** fix cloned indexes from a template ([#398](https://github.com/chartdb/chartdb/issues/398)) ([9f8500f](https://github.com/chartdb/chartdb/commit/9f8500fc7e36e6a819ecb9029f263d80eac88279))
 | 
			
		||||
* **templates:** fix tags urls ([#405](https://github.com/chartdb/chartdb/issues/405)) ([fe8b9f9](https://github.com/chartdb/chartdb/commit/fe8b9f9e91481d8a3272113b6f4be4da8d61ad04))
 | 
			
		||||
* **templates:** tag urls lowercase to support browsers ([#397](https://github.com/chartdb/chartdb/issues/397)) ([959e540](https://github.com/chartdb/chartdb/commit/959e5402b8c112fae6243ce9283947057506c128))
 | 
			
		||||
 | 
			
		||||
## [1.1.0](https://github.com/chartdb/chartdb/compare/v1.0.1...v1.1.0) (2024-11-13)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -30,7 +30,7 @@ To get started:
 | 
			
		||||
 | 
			
		||||
### License
 | 
			
		||||
 | 
			
		||||
By contributing, you agree that your work will be licensed under ChartDB's [license](https://github.com/chartdb/chartdb/blob/main/LICENSE.md).
 | 
			
		||||
By contributing, you agree that your work will be licensed under ChartDB's [license](https://github.com/chartdb/chartdb/blob/main/LICENSE).
 | 
			
		||||
 | 
			
		||||
## Questions?
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										15
									
								
								Dockerfile
									
									
									
									
									
								
							
							
						
						@@ -1,6 +1,9 @@
 | 
			
		||||
FROM node:22-alpine AS builder
 | 
			
		||||
 | 
			
		||||
ARG VITE_OPENAI_API_KEY
 | 
			
		||||
ARG VITE_OPENAI_API_ENDPOINT
 | 
			
		||||
ARG VITE_LLM_MODEL_NAME
 | 
			
		||||
ARG VITE_HIDE_BUCKLE_DOT_DEV
 | 
			
		||||
 | 
			
		||||
WORKDIR /usr/src/app
 | 
			
		||||
 | 
			
		||||
@@ -10,14 +13,20 @@ RUN npm ci
 | 
			
		||||
 | 
			
		||||
COPY . .
 | 
			
		||||
 | 
			
		||||
RUN echo "VITE_OPENAI_API_KEY=${VITE_OPENAI_API_KEY}" > .env && \
 | 
			
		||||
    echo "VITE_OPENAI_API_ENDPOINT=${VITE_OPENAI_API_ENDPOINT}" >> .env && \
 | 
			
		||||
    echo "VITE_LLM_MODEL_NAME=${VITE_LLM_MODEL_NAME}" >> .env && \
 | 
			
		||||
    echo "VITE_HIDE_BUCKLE_DOT_DEV=${VITE_HIDE_BUCKLE_DOT_DEV}" >> .env 
 | 
			
		||||
 | 
			
		||||
RUN npm run build
 | 
			
		||||
 | 
			
		||||
# Use a lightweight web server to serve the production build
 | 
			
		||||
FROM nginx:stable-alpine AS production
 | 
			
		||||
 | 
			
		||||
COPY --from=builder /usr/src/app/dist /usr/share/nginx/html
 | 
			
		||||
COPY ./default.conf.template /etc/nginx/conf.d/default.conf.template
 | 
			
		||||
COPY entrypoint.sh /entrypoint.sh
 | 
			
		||||
RUN chmod +x /entrypoint.sh
 | 
			
		||||
 | 
			
		||||
# Expose the default port for the Nginx web server
 | 
			
		||||
EXPOSE 80
 | 
			
		||||
 | 
			
		||||
CMD ["nginx", "-g", "daemon off;"]
 | 
			
		||||
ENTRYPOINT ["/entrypoint.sh"]
 | 
			
		||||
							
								
								
									
										39
									
								
								README.md
									
									
									
									
									
								
							
							
						
						@@ -16,6 +16,7 @@
 | 
			
		||||
<h3 align="center">
 | 
			
		||||
  <a href="https://discord.gg/QeFwyWSKwC">Community</a>  •
 | 
			
		||||
  <a href="https://www.chartdb.io?ref=github_readme">Website</a>  •
 | 
			
		||||
  <a href="https://chartdb.io/templates?ref=github_readme">Examples</a>  •
 | 
			
		||||
  <a href="https://app.chartdb.io?ref=github_readme">Demo</a>
 | 
			
		||||
</h3>
 | 
			
		||||
 | 
			
		||||
@@ -67,6 +68,7 @@ ChartDB is currently in Public Beta. Star and watch this repository to get notif
 | 
			
		||||
-   ✅ SQL Server
 | 
			
		||||
-   ✅ MariaDB
 | 
			
		||||
-   ✅ SQLite
 | 
			
		||||
-   ✅ CockroachDB
 | 
			
		||||
-   ✅ ClickHouse
 | 
			
		||||
 | 
			
		||||
## Getting Started
 | 
			
		||||
@@ -94,15 +96,44 @@ npm install
 | 
			
		||||
VITE_OPENAI_API_KEY=<YOUR_OPEN_AI_KEY> npm run build
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
### Running the Docker Container
 | 
			
		||||
 | 
			
		||||
### Run the Docker Container
 | 
			
		||||
```bash
 | 
			
		||||
docker build -t chartdb . (If you want AI capabilities, use `docker build --build-arg VITE_OPENAI_API_KEY=<YOUR_OPEN_AI_KEY> -t chartdb .`)
 | 
			
		||||
docker run -p 8080:80 chartdb
 | 
			
		||||
docker run -e OPENAI_API_KEY=<YOUR_OPEN_AI_KEY> -p 8080:80 ghcr.io/chartdb/chartdb:latest
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
#### Build and Run locally
 | 
			
		||||
```bash
 | 
			
		||||
docker build -t chartdb .
 | 
			
		||||
docker run -e OPENAI_API_KEY=<YOUR_OPEN_AI_KEY> -p 8080:80 chartdb
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
#### Using Custom Inference Server
 | 
			
		||||
 | 
			
		||||
```bash
 | 
			
		||||
# Build
 | 
			
		||||
docker build \
 | 
			
		||||
  --build-arg VITE_OPENAI_API_ENDPOINT=<YOUR_ENDPOINT> \
 | 
			
		||||
  --build-arg VITE_LLM_MODEL_NAME=<YOUR_MODEL_NAME> \
 | 
			
		||||
  -t chartdb .
 | 
			
		||||
 | 
			
		||||
# Run
 | 
			
		||||
docker run \
 | 
			
		||||
  -e OPENAI_API_ENDPOINT=<YOUR_ENDPOINT> \
 | 
			
		||||
  -e LLM_MODEL_NAME=<YOUR_MODEL_NAME> \
 | 
			
		||||
  -p 8080:80 chartdb
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
> **Note:** You must configure either Option 1 (OpenAI API key) OR Option 2 (Custom endpoint and model name) for AI capabilities to work. Do not mix the two options.
 | 
			
		||||
 | 
			
		||||
Open your browser and navigate to `http://localhost:8080`.
 | 
			
		||||
 | 
			
		||||
Example configuration for a local vLLM server:
 | 
			
		||||
 | 
			
		||||
```bash
 | 
			
		||||
VITE_OPENAI_API_ENDPOINT=http://localhost:8000/v1
 | 
			
		||||
VITE_LLM_MODEL_NAME=Qwen/Qwen2.5-32B-Instruct-AWQ
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
## Try it on our website
 | 
			
		||||
 | 
			
		||||
1. Go to [ChartDB.io](https://chartdb.io?ref=github_readme_2)
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										25
									
								
								default.conf.template
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,25 @@
 | 
			
		||||
server {
 | 
			
		||||
    listen       80;
 | 
			
		||||
    listen  [::]:80;
 | 
			
		||||
 | 
			
		||||
    location / {
 | 
			
		||||
        root   /usr/share/nginx/html;
 | 
			
		||||
        index  index.html index.htm;
 | 
			
		||||
	    try_files  $uri $uri/ /index.html;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    location /config.js {
 | 
			
		||||
        default_type application/javascript;
 | 
			
		||||
        return 200 "window.env = { 
 | 
			
		||||
            OPENAI_API_KEY: \"$OPENAI_API_KEY\",
 | 
			
		||||
            OPENAI_API_ENDPOINT: \"$OPENAI_API_ENDPOINT\",
 | 
			
		||||
            LLM_MODEL_NAME: \"$LLM_MODEL_NAME\",
 | 
			
		||||
            HIDE_BUCKLE_DOT_DEV: \"$HIDE_BUCKLE_DOT_DEV\"
 | 
			
		||||
        };";
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    error_page   500 502 503 504  /50x.html;
 | 
			
		||||
    location = /50x.html {
 | 
			
		||||
        root   /usr/share/nginx/html;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										7
									
								
								entrypoint.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,7 @@
 | 
			
		||||
#!/bin/sh
 | 
			
		||||
 | 
			
		||||
# Replace placeholders in nginx.conf
 | 
			
		||||
envsubst '${OPENAI_API_KEY} ${OPENAI_API_ENDPOINT} ${LLM_MODEL_NAME} ${HIDE_BUCKLE_DOT_DEV}' < /etc/nginx/conf.d/default.conf.template > /etc/nginx/conf.d/default.conf
 | 
			
		||||
 | 
			
		||||
# Start Nginx
 | 
			
		||||
nginx -g "daemon off;"
 | 
			
		||||
							
								
								
									
										77
									
								
								eslint.config.mjs
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,77 @@
 | 
			
		||||
import { fixupConfigRules, fixupPluginRules } from '@eslint/compat';
 | 
			
		||||
import reactRefresh from 'eslint-plugin-react-refresh';
 | 
			
		||||
import cssModules from 'eslint-plugin-css-modules';
 | 
			
		||||
import tailwindcss from 'eslint-plugin-tailwindcss';
 | 
			
		||||
import jsxA11Y from 'eslint-plugin-jsx-a11y';
 | 
			
		||||
import globals from 'globals';
 | 
			
		||||
import tsParser from '@typescript-eslint/parser';
 | 
			
		||||
import path from 'node:path';
 | 
			
		||||
import { fileURLToPath } from 'node:url';
 | 
			
		||||
import js from '@eslint/js';
 | 
			
		||||
import { FlatCompat } from '@eslint/eslintrc';
 | 
			
		||||
 | 
			
		||||
const __filename = fileURLToPath(import.meta.url);
 | 
			
		||||
const __dirname = path.dirname(__filename);
 | 
			
		||||
const compat = new FlatCompat({
 | 
			
		||||
    baseDirectory: __dirname,
 | 
			
		||||
    recommendedConfig: js.configs.recommended,
 | 
			
		||||
    allConfig: js.configs.all,
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
export default [
 | 
			
		||||
    {
 | 
			
		||||
        ignores: ['**/dist', '**/.eslintrc.cjs', '**/tailwind.config.js'],
 | 
			
		||||
        // files: ['**/*.ts', '**/*.tsx'],
 | 
			
		||||
    },
 | 
			
		||||
    ...fixupConfigRules(
 | 
			
		||||
        compat.extends(
 | 
			
		||||
            'eslint:recommended',
 | 
			
		||||
            'plugin:react/recommended',
 | 
			
		||||
            'plugin:@typescript-eslint/recommended',
 | 
			
		||||
            'plugin:react-hooks/recommended',
 | 
			
		||||
            'plugin:css-modules/recommended',
 | 
			
		||||
            'plugin:tailwindcss/recommended',
 | 
			
		||||
            'plugin:prettier/recommended'
 | 
			
		||||
        )
 | 
			
		||||
    ),
 | 
			
		||||
    {
 | 
			
		||||
        plugins: {
 | 
			
		||||
            'react-refresh': reactRefresh,
 | 
			
		||||
            'css-modules': fixupPluginRules(cssModules),
 | 
			
		||||
            tailwindcss: fixupPluginRules(tailwindcss),
 | 
			
		||||
            'jsx-a11y': jsxA11Y,
 | 
			
		||||
        },
 | 
			
		||||
 | 
			
		||||
        languageOptions: {
 | 
			
		||||
            globals: {
 | 
			
		||||
                ...globals.browser,
 | 
			
		||||
            },
 | 
			
		||||
 | 
			
		||||
            parser: tsParser,
 | 
			
		||||
            // parserOptions: {
 | 
			
		||||
            //     project: './tsconfig.json',
 | 
			
		||||
            // },
 | 
			
		||||
        },
 | 
			
		||||
 | 
			
		||||
        settings: {
 | 
			
		||||
            react: {
 | 
			
		||||
                version: 'detect',
 | 
			
		||||
            },
 | 
			
		||||
        },
 | 
			
		||||
 | 
			
		||||
        rules: {
 | 
			
		||||
            '@typescript-eslint/consistent-type-imports': 'error',
 | 
			
		||||
 | 
			
		||||
            'react-refresh/only-export-components': [
 | 
			
		||||
                'warn',
 | 
			
		||||
                {
 | 
			
		||||
                    allowConstantExport: true,
 | 
			
		||||
                },
 | 
			
		||||
            ],
 | 
			
		||||
 | 
			
		||||
            'react/no-unescaped-entities': 'off',
 | 
			
		||||
            'react/prop-types': 'off',
 | 
			
		||||
            '@typescript-eslint/no-empty-object-type': 'off',
 | 
			
		||||
        },
 | 
			
		||||
    },
 | 
			
		||||
];
 | 
			
		||||
@@ -12,6 +12,7 @@
 | 
			
		||||
            href="https://fonts.googleapis.com/css2?family=Raleway:ital,wght@0,100..900;1,100..900&display=swap"
 | 
			
		||||
            rel="stylesheet"
 | 
			
		||||
        />
 | 
			
		||||
        <script src="/config.js"></script>
 | 
			
		||||
        <script
 | 
			
		||||
            src="https://cdn.usefathom.com/script.js"
 | 
			
		||||
            data-site="PRHIVBNN"
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										20749
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
							
								
								
									
										194
									
								
								package.json
									
									
									
									
									
								
							
							
						
						@@ -1,96 +1,102 @@
 | 
			
		||||
{
 | 
			
		||||
  "name": "chartdb",
 | 
			
		||||
  "private": true,
 | 
			
		||||
  "version": "1.1.0",
 | 
			
		||||
  "type": "module",
 | 
			
		||||
  "scripts": {
 | 
			
		||||
    "dev": "vite",
 | 
			
		||||
    "build": "npm run lint && tsc -b && vite build",
 | 
			
		||||
    "lint": "eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 0",
 | 
			
		||||
    "lint:fix": "npm run lint -- --fix",
 | 
			
		||||
    "preview": "vite preview",
 | 
			
		||||
    "prepare": "husky"
 | 
			
		||||
  },
 | 
			
		||||
  "dependencies": {
 | 
			
		||||
    "@ai-sdk/openai": "^0.0.51",
 | 
			
		||||
    "@dnd-kit/sortable": "^8.0.0",
 | 
			
		||||
    "@monaco-editor/react": "^4.6.0",
 | 
			
		||||
    "@radix-ui/react-accordion": "^1.2.0",
 | 
			
		||||
    "@radix-ui/react-alert-dialog": "^1.1.1",
 | 
			
		||||
    "@radix-ui/react-avatar": "^1.1.0",
 | 
			
		||||
    "@radix-ui/react-checkbox": "^1.1.1",
 | 
			
		||||
    "@radix-ui/react-collapsible": "^1.1.0",
 | 
			
		||||
    "@radix-ui/react-context-menu": "^2.2.1",
 | 
			
		||||
    "@radix-ui/react-dialog": "^1.1.1",
 | 
			
		||||
    "@radix-ui/react-dropdown-menu": "^2.1.1",
 | 
			
		||||
    "@radix-ui/react-hover-card": "^1.1.1",
 | 
			
		||||
    "@radix-ui/react-icons": "^1.3.0",
 | 
			
		||||
    "@radix-ui/react-label": "^2.1.0",
 | 
			
		||||
    "@radix-ui/react-menubar": "^1.1.1",
 | 
			
		||||
    "@radix-ui/react-popover": "^1.1.1",
 | 
			
		||||
    "@radix-ui/react-scroll-area": "^1.1.0",
 | 
			
		||||
    "@radix-ui/react-select": "^2.1.1",
 | 
			
		||||
    "@radix-ui/react-separator": "^1.1.0",
 | 
			
		||||
    "@radix-ui/react-slot": "^1.1.0",
 | 
			
		||||
    "@radix-ui/react-tabs": "^1.1.0",
 | 
			
		||||
    "@radix-ui/react-toast": "^1.2.1",
 | 
			
		||||
    "@radix-ui/react-toggle": "^1.1.0",
 | 
			
		||||
    "@radix-ui/react-toggle-group": "^1.1.0",
 | 
			
		||||
    "@radix-ui/react-tooltip": "^1.1.2",
 | 
			
		||||
    "@uidotdev/usehooks": "^2.4.1",
 | 
			
		||||
    "@xyflow/react": "^12.3.1",
 | 
			
		||||
    "ahooks": "^3.8.1",
 | 
			
		||||
    "ai": "^3.3.14",
 | 
			
		||||
    "class-variance-authority": "^0.7.0",
 | 
			
		||||
    "clsx": "^2.1.1",
 | 
			
		||||
    "cmdk": "^1.0.0",
 | 
			
		||||
    "dexie": "^4.0.8",
 | 
			
		||||
    "fast-deep-equal": "^3.1.3",
 | 
			
		||||
    "html-to-image": "^1.11.11",
 | 
			
		||||
    "i18next": "^23.14.0",
 | 
			
		||||
    "lucide-react": "^0.441.0",
 | 
			
		||||
    "monaco-editor": "^0.52.0",
 | 
			
		||||
    "nanoid": "^5.0.7",
 | 
			
		||||
    "node-sql-parser": "^5.3.2",
 | 
			
		||||
    "react": "^18.3.1",
 | 
			
		||||
    "react-dom": "^18.3.1",
 | 
			
		||||
    "react-helmet-async": "^2.0.5",
 | 
			
		||||
    "react-hotkeys-hook": "^4.5.0",
 | 
			
		||||
    "react-i18next": "^15.0.1",
 | 
			
		||||
    "react-resizable-panels": "^2.0.22",
 | 
			
		||||
    "react-responsive": "^10.0.0",
 | 
			
		||||
    "react-router-dom": "^6.26.0",
 | 
			
		||||
    "react-use": "^17.5.1",
 | 
			
		||||
    "tailwind-merge": "^2.4.0",
 | 
			
		||||
    "tailwindcss-animate": "^1.0.7",
 | 
			
		||||
    "timeago-react": "^3.0.6",
 | 
			
		||||
    "vaul": "^0.9.1",
 | 
			
		||||
    "zod": "^3.23.8"
 | 
			
		||||
  },
 | 
			
		||||
  "devDependencies": {
 | 
			
		||||
    "@types/node": "^22.1.0",
 | 
			
		||||
    "@types/react": "^18.3.3",
 | 
			
		||||
    "@types/react-dom": "^18.3.0",
 | 
			
		||||
    "@typescript-eslint/eslint-plugin": "^7.15.0",
 | 
			
		||||
    "@typescript-eslint/parser": "^7.15.0",
 | 
			
		||||
    "@vitejs/plugin-react": "^4.3.1",
 | 
			
		||||
    "autoprefixer": "^10.4.20",
 | 
			
		||||
    "eslint": "^8.57.0",
 | 
			
		||||
    "eslint-config-prettier": "^9.1.0",
 | 
			
		||||
    "eslint-plugin-css-modules": "^2.12.0",
 | 
			
		||||
    "eslint-plugin-jsx-a11y": "^6.9.0",
 | 
			
		||||
    "eslint-plugin-prettier": "^5.2.1",
 | 
			
		||||
    "eslint-plugin-react": "^7.35.0",
 | 
			
		||||
    "eslint-plugin-react-hooks": "^4.6.2",
 | 
			
		||||
    "eslint-plugin-react-refresh": "^0.4.7",
 | 
			
		||||
    "eslint-plugin-tailwindcss": "^3.17.4",
 | 
			
		||||
    "husky": "^9.1.5",
 | 
			
		||||
    "postcss": "^8.4.40",
 | 
			
		||||
    "prettier": "^3.3.3",
 | 
			
		||||
    "rollup-plugin-visualizer": "^5.12.0",
 | 
			
		||||
    "tailwindcss": "^3.4.7",
 | 
			
		||||
    "typescript": "^5.2.2",
 | 
			
		||||
    "unplugin-inject-preload": "^3.0.0",
 | 
			
		||||
    "vite": "^5.3.4"
 | 
			
		||||
  }
 | 
			
		||||
    "name": "chartdb",
 | 
			
		||||
    "private": true,
 | 
			
		||||
    "version": "1.8.0",
 | 
			
		||||
    "type": "module",
 | 
			
		||||
    "scripts": {
 | 
			
		||||
        "dev": "vite",
 | 
			
		||||
        "build": "npm run lint && tsc -b && vite build",
 | 
			
		||||
        "lint": "eslint . --report-unused-disable-directives --max-warnings 0",
 | 
			
		||||
        "lint:fix": "npm run lint -- --fix",
 | 
			
		||||
        "preview": "vite preview",
 | 
			
		||||
        "prepare": "husky"
 | 
			
		||||
    },
 | 
			
		||||
    "dependencies": {
 | 
			
		||||
        "@ai-sdk/openai": "^0.0.51",
 | 
			
		||||
        "@dbml/core": "^3.9.5",
 | 
			
		||||
        "@dnd-kit/sortable": "^8.0.0",
 | 
			
		||||
        "@monaco-editor/react": "^4.6.0",
 | 
			
		||||
        "@radix-ui/react-accordion": "^1.2.0",
 | 
			
		||||
        "@radix-ui/react-alert-dialog": "^1.1.1",
 | 
			
		||||
        "@radix-ui/react-avatar": "^1.1.0",
 | 
			
		||||
        "@radix-ui/react-checkbox": "^1.1.1",
 | 
			
		||||
        "@radix-ui/react-collapsible": "^1.1.0",
 | 
			
		||||
        "@radix-ui/react-context-menu": "^2.2.1",
 | 
			
		||||
        "@radix-ui/react-dialog": "^1.1.1",
 | 
			
		||||
        "@radix-ui/react-dropdown-menu": "^2.1.1",
 | 
			
		||||
        "@radix-ui/react-hover-card": "^1.1.1",
 | 
			
		||||
        "@radix-ui/react-icons": "^1.3.0",
 | 
			
		||||
        "@radix-ui/react-label": "^2.1.0",
 | 
			
		||||
        "@radix-ui/react-menubar": "^1.1.1",
 | 
			
		||||
        "@radix-ui/react-popover": "^1.1.1",
 | 
			
		||||
        "@radix-ui/react-scroll-area": "1.2.0",
 | 
			
		||||
        "@radix-ui/react-select": "^2.1.1",
 | 
			
		||||
        "@radix-ui/react-separator": "^1.1.0",
 | 
			
		||||
        "@radix-ui/react-slot": "^1.1.1",
 | 
			
		||||
        "@radix-ui/react-tabs": "^1.1.0",
 | 
			
		||||
        "@radix-ui/react-toast": "^1.2.1",
 | 
			
		||||
        "@radix-ui/react-toggle": "^1.1.0",
 | 
			
		||||
        "@radix-ui/react-toggle-group": "^1.1.0",
 | 
			
		||||
        "@radix-ui/react-tooltip": "^1.1.2",
 | 
			
		||||
        "@uidotdev/usehooks": "^2.4.1",
 | 
			
		||||
        "@xyflow/react": "^12.3.1",
 | 
			
		||||
        "ahooks": "^3.8.1",
 | 
			
		||||
        "ai": "^3.3.14",
 | 
			
		||||
        "class-variance-authority": "^0.7.0",
 | 
			
		||||
        "clsx": "^2.1.1",
 | 
			
		||||
        "cmdk": "^1.0.0",
 | 
			
		||||
        "dexie": "^4.0.8",
 | 
			
		||||
        "fast-deep-equal": "^3.1.3",
 | 
			
		||||
        "html-to-image": "^1.11.11",
 | 
			
		||||
        "i18next": "^23.14.0",
 | 
			
		||||
        "i18next-browser-languagedetector": "^8.0.0",
 | 
			
		||||
        "lucide-react": "^0.441.0",
 | 
			
		||||
        "monaco-editor": "^0.52.0",
 | 
			
		||||
        "nanoid": "^5.0.7",
 | 
			
		||||
        "node-sql-parser": "^5.3.2",
 | 
			
		||||
        "react": "^18.3.1",
 | 
			
		||||
        "react-dom": "^18.3.1",
 | 
			
		||||
        "react-helmet-async": "^2.0.5",
 | 
			
		||||
        "react-hotkeys-hook": "^4.5.0",
 | 
			
		||||
        "react-i18next": "^15.0.1",
 | 
			
		||||
        "react-resizable-panels": "^2.0.22",
 | 
			
		||||
        "react-responsive": "^10.0.0",
 | 
			
		||||
        "react-router-dom": "^7.1.1",
 | 
			
		||||
        "react-use": "^17.5.1",
 | 
			
		||||
        "tailwind-merge": "^2.4.0",
 | 
			
		||||
        "tailwindcss-animate": "^1.0.7",
 | 
			
		||||
        "timeago-react": "^3.0.6",
 | 
			
		||||
        "vaul": "^0.9.1",
 | 
			
		||||
        "zod": "^3.23.8"
 | 
			
		||||
    },
 | 
			
		||||
    "devDependencies": {
 | 
			
		||||
        "@eslint/compat": "^1.2.4",
 | 
			
		||||
        "@eslint/eslintrc": "^3.2.0",
 | 
			
		||||
        "@eslint/js": "^9.16.0",
 | 
			
		||||
        "@types/node": "^22.1.0",
 | 
			
		||||
        "@types/react": "^18.3.3",
 | 
			
		||||
        "@types/react-dom": "^18.3.0",
 | 
			
		||||
        "@typescript-eslint/eslint-plugin": "^8.18.0",
 | 
			
		||||
        "@typescript-eslint/parser": "^8.18.0",
 | 
			
		||||
        "@vitejs/plugin-react": "^4.3.1",
 | 
			
		||||
        "autoprefixer": "^10.4.20",
 | 
			
		||||
        "eslint": "^9.16.0",
 | 
			
		||||
        "eslint-config-prettier": "^9.1.0",
 | 
			
		||||
        "eslint-plugin-css-modules": "^2.12.0",
 | 
			
		||||
        "eslint-plugin-jsx-a11y": "^6.9.0",
 | 
			
		||||
        "eslint-plugin-prettier": "^5.2.1",
 | 
			
		||||
        "eslint-plugin-react": "^7.35.0",
 | 
			
		||||
        "eslint-plugin-react-hooks": "^5.1.0",
 | 
			
		||||
        "eslint-plugin-react-refresh": "^0.4.7",
 | 
			
		||||
        "eslint-plugin-tailwindcss": "^3.17.4",
 | 
			
		||||
        "globals": "^15.13.0",
 | 
			
		||||
        "husky": "^9.1.5",
 | 
			
		||||
        "postcss": "^8.4.40",
 | 
			
		||||
        "prettier": "^3.3.3",
 | 
			
		||||
        "rollup-plugin-visualizer": "^5.12.0",
 | 
			
		||||
        "tailwindcss": "^3.4.7",
 | 
			
		||||
        "typescript": "^5.2.2",
 | 
			
		||||
        "unplugin-inject-preload": "^3.0.0",
 | 
			
		||||
        "vite": "^5.3.4"
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										
											BIN
										
									
								
								public/buckle-animated.gif
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 404 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								public/buckle.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 28 KiB  | 
							
								
								
									
										0
									
								
								public/config.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										
											BIN
										
									
								
								src/assets/clickhouse_logo.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 12 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								src/assets/clickhouse_logo_2.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 1.3 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								src/assets/clickhouse_logo_dark.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 7.2 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								src/assets/cockroachdb_logo.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 8.0 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								src/assets/cockroachdb_logo_2.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 270 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								src/assets/cockroachdb_logo_dark.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 20 KiB  | 
| 
		 Before Width: | Height: | Size: 199 KiB After Width: | Height: | Size: 6.1 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								src/assets/empty_state_dark.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 6.1 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								src/assets/templates/attendize-db-dark.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 525 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								src/assets/templates/attendize-db.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 613 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								src/assets/templates/bookstack-db-dark.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 452 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								src/assets/templates/bookstack-db.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 578 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								src/assets/templates/bouncer-db-dark.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 323 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								src/assets/templates/bouncer-db.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 348 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								src/assets/templates/buddypress-dark.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 417 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								src/assets/templates/buddypress.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 496 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								src/assets/templates/cabot-db-dark.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 420 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								src/assets/templates/cabot-db.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 498 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								src/assets/templates/cachet-db-dark.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 447 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								src/assets/templates/cachet-db.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 486 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								src/assets/templates/canvas-db-dark.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 346 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								src/assets/templates/canvas-db.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 379 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								src/assets/templates/comfortable-mexican-sofa-db-dark.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 375 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								src/assets/templates/comfortable-mexican-sofa-db.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 409 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								src/assets/templates/deployer-db-dark.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 424 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								src/assets/templates/deployer-db.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 497 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								src/assets/templates/devise-db-dark.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 207 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								src/assets/templates/devise-db.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 231 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								src/assets/templates/django-axes-db-dark.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 250 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								src/assets/templates/django-axes-db.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 264 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								src/assets/templates/doorkeeper-db-dark.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 288 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								src/assets/templates/doorkeeper-db.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 319 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								src/assets/templates/feedbin-db-dark.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 498 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								src/assets/templates/feedbin-db.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 583 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								src/assets/templates/flarum-db-dark.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 412 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								src/assets/templates/flarum-db.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 499 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								src/assets/templates/flipper-db-dark.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 189 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								src/assets/templates/flipper-db.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 207 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								src/assets/templates/freescout-db-dark.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 441 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								src/assets/templates/freescout-db.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 502 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								src/assets/templates/hacker-news-db-dark.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 427 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								src/assets/templates/hacker-news-db.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 472 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								src/assets/templates/laravel-activitylog-db-dark.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 198 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								src/assets/templates/laravel-activitylog-db.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 217 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								src/assets/templates/lobsters-db-dark.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 403 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								src/assets/templates/lobsters-db.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 450 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								src/assets/templates/monica-db-dark.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 746 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								src/assets/templates/monica-db.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 846 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								src/assets/templates/octobox-db-dark.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 352 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								src/assets/templates/octobox-db.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 382 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								src/assets/templates/orchid-db-dark.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 303 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								src/assets/templates/orchid-db.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 340 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								src/assets/templates/pay-rails-db-dark.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 352 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								src/assets/templates/pay-rails-db.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 371 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								src/assets/templates/pixelfed-db-dark.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 593 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								src/assets/templates/pixelfed-db.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 687 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								src/assets/templates/polr-db-dark.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 246 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								src/assets/templates/polr-db.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 278 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								src/assets/templates/refinerycms-db-dark.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 414 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								src/assets/templates/refinerycms-db.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 434 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								src/assets/templates/reversion-db-dark.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 229 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								src/assets/templates/reversion-db.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 266 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								src/assets/templates/saas-pegasus-db-dark.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 474 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								src/assets/templates/saas-pegasus-db.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 500 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								src/assets/templates/screeenly-db-dark.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 251 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								src/assets/templates/screeenly-db.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 266 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								src/assets/templates/snipe-it-db-dark.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 383 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								src/assets/templates/snipe-it-db.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 428 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								src/assets/templates/staytus-db-dark.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 424 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								src/assets/templates/staytus-db.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 471 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								src/assets/templates/sylius-db-dark.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 673 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								src/assets/templates/sylius-db.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 804 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								src/assets/templates/taggit-db-dark.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 169 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								src/assets/templates/taggit-db.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 184 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								src/assets/templates/talk-db-dark.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 229 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								src/assets/templates/talk-db.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 253 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								src/assets/templates/ticketit-db-dark.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 337 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								src/assets/templates/ticketit-db.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 374 KiB  | 
@@ -3,6 +3,7 @@ import React, { lazy, Suspense, useCallback, useEffect } from 'react';
 | 
			
		||||
import { Spinner } from '../spinner/spinner';
 | 
			
		||||
import { useTheme } from '@/hooks/use-theme';
 | 
			
		||||
import { useMonaco } from '@monaco-editor/react';
 | 
			
		||||
import { useToast } from '@/components/toast/use-toast';
 | 
			
		||||
import { Button } from '../button/button';
 | 
			
		||||
import { Copy, CopyCheck } from 'lucide-react';
 | 
			
		||||
import { Tooltip, TooltipContent, TooltipTrigger } from '../tooltip/tooltip';
 | 
			
		||||
@@ -11,6 +12,14 @@ import { DarkTheme } from './themes/dark';
 | 
			
		||||
import { LightTheme } from './themes/light';
 | 
			
		||||
import './config.ts';
 | 
			
		||||
 | 
			
		||||
export const Editor = lazy(() =>
 | 
			
		||||
    import('./code-editor').then((module) => ({
 | 
			
		||||
        default: module.Editor,
 | 
			
		||||
    }))
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
type EditorType = typeof Editor;
 | 
			
		||||
 | 
			
		||||
export interface CodeSnippetProps {
 | 
			
		||||
    className?: string;
 | 
			
		||||
    code: string;
 | 
			
		||||
@@ -18,14 +27,9 @@ export interface CodeSnippetProps {
 | 
			
		||||
    loading?: boolean;
 | 
			
		||||
    autoScroll?: boolean;
 | 
			
		||||
    isComplete?: boolean;
 | 
			
		||||
    editorProps?: React.ComponentProps<EditorType>;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export const Editor = lazy(() =>
 | 
			
		||||
    import('./code-editor').then((module) => ({
 | 
			
		||||
        default: module.Editor,
 | 
			
		||||
    }))
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
export const CodeSnippet: React.FC<CodeSnippetProps> = React.memo(
 | 
			
		||||
    ({
 | 
			
		||||
        className,
 | 
			
		||||
@@ -34,10 +38,12 @@ export const CodeSnippet: React.FC<CodeSnippetProps> = React.memo(
 | 
			
		||||
        language = 'sql',
 | 
			
		||||
        autoScroll = false,
 | 
			
		||||
        isComplete = true,
 | 
			
		||||
        editorProps,
 | 
			
		||||
    }) => {
 | 
			
		||||
        const { t } = useTranslation();
 | 
			
		||||
        const monaco = useMonaco();
 | 
			
		||||
        const { effectiveTheme } = useTheme();
 | 
			
		||||
        const { toast } = useToast();
 | 
			
		||||
        const [isCopied, setIsCopied] = React.useState(false);
 | 
			
		||||
        const [tooltipOpen, setTooltipOpen] = React.useState(false);
 | 
			
		||||
 | 
			
		||||
@@ -66,10 +72,32 @@ export const CodeSnippet: React.FC<CodeSnippetProps> = React.memo(
 | 
			
		||||
            }
 | 
			
		||||
        }, [code, monaco, autoScroll]);
 | 
			
		||||
 | 
			
		||||
        const copyToClipboard = useCallback(() => {
 | 
			
		||||
            navigator.clipboard.writeText(code);
 | 
			
		||||
            setIsCopied(true);
 | 
			
		||||
        }, [code]);
 | 
			
		||||
        const copyToClipboard = useCallback(async () => {
 | 
			
		||||
            if (!navigator?.clipboard) {
 | 
			
		||||
                toast({
 | 
			
		||||
                    title: t('copy_to_clipboard_toast.unsupported.title'),
 | 
			
		||||
                    variant: 'destructive',
 | 
			
		||||
                    description: t(
 | 
			
		||||
                        'copy_to_clipboard_toast.unsupported.description'
 | 
			
		||||
                    ),
 | 
			
		||||
                });
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            try {
 | 
			
		||||
                await navigator.clipboard.writeText(code);
 | 
			
		||||
                setIsCopied(true);
 | 
			
		||||
            } catch {
 | 
			
		||||
                setIsCopied(false);
 | 
			
		||||
                toast({
 | 
			
		||||
                    title: t('copy_to_clipboard_toast.failed.title'),
 | 
			
		||||
                    variant: 'destructive',
 | 
			
		||||
                    description: t(
 | 
			
		||||
                        'copy_to_clipboard_toast.failed.description'
 | 
			
		||||
                    ),
 | 
			
		||||
                });
 | 
			
		||||
            }
 | 
			
		||||
        }, [code, t, toast]);
 | 
			
		||||
 | 
			
		||||
        return (
 | 
			
		||||
            <div
 | 
			
		||||
@@ -120,27 +148,32 @@ export const CodeSnippet: React.FC<CodeSnippetProps> = React.memo(
 | 
			
		||||
                            language={language}
 | 
			
		||||
                            loading={<Spinner />}
 | 
			
		||||
                            theme={effectiveTheme}
 | 
			
		||||
                            {...editorProps}
 | 
			
		||||
                            options={{
 | 
			
		||||
                                minimap: {
 | 
			
		||||
                                    enabled: false,
 | 
			
		||||
                                },
 | 
			
		||||
                                readOnly: true,
 | 
			
		||||
                                automaticLayout: true,
 | 
			
		||||
                                scrollbar: {
 | 
			
		||||
                                    vertical: 'hidden',
 | 
			
		||||
                                    horizontal: 'hidden',
 | 
			
		||||
                                    alwaysConsumeMouseWheel: false,
 | 
			
		||||
                                },
 | 
			
		||||
                                scrollBeyondLastLine: false,
 | 
			
		||||
                                renderValidationDecorations: 'off',
 | 
			
		||||
                                lineDecorationsWidth: 0,
 | 
			
		||||
                                overviewRulerBorder: false,
 | 
			
		||||
                                overviewRulerLanes: 0,
 | 
			
		||||
                                hideCursorInOverviewRuler: true,
 | 
			
		||||
                                contextmenu: false,
 | 
			
		||||
                                ...editorProps?.options,
 | 
			
		||||
                                guides: {
 | 
			
		||||
                                    indentation: false,
 | 
			
		||||
                                    ...editorProps?.options?.guides,
 | 
			
		||||
                                },
 | 
			
		||||
                                scrollbar: {
 | 
			
		||||
                                    vertical: 'hidden',
 | 
			
		||||
                                    horizontal: 'hidden',
 | 
			
		||||
                                    alwaysConsumeMouseWheel: false,
 | 
			
		||||
                                    ...editorProps?.options?.scrollbar,
 | 
			
		||||
                                },
 | 
			
		||||
                                minimap: {
 | 
			
		||||
                                    enabled: false,
 | 
			
		||||
                                    ...editorProps?.options?.minimap,
 | 
			
		||||
                                },
 | 
			
		||||
                                contextmenu: false,
 | 
			
		||||
                            }}
 | 
			
		||||
                        />
 | 
			
		||||
                        {!isComplete ? (
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										54
									
								
								src/components/code-snippet/languages/dbml-language.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,54 @@
 | 
			
		||||
import type { Monaco } from '@monaco-editor/react';
 | 
			
		||||
import { dataTypes } from '@/lib/data/data-types/data-types';
 | 
			
		||||
 | 
			
		||||
export const setupDBMLLanguage = (monaco: Monaco) => {
 | 
			
		||||
    monaco.languages.register({ id: 'dbml' });
 | 
			
		||||
 | 
			
		||||
    // Define themes for DBML
 | 
			
		||||
    monaco.editor.defineTheme('dbml-dark', {
 | 
			
		||||
        base: 'vs-dark',
 | 
			
		||||
        inherit: true,
 | 
			
		||||
        rules: [
 | 
			
		||||
            { token: 'keyword', foreground: '569CD6' }, // Table, Ref keywords
 | 
			
		||||
            { token: 'string', foreground: 'CE9178' }, // Strings
 | 
			
		||||
            { token: 'annotation', foreground: '9CDCFE' }, // [annotations]
 | 
			
		||||
            { token: 'delimiter', foreground: 'D4D4D4' }, // Braces {}
 | 
			
		||||
            { token: 'operator', foreground: 'D4D4D4' }, // Operators
 | 
			
		||||
            { token: 'datatype', foreground: '4EC9B0' }, // Data types
 | 
			
		||||
        ],
 | 
			
		||||
        colors: {},
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    monaco.editor.defineTheme('dbml-light', {
 | 
			
		||||
        base: 'vs',
 | 
			
		||||
        inherit: true,
 | 
			
		||||
        rules: [
 | 
			
		||||
            { token: 'keyword', foreground: '0000FF' }, // Table, Ref keywords
 | 
			
		||||
            { token: 'string', foreground: 'A31515' }, // Strings
 | 
			
		||||
            { token: 'annotation', foreground: '001080' }, // [annotations]
 | 
			
		||||
            { token: 'delimiter', foreground: '000000' }, // Braces {}
 | 
			
		||||
            { token: 'operator', foreground: '000000' }, // Operators
 | 
			
		||||
            { token: 'type', foreground: '267F99' }, // Data types
 | 
			
		||||
        ],
 | 
			
		||||
        colors: {},
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    const dataTypesNames = dataTypes.map((dt) => dt.name);
 | 
			
		||||
    const datatypePattern = dataTypesNames.join('|');
 | 
			
		||||
 | 
			
		||||
    monaco.languages.setMonarchTokensProvider('dbml', {
 | 
			
		||||
        keywords: ['Table', 'Ref', 'Indexes'],
 | 
			
		||||
        datatypes: dataTypesNames,
 | 
			
		||||
        tokenizer: {
 | 
			
		||||
            root: [
 | 
			
		||||
                [/\b(Table|Ref|Indexes)\b/, 'keyword'],
 | 
			
		||||
                [/\[.*?\]/, 'annotation'],
 | 
			
		||||
                [/".*?"/, 'string'],
 | 
			
		||||
                [/'.*?'/, 'string'],
 | 
			
		||||
                [/[{}]/, 'delimiter'],
 | 
			
		||||
                [/[<>]/, 'operator'],
 | 
			
		||||
                [new RegExp(`\\b(${datatypePattern})\\b`, 'i'), 'type'], // Added 'i' flag for case-insensitive matching
 | 
			
		||||
            ],
 | 
			
		||||
        },
 | 
			
		||||
    });
 | 
			
		||||
};
 | 
			
		||||
@@ -1,6 +1,6 @@
 | 
			
		||||
import React from 'react';
 | 
			
		||||
import type { Diagram } from '@/lib/domain/diagram';
 | 
			
		||||
import { Tooltip, TooltipContent, TooltipTrigger } from '../tooltip/tooltip';
 | 
			
		||||
import type { DatabaseEdition } from '@/lib/domain/database-edition';
 | 
			
		||||
import {
 | 
			
		||||
    databaseEditionToImageMap,
 | 
			
		||||
    databaseEditionToLabelMap,
 | 
			
		||||
@@ -9,39 +9,44 @@ import {
 | 
			
		||||
    databaseSecondaryLogoMap,
 | 
			
		||||
    databaseTypeToLabelMap,
 | 
			
		||||
} from '@/lib/databases';
 | 
			
		||||
import type { DatabaseType } from '@/lib/domain/database-type';
 | 
			
		||||
import { cn } from '@/lib/utils';
 | 
			
		||||
 | 
			
		||||
export interface DiagramIconProps {
 | 
			
		||||
    diagram: Diagram;
 | 
			
		||||
export interface DiagramIconProps
 | 
			
		||||
    extends React.ComponentPropsWithoutRef<'div'> {
 | 
			
		||||
    databaseType: DatabaseType;
 | 
			
		||||
    databaseEdition?: DatabaseEdition;
 | 
			
		||||
    imgClassName?: string;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export const DiagramIcon = React.forwardRef<
 | 
			
		||||
    React.ElementRef<typeof TooltipTrigger>,
 | 
			
		||||
    DiagramIconProps
 | 
			
		||||
>(({ diagram }, ref) =>
 | 
			
		||||
    diagram.databaseEdition ? (
 | 
			
		||||
>(({ databaseType, databaseEdition, className, imgClassName }, ref) =>
 | 
			
		||||
    databaseEdition ? (
 | 
			
		||||
        <Tooltip>
 | 
			
		||||
            <TooltipTrigger className="mr-1" ref={ref}>
 | 
			
		||||
            <TooltipTrigger className={cn('mr-1', className)} ref={ref} asChild>
 | 
			
		||||
                <img
 | 
			
		||||
                    src={databaseEditionToImageMap[diagram.databaseEdition]}
 | 
			
		||||
                    className="h-5 max-w-fit rounded-full"
 | 
			
		||||
                    src={databaseEditionToImageMap[databaseEdition]}
 | 
			
		||||
                    className={cn('h-5 max-w-fit rounded-full', imgClassName)}
 | 
			
		||||
                    alt="database"
 | 
			
		||||
                />
 | 
			
		||||
            </TooltipTrigger>
 | 
			
		||||
            <TooltipContent>
 | 
			
		||||
                {databaseEditionToLabelMap[diagram.databaseEdition]}
 | 
			
		||||
                {databaseEditionToLabelMap[databaseEdition]}
 | 
			
		||||
            </TooltipContent>
 | 
			
		||||
        </Tooltip>
 | 
			
		||||
    ) : (
 | 
			
		||||
        <Tooltip>
 | 
			
		||||
            <TooltipTrigger className="mr-2" ref={ref}>
 | 
			
		||||
            <TooltipTrigger className={cn('mr-2', className)} ref={ref} asChild>
 | 
			
		||||
                <img
 | 
			
		||||
                    src={databaseSecondaryLogoMap[diagram.databaseType]}
 | 
			
		||||
                    className="h-5 max-w-fit"
 | 
			
		||||
                    src={databaseSecondaryLogoMap[databaseType]}
 | 
			
		||||
                    className={cn('h-5 max-w-fit', imgClassName)}
 | 
			
		||||
                    alt="database"
 | 
			
		||||
                />
 | 
			
		||||
            </TooltipTrigger>
 | 
			
		||||
            <TooltipContent>
 | 
			
		||||
                {databaseTypeToLabelMap[diagram.databaseType]}
 | 
			
		||||
                {databaseTypeToLabelMap[databaseType]}
 | 
			
		||||
            </TooltipContent>
 | 
			
		||||
        </Tooltip>
 | 
			
		||||
    )
 | 
			
		||||
 
 | 
			
		||||
@@ -3,6 +3,7 @@ import * as DialogPrimitive from '@radix-ui/react-dialog';
 | 
			
		||||
import { Cross2Icon } from '@radix-ui/react-icons';
 | 
			
		||||
 | 
			
		||||
import { cn } from '@/lib/utils';
 | 
			
		||||
import { ScrollArea } from '../scroll-area/scroll-area';
 | 
			
		||||
 | 
			
		||||
const Dialog = DialogPrimitive.Root;
 | 
			
		||||
 | 
			
		||||
@@ -110,6 +111,21 @@ const DialogDescription = React.forwardRef<
 | 
			
		||||
));
 | 
			
		||||
DialogDescription.displayName = DialogPrimitive.Description.displayName;
 | 
			
		||||
 | 
			
		||||
const DialogInternalContent = React.forwardRef<
 | 
			
		||||
    React.ElementRef<typeof ScrollArea>,
 | 
			
		||||
    React.ComponentPropsWithoutRef<typeof ScrollArea>
 | 
			
		||||
>(({ className, ...props }, ref) => (
 | 
			
		||||
    <ScrollArea
 | 
			
		||||
        ref={ref}
 | 
			
		||||
        className={cn(
 | 
			
		||||
            'flex flex-1 max-h-screen flex-col overflow-y-auto',
 | 
			
		||||
            className
 | 
			
		||||
        )}
 | 
			
		||||
        {...props}
 | 
			
		||||
    />
 | 
			
		||||
));
 | 
			
		||||
DialogInternalContent.displayName = 'DialogInternalContent';
 | 
			
		||||
 | 
			
		||||
export {
 | 
			
		||||
    Dialog,
 | 
			
		||||
    DialogPortal,
 | 
			
		||||
@@ -121,4 +137,5 @@ export {
 | 
			
		||||
    DialogFooter,
 | 
			
		||||
    DialogTitle,
 | 
			
		||||
    DialogDescription,
 | 
			
		||||
    DialogInternalContent,
 | 
			
		||||
};
 | 
			
		||||
 
 | 
			
		||||
@@ -1,30 +1,66 @@
 | 
			
		||||
import React, { forwardRef } from 'react';
 | 
			
		||||
import EmptyStateImage from '@/assets/empty_state.png';
 | 
			
		||||
import EmptyStateImageDark from '@/assets/empty_state_dark.png';
 | 
			
		||||
import { Label } from '@/components/label/label';
 | 
			
		||||
import { cn } from '@/lib/utils';
 | 
			
		||||
import { useTheme } from '@/hooks/use-theme';
 | 
			
		||||
 | 
			
		||||
export interface EmptyStateProps {
 | 
			
		||||
    title: string;
 | 
			
		||||
    description: string;
 | 
			
		||||
    imageClassName?: string;
 | 
			
		||||
    titleClassName?: string;
 | 
			
		||||
    descriptionClassName?: string;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export const EmptyState = forwardRef<
 | 
			
		||||
    HTMLDivElement,
 | 
			
		||||
    React.HTMLAttributes<HTMLDivElement> & EmptyStateProps
 | 
			
		||||
>(({ title, description, className }, ref) => (
 | 
			
		||||
    <div
 | 
			
		||||
        ref={ref}
 | 
			
		||||
        className={cn(
 | 
			
		||||
            'flex flex-1 flex-col items-center justify-center space-y-1',
 | 
			
		||||
            className
 | 
			
		||||
        )}
 | 
			
		||||
    >
 | 
			
		||||
        <img src={EmptyStateImage} alt="Empty state" className="w-32" />
 | 
			
		||||
        <Label className="text-base">{title}</Label>
 | 
			
		||||
        <Label className="text-sm font-normal text-muted-foreground">
 | 
			
		||||
            {description}
 | 
			
		||||
        </Label>
 | 
			
		||||
    </div>
 | 
			
		||||
));
 | 
			
		||||
>(
 | 
			
		||||
    (
 | 
			
		||||
        {
 | 
			
		||||
            title,
 | 
			
		||||
            description,
 | 
			
		||||
            className,
 | 
			
		||||
            titleClassName,
 | 
			
		||||
            descriptionClassName,
 | 
			
		||||
            imageClassName,
 | 
			
		||||
        },
 | 
			
		||||
        ref
 | 
			
		||||
    ) => {
 | 
			
		||||
        const { effectiveTheme } = useTheme();
 | 
			
		||||
 | 
			
		||||
        return (
 | 
			
		||||
            <div
 | 
			
		||||
                ref={ref}
 | 
			
		||||
                className={cn(
 | 
			
		||||
                    'flex flex-1 flex-col items-center justify-center space-y-1',
 | 
			
		||||
                    className
 | 
			
		||||
                )}
 | 
			
		||||
            >
 | 
			
		||||
                <img
 | 
			
		||||
                    src={
 | 
			
		||||
                        effectiveTheme === 'dark'
 | 
			
		||||
                            ? EmptyStateImageDark
 | 
			
		||||
                            : EmptyStateImage
 | 
			
		||||
                    }
 | 
			
		||||
                    alt="Empty state"
 | 
			
		||||
                    className={cn('mb-2 w-20', imageClassName)}
 | 
			
		||||
                />
 | 
			
		||||
                <Label className={cn('text-base', titleClassName)}>
 | 
			
		||||
                    {title}
 | 
			
		||||
                </Label>
 | 
			
		||||
                <Label
 | 
			
		||||
                    className={cn(
 | 
			
		||||
                        'text-sm font-normal text-muted-foreground',
 | 
			
		||||
                        descriptionClassName
 | 
			
		||||
                    )}
 | 
			
		||||
                >
 | 
			
		||||
                    {description}
 | 
			
		||||
                </Label>
 | 
			
		||||
            </div>
 | 
			
		||||
        );
 | 
			
		||||
    }
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
EmptyState.displayName = 'EmptyState';
 | 
			
		||||
 
 | 
			
		||||
@@ -12,7 +12,7 @@ const ScrollArea = React.forwardRef<
 | 
			
		||||
        className={cn('relative overflow-hidden', className)}
 | 
			
		||||
        {...props}
 | 
			
		||||
    >
 | 
			
		||||
        <ScrollAreaPrimitive.Viewport className="scrollable-flex size-full rounded-[inherit]">
 | 
			
		||||
        <ScrollAreaPrimitive.Viewport className="size-full rounded-[inherit]">
 | 
			
		||||
            {children}
 | 
			
		||||
        </ScrollAreaPrimitive.Viewport>
 | 
			
		||||
        <ScrollBar />
 | 
			
		||||
@@ -40,7 +40,7 @@ const ScrollBar = React.forwardRef<
 | 
			
		||||
        )}
 | 
			
		||||
        {...props}
 | 
			
		||||
    >
 | 
			
		||||
        <ScrollAreaPrimitive.ScrollAreaThumb className="relative flex-1 rounded-full bg-border" />
 | 
			
		||||
        <ScrollAreaPrimitive.ScrollAreaThumb className="relative z-20 flex-1 rounded-full bg-border" />
 | 
			
		||||
    </ScrollAreaPrimitive.ScrollAreaScrollbar>
 | 
			
		||||
));
 | 
			
		||||
ScrollBar.displayName = ScrollAreaPrimitive.ScrollAreaScrollbar.displayName;
 | 
			
		||||
 
 | 
			
		||||
@@ -26,7 +26,7 @@ export interface SelectBoxOption {
 | 
			
		||||
    description?: string;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
interface SelectBoxProps {
 | 
			
		||||
export interface SelectBoxProps {
 | 
			
		||||
    options: SelectBoxOption[];
 | 
			
		||||
    value?: string[] | string;
 | 
			
		||||
    onChange?: (values: string[] | string) => void;
 | 
			
		||||
 
 | 
			
		||||
@@ -14,6 +14,7 @@ type ToasterToast = ToastProps & {
 | 
			
		||||
    layout?: 'row' | 'column';
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
 | 
			
		||||
const actionTypes = {
 | 
			
		||||
    ADD_TOAST: 'ADD_TOAST',
 | 
			
		||||
    UPDATE_TOAST: 'UPDATE_TOAST',
 | 
			
		||||
 
 | 
			
		||||