@quantumwake/terminal-ux-dashboard-components 0.1.7 → 0.1.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +301 -12
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +302 -13
- package/dist/index.js.map +1 -1
- package/package.json +2 -1
package/dist/index.cjs
CHANGED
|
@@ -12,6 +12,7 @@ require('react-pivottable/pivottable.css');
|
|
|
12
12
|
var lucideReact = require('lucide-react');
|
|
13
13
|
var CodeMirror = require('@uiw/react-codemirror');
|
|
14
14
|
var langSql = require('@codemirror/lang-sql');
|
|
15
|
+
var autocomplete = require('@codemirror/autocomplete');
|
|
15
16
|
|
|
16
17
|
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
17
18
|
|
|
@@ -645,6 +646,280 @@ function ChartStyleControls({ style, onChange }) {
|
|
|
645
646
|
] })
|
|
646
647
|
] });
|
|
647
648
|
}
|
|
649
|
+
var AGGREGATES = [
|
|
650
|
+
"count",
|
|
651
|
+
"count_if",
|
|
652
|
+
"sum",
|
|
653
|
+
"avg",
|
|
654
|
+
"min",
|
|
655
|
+
"max",
|
|
656
|
+
"median",
|
|
657
|
+
"mode",
|
|
658
|
+
"stddev",
|
|
659
|
+
"stddev_pop",
|
|
660
|
+
"stddev_samp",
|
|
661
|
+
"var_pop",
|
|
662
|
+
"var_samp",
|
|
663
|
+
"variance",
|
|
664
|
+
"quantile",
|
|
665
|
+
"quantile_cont",
|
|
666
|
+
"quantile_disc",
|
|
667
|
+
"approx_count_distinct",
|
|
668
|
+
"approx_quantile",
|
|
669
|
+
"arg_max",
|
|
670
|
+
"arg_min",
|
|
671
|
+
"first",
|
|
672
|
+
"last",
|
|
673
|
+
"product",
|
|
674
|
+
"bool_and",
|
|
675
|
+
"bool_or",
|
|
676
|
+
"bit_and",
|
|
677
|
+
"bit_or",
|
|
678
|
+
"bit_xor",
|
|
679
|
+
"string_agg",
|
|
680
|
+
"list",
|
|
681
|
+
"array_agg",
|
|
682
|
+
"histogram",
|
|
683
|
+
"corr",
|
|
684
|
+
"covar_pop",
|
|
685
|
+
"covar_samp",
|
|
686
|
+
"kurtosis",
|
|
687
|
+
"skewness",
|
|
688
|
+
"entropy",
|
|
689
|
+
"row_number",
|
|
690
|
+
"rank",
|
|
691
|
+
"dense_rank",
|
|
692
|
+
"percent_rank",
|
|
693
|
+
"cume_dist",
|
|
694
|
+
"ntile",
|
|
695
|
+
"lag",
|
|
696
|
+
"lead",
|
|
697
|
+
"first_value",
|
|
698
|
+
"last_value",
|
|
699
|
+
"nth_value"
|
|
700
|
+
];
|
|
701
|
+
var SCALARS = [
|
|
702
|
+
// string
|
|
703
|
+
"length",
|
|
704
|
+
"len",
|
|
705
|
+
"lower",
|
|
706
|
+
"upper",
|
|
707
|
+
"trim",
|
|
708
|
+
"ltrim",
|
|
709
|
+
"rtrim",
|
|
710
|
+
"substring",
|
|
711
|
+
"substr",
|
|
712
|
+
"concat",
|
|
713
|
+
"concat_ws",
|
|
714
|
+
"replace",
|
|
715
|
+
"reverse",
|
|
716
|
+
"repeat",
|
|
717
|
+
"lpad",
|
|
718
|
+
"rpad",
|
|
719
|
+
"left",
|
|
720
|
+
"right",
|
|
721
|
+
"contains",
|
|
722
|
+
"starts_with",
|
|
723
|
+
"ends_with",
|
|
724
|
+
"position",
|
|
725
|
+
"split_part",
|
|
726
|
+
"string_split",
|
|
727
|
+
"regexp_matches",
|
|
728
|
+
"regexp_replace",
|
|
729
|
+
"regexp_extract",
|
|
730
|
+
"regexp_full_match",
|
|
731
|
+
"regexp_split_to_array",
|
|
732
|
+
"format",
|
|
733
|
+
"printf",
|
|
734
|
+
"md5",
|
|
735
|
+
"sha256",
|
|
736
|
+
"levenshtein",
|
|
737
|
+
"jaccard",
|
|
738
|
+
"ascii",
|
|
739
|
+
"chr",
|
|
740
|
+
// date / time
|
|
741
|
+
"now",
|
|
742
|
+
"current_date",
|
|
743
|
+
"current_timestamp",
|
|
744
|
+
"today",
|
|
745
|
+
"date_trunc",
|
|
746
|
+
"date_part",
|
|
747
|
+
"date_diff",
|
|
748
|
+
"date_add",
|
|
749
|
+
"date_sub",
|
|
750
|
+
"age",
|
|
751
|
+
"strftime",
|
|
752
|
+
"strptime",
|
|
753
|
+
"epoch",
|
|
754
|
+
"epoch_ms",
|
|
755
|
+
"extract",
|
|
756
|
+
"make_date",
|
|
757
|
+
"make_time",
|
|
758
|
+
"make_timestamp",
|
|
759
|
+
"last_day",
|
|
760
|
+
"dayname",
|
|
761
|
+
"monthname",
|
|
762
|
+
"year",
|
|
763
|
+
"month",
|
|
764
|
+
"day",
|
|
765
|
+
"hour",
|
|
766
|
+
"minute",
|
|
767
|
+
"second",
|
|
768
|
+
"dayofweek",
|
|
769
|
+
"dayofyear",
|
|
770
|
+
"week",
|
|
771
|
+
"quarter",
|
|
772
|
+
"time_bucket",
|
|
773
|
+
// math
|
|
774
|
+
"abs",
|
|
775
|
+
"ceil",
|
|
776
|
+
"ceiling",
|
|
777
|
+
"floor",
|
|
778
|
+
"round",
|
|
779
|
+
"trunc",
|
|
780
|
+
"sign",
|
|
781
|
+
"mod",
|
|
782
|
+
"pow",
|
|
783
|
+
"power",
|
|
784
|
+
"sqrt",
|
|
785
|
+
"cbrt",
|
|
786
|
+
"exp",
|
|
787
|
+
"ln",
|
|
788
|
+
"log",
|
|
789
|
+
"log2",
|
|
790
|
+
"log10",
|
|
791
|
+
"greatest",
|
|
792
|
+
"least",
|
|
793
|
+
"gcd",
|
|
794
|
+
"lcm",
|
|
795
|
+
"factorial",
|
|
796
|
+
"random",
|
|
797
|
+
"pi",
|
|
798
|
+
"degrees",
|
|
799
|
+
"radians",
|
|
800
|
+
"sin",
|
|
801
|
+
"cos",
|
|
802
|
+
"tan",
|
|
803
|
+
"asin",
|
|
804
|
+
"acos",
|
|
805
|
+
"atan",
|
|
806
|
+
"atan2",
|
|
807
|
+
// conditional / null / cast
|
|
808
|
+
"coalesce",
|
|
809
|
+
"ifnull",
|
|
810
|
+
"nullif",
|
|
811
|
+
"nvl",
|
|
812
|
+
"if",
|
|
813
|
+
"try_cast",
|
|
814
|
+
"cast",
|
|
815
|
+
"typeof",
|
|
816
|
+
// list / struct / map / json
|
|
817
|
+
"list_value",
|
|
818
|
+
"list_aggregate",
|
|
819
|
+
"list_distinct",
|
|
820
|
+
"list_sort",
|
|
821
|
+
"list_reverse",
|
|
822
|
+
"list_slice",
|
|
823
|
+
"list_concat",
|
|
824
|
+
"list_contains",
|
|
825
|
+
"list_position",
|
|
826
|
+
"list_extract",
|
|
827
|
+
"list_transform",
|
|
828
|
+
"list_filter",
|
|
829
|
+
"unnest",
|
|
830
|
+
"array_length",
|
|
831
|
+
"array_to_string",
|
|
832
|
+
"struct_pack",
|
|
833
|
+
"struct_extract",
|
|
834
|
+
"map",
|
|
835
|
+
"map_keys",
|
|
836
|
+
"map_values",
|
|
837
|
+
"json_extract",
|
|
838
|
+
"json_extract_string",
|
|
839
|
+
"to_json",
|
|
840
|
+
"from_json",
|
|
841
|
+
"json_array_length",
|
|
842
|
+
"json_keys",
|
|
843
|
+
"generate_series",
|
|
844
|
+
"range"
|
|
845
|
+
];
|
|
846
|
+
var TYPES = [
|
|
847
|
+
"BOOLEAN",
|
|
848
|
+
"TINYINT",
|
|
849
|
+
"SMALLINT",
|
|
850
|
+
"INTEGER",
|
|
851
|
+
"BIGINT",
|
|
852
|
+
"HUGEINT",
|
|
853
|
+
"UTINYINT",
|
|
854
|
+
"USMALLINT",
|
|
855
|
+
"UINTEGER",
|
|
856
|
+
"UBIGINT",
|
|
857
|
+
"FLOAT",
|
|
858
|
+
"REAL",
|
|
859
|
+
"DOUBLE",
|
|
860
|
+
"DECIMAL",
|
|
861
|
+
"NUMERIC",
|
|
862
|
+
"VARCHAR",
|
|
863
|
+
"CHAR",
|
|
864
|
+
"TEXT",
|
|
865
|
+
"BLOB",
|
|
866
|
+
"BIT",
|
|
867
|
+
"DATE",
|
|
868
|
+
"TIME",
|
|
869
|
+
"TIMESTAMP",
|
|
870
|
+
"TIMESTAMPTZ",
|
|
871
|
+
"INTERVAL",
|
|
872
|
+
"UUID",
|
|
873
|
+
"JSON",
|
|
874
|
+
"LIST",
|
|
875
|
+
"ARRAY",
|
|
876
|
+
"STRUCT",
|
|
877
|
+
"MAP",
|
|
878
|
+
"UNION",
|
|
879
|
+
"ENUM"
|
|
880
|
+
];
|
|
881
|
+
var EXTRA_KEYWORDS = [
|
|
882
|
+
"QUALIFY",
|
|
883
|
+
"EXCLUDE",
|
|
884
|
+
"PIVOT",
|
|
885
|
+
"UNPIVOT",
|
|
886
|
+
"ASOF",
|
|
887
|
+
"POSITIONAL",
|
|
888
|
+
"SEMI",
|
|
889
|
+
"ANTI",
|
|
890
|
+
"SUMMARIZE",
|
|
891
|
+
"DISTINCT ON",
|
|
892
|
+
"GROUP BY ALL",
|
|
893
|
+
"ORDER BY ALL",
|
|
894
|
+
"USING SAMPLE"
|
|
895
|
+
];
|
|
896
|
+
function opts(labels, type, boost = 0) {
|
|
897
|
+
return labels.map((label) => ({ label, type, boost }));
|
|
898
|
+
}
|
|
899
|
+
var SNIPPETS = [
|
|
900
|
+
autocomplete.snippetCompletion("SELECT ${col}, count(*) AS n\nFROM data\nGROUP BY ${col}\nORDER BY n DESC", {
|
|
901
|
+
label: "group by count",
|
|
902
|
+
type: "snippet",
|
|
903
|
+
detail: "aggregate by column"
|
|
904
|
+
}),
|
|
905
|
+
autocomplete.snippetCompletion("SELECT *\nFROM data\nORDER BY ${col} DESC\nLIMIT 10", {
|
|
906
|
+
label: "top N",
|
|
907
|
+
type: "snippet",
|
|
908
|
+
detail: "order + limit"
|
|
909
|
+
}),
|
|
910
|
+
autocomplete.snippetCompletion("SELECT DISTINCT ${col}\nFROM data", {
|
|
911
|
+
label: "select distinct",
|
|
912
|
+
type: "snippet"
|
|
913
|
+
})
|
|
914
|
+
];
|
|
915
|
+
var duckdbCompletionSource = autocomplete.completeFromList([
|
|
916
|
+
...opts(AGGREGATES, "function", 1),
|
|
917
|
+
// boost aggregates slightly — common in analysis
|
|
918
|
+
...opts(SCALARS, "function"),
|
|
919
|
+
...opts(TYPES, "type"),
|
|
920
|
+
...opts(EXTRA_KEYWORDS, "keyword"),
|
|
921
|
+
...SNIPPETS
|
|
922
|
+
]);
|
|
648
923
|
var DEFAULT_SQL = "SELECT *\nFROM data\nLIMIT 100";
|
|
649
924
|
var renderCell = (v) => {
|
|
650
925
|
if (v == null) return "";
|
|
@@ -684,18 +959,32 @@ function SqlConsole({ columns = [], stateId, defaultColumnsOpen = false, default
|
|
|
684
959
|
void run();
|
|
685
960
|
};
|
|
686
961
|
const schemaKey = columns.map((c) => c.name).join(",");
|
|
687
|
-
const extensions = react.useMemo(
|
|
688
|
-
|
|
689
|
-
|
|
962
|
+
const extensions = react.useMemo(() => {
|
|
963
|
+
const sqlConfig = {
|
|
964
|
+
dialect: langSql.PostgreSQL,
|
|
965
|
+
schema: { data: columns.map((c) => c.name) },
|
|
966
|
+
defaultTable: "data",
|
|
967
|
+
upperCaseKeywords: true
|
|
968
|
+
};
|
|
969
|
+
return [
|
|
970
|
+
langSql.sql(sqlConfig),
|
|
971
|
+
autocomplete.autocompletion({
|
|
972
|
+
override: [
|
|
973
|
+
langSql.schemaCompletionSource(sqlConfig),
|
|
974
|
+
langSql.keywordCompletionSource(langSql.PostgreSQL, true),
|
|
975
|
+
duckdbCompletionSource
|
|
976
|
+
]
|
|
977
|
+
}),
|
|
690
978
|
CodeMirror.EditorView.lineWrapping,
|
|
691
|
-
CodeMirror.Prec.highest(CodeMirror.keymap.of([
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
979
|
+
CodeMirror.Prec.highest(CodeMirror.keymap.of([
|
|
980
|
+
{ key: "Mod-Enter", run: () => {
|
|
981
|
+
runRef.current();
|
|
982
|
+
return true;
|
|
983
|
+
} },
|
|
984
|
+
{ key: "Tab", run: autocomplete.acceptCompletion }
|
|
985
|
+
]))
|
|
986
|
+
];
|
|
987
|
+
}, [schemaKey]);
|
|
699
988
|
const resultColumns = result?.columns || [];
|
|
700
989
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col h-full", children: [
|
|
701
990
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: `border-b ${theme.border} bg-midnight-elevated p-3 shrink-0`, children: [
|
|
@@ -725,7 +1014,7 @@ function SqlConsole({ columns = [], stateId, defaultColumnsOpen = false, default
|
|
|
725
1014
|
onChange: setSql,
|
|
726
1015
|
extensions,
|
|
727
1016
|
theme: "dark",
|
|
728
|
-
basicSetup: { lineNumbers: false, foldGutter: false, highlightActiveLine: false },
|
|
1017
|
+
basicSetup: { lineNumbers: false, foldGutter: false, highlightActiveLine: false, autocompletion: false },
|
|
729
1018
|
height: "120px",
|
|
730
1019
|
placeholder: "SELECT ... FROM data",
|
|
731
1020
|
className: "border border-midnight-border text-sm overflow-hidden focus-within:border-midnight-accent"
|