@growthub/cli 0.9.10 → 0.9.12
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/README.md +1 -1
- package/assets/worker-kits/creative-strategist-v1/kit.json +5 -2
- package/assets/worker-kits/growthub-agency-portal-starter-v1/kit.json +4 -1
- package/assets/worker-kits/growthub-ai-website-cloner-v1/kit.json +6 -3
- package/assets/worker-kits/growthub-creative-video-pipeline-v1/kit.json +4 -1
- package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/README.md +4 -4
- package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/app/api/workspace/integration-entities/route.js +50 -0
- package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/app/api/workspace/route.js +1 -1
- package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/app/data-model/page.jsx +389 -0
- package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/app/globals.css +362 -15
- package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/app/page.jsx +5 -2
- package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/app/settings/integrations/page.jsx +5 -5
- package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/app/workspace-builder.jsx +625 -56
- package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/lib/adapters/integrations/growthub-connection-normalizer.js +12 -16
- package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/lib/adapters/integrations/index.js +61 -11
- package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/lib/domain/integrations.js +31 -1
- package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/lib/workspace-config.js +3 -1
- package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/lib/workspace-data-model.js +433 -0
- package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/lib/workspace-schema.js +112 -14
- package/assets/worker-kits/growthub-custom-workspace-starter-v1/kit.json +5 -2
- package/assets/worker-kits/growthub-email-marketing-v1/kit.json +5 -2
- package/assets/worker-kits/growthub-geo-seo-v1/kit.json +5 -2
- package/assets/worker-kits/growthub-hyperframes-studio-v1/kit.json +5 -2
- package/assets/worker-kits/growthub-marketing-skills-v1/kit.json +6 -3
- package/assets/worker-kits/growthub-open-higgsfield-studio-v1/kit.json +5 -2
- package/assets/worker-kits/growthub-open-montage-studio-v1/kit.json +6 -3
- package/assets/worker-kits/growthub-postiz-social-v1/kit.json +5 -2
- package/assets/worker-kits/growthub-twenty-crm-v1/kit.json +6 -3
- package/assets/worker-kits/growthub-video-use-studio-v1/kit.json +5 -2
- package/assets/worker-kits/growthub-zernio-social-v1/kit.json +5 -2
- package/dist/index.js +1750 -433
- package/package.json +1 -1
package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/app/globals.css
CHANGED
|
@@ -991,6 +991,22 @@ code { font-family: ui-monospace, SFMono-Regular, Menlo, monospace; font-size: 0
|
|
|
991
991
|
text-overflow: ellipsis;
|
|
992
992
|
white-space: nowrap;
|
|
993
993
|
}
|
|
994
|
+
.workspace-widget-source-chip {
|
|
995
|
+
max-width: 150px;
|
|
996
|
+
min-width: 0;
|
|
997
|
+
flex: 0 1 auto;
|
|
998
|
+
overflow: hidden;
|
|
999
|
+
border: 1px solid #d1d5db;
|
|
1000
|
+
border-radius: 999px;
|
|
1001
|
+
background: #fff;
|
|
1002
|
+
color: #374151;
|
|
1003
|
+
padding: 2px 8px;
|
|
1004
|
+
font-size: 11px;
|
|
1005
|
+
font-weight: 600;
|
|
1006
|
+
line-height: 16px;
|
|
1007
|
+
text-overflow: ellipsis;
|
|
1008
|
+
white-space: nowrap;
|
|
1009
|
+
}
|
|
994
1010
|
.workspace-widget-preview-title button {
|
|
995
1011
|
width: 22px;
|
|
996
1012
|
height: 22px;
|
|
@@ -1057,11 +1073,14 @@ code { font-family: ui-monospace, SFMono-Regular, Menlo, monospace; font-size: 0
|
|
|
1057
1073
|
.workspace-chart-preview span {
|
|
1058
1074
|
flex: 1;
|
|
1059
1075
|
border-radius: 5px 5px 0 0;
|
|
1060
|
-
background: #d9e4ff;
|
|
1076
|
+
background: var(--chart-accent, #d9e4ff);
|
|
1061
1077
|
}
|
|
1062
1078
|
.workspace-widget-panel {
|
|
1063
1079
|
border-left: 1px solid #e8e8e8;
|
|
1064
1080
|
padding: 0 12px 16px;
|
|
1081
|
+
max-height: 100vh;
|
|
1082
|
+
overflow-y: auto;
|
|
1083
|
+
overscroll-behavior: contain;
|
|
1065
1084
|
}
|
|
1066
1085
|
.workspace-panel-title {
|
|
1067
1086
|
height: 48px;
|
|
@@ -1785,32 +1804,41 @@ code { font-family: ui-monospace, SFMono-Regular, Menlo, monospace; font-size: 0
|
|
|
1785
1804
|
}
|
|
1786
1805
|
|
|
1787
1806
|
/* Settings row buttons (replace bare div on the root inspector list) */
|
|
1807
|
+
.workspace-settings-row,
|
|
1788
1808
|
.workspace-settings-list .workspace-settings-row {
|
|
1789
1809
|
width: 100%;
|
|
1790
1810
|
display: flex;
|
|
1791
1811
|
align-items: center;
|
|
1792
1812
|
justify-content: space-between;
|
|
1793
|
-
|
|
1794
|
-
|
|
1795
|
-
border
|
|
1796
|
-
|
|
1813
|
+
gap: 10px;
|
|
1814
|
+
min-height: 38px;
|
|
1815
|
+
border: 1px solid #e8eef8;
|
|
1816
|
+
border-radius: 7px;
|
|
1817
|
+
background: #fff;
|
|
1797
1818
|
color: #666;
|
|
1798
1819
|
font: inherit;
|
|
1799
1820
|
font-size: 13px;
|
|
1800
|
-
padding:
|
|
1821
|
+
padding: 8px 10px;
|
|
1801
1822
|
text-align: left;
|
|
1802
1823
|
cursor: pointer;
|
|
1824
|
+
box-shadow: 0 2px 8px rgba(15, 23, 42, 0.05);
|
|
1803
1825
|
}
|
|
1826
|
+
.workspace-settings-row:hover:not([disabled]),
|
|
1804
1827
|
.workspace-settings-list .workspace-settings-row:hover:not([disabled]) {
|
|
1805
|
-
|
|
1828
|
+
border-color: #d6e4ff;
|
|
1829
|
+
background: #fff;
|
|
1806
1830
|
}
|
|
1831
|
+
.workspace-settings-row[disabled],
|
|
1807
1832
|
.workspace-settings-list .workspace-settings-row[disabled] {
|
|
1808
1833
|
cursor: default;
|
|
1809
1834
|
color: #888;
|
|
1810
1835
|
}
|
|
1836
|
+
.workspace-settings-row code,
|
|
1811
1837
|
.workspace-settings-list .workspace-settings-row code {
|
|
1812
1838
|
color: #888;
|
|
1813
1839
|
background: transparent;
|
|
1840
|
+
text-align: right;
|
|
1841
|
+
white-space: normal;
|
|
1814
1842
|
}
|
|
1815
1843
|
|
|
1816
1844
|
/* Source picker */
|
|
@@ -1818,6 +1846,43 @@ code { font-family: ui-monospace, SFMono-Regular, Menlo, monospace; font-size: 0
|
|
|
1818
1846
|
display: grid;
|
|
1819
1847
|
gap: 4px;
|
|
1820
1848
|
}
|
|
1849
|
+
.workspace-source-object-list {
|
|
1850
|
+
display: grid;
|
|
1851
|
+
gap: 8px;
|
|
1852
|
+
}
|
|
1853
|
+
.workspace-source-object-row {
|
|
1854
|
+
width: 100%;
|
|
1855
|
+
display: grid;
|
|
1856
|
+
grid-template-columns: 30px minmax(0, 1fr) auto;
|
|
1857
|
+
align-items: center;
|
|
1858
|
+
gap: 10px;
|
|
1859
|
+
border: 1px solid #e8e8e8;
|
|
1860
|
+
border-radius: 7px;
|
|
1861
|
+
background: #fff;
|
|
1862
|
+
color: #444;
|
|
1863
|
+
padding: 9px 10px;
|
|
1864
|
+
text-align: left;
|
|
1865
|
+
cursor: pointer;
|
|
1866
|
+
font: inherit;
|
|
1867
|
+
box-shadow: 0 3px 10px rgba(15, 23, 42, 0.06);
|
|
1868
|
+
}
|
|
1869
|
+
.workspace-source-object-row[disabled] {
|
|
1870
|
+
cursor: default;
|
|
1871
|
+
}
|
|
1872
|
+
.workspace-source-object-row.active {
|
|
1873
|
+
border-color: #111827;
|
|
1874
|
+
box-shadow: 0 0 0 1px #111827, 0 3px 10px rgba(15, 23, 42, 0.06);
|
|
1875
|
+
}
|
|
1876
|
+
.workspace-source-object-icon {
|
|
1877
|
+
width: 28px;
|
|
1878
|
+
height: 28px;
|
|
1879
|
+
display: grid;
|
|
1880
|
+
place-items: center;
|
|
1881
|
+
border: 1px solid #e5e7eb;
|
|
1882
|
+
border-radius: 6px;
|
|
1883
|
+
background: #f9fafb;
|
|
1884
|
+
color: #374151;
|
|
1885
|
+
}
|
|
1821
1886
|
.workspace-source-controls {
|
|
1822
1887
|
display: grid;
|
|
1823
1888
|
gap: 8px;
|
|
@@ -1872,14 +1937,80 @@ code { font-family: ui-monospace, SFMono-Regular, Menlo, monospace; font-size: 0
|
|
|
1872
1937
|
text-align: left;
|
|
1873
1938
|
cursor: pointer;
|
|
1874
1939
|
font: inherit;
|
|
1940
|
+
box-shadow: 0 2px 8px rgba(15, 23, 42, 0.05);
|
|
1875
1941
|
}
|
|
1876
1942
|
.workspace-source-row:hover {
|
|
1877
1943
|
border-color: #d0d0d0;
|
|
1878
1944
|
background: #fafafa;
|
|
1879
1945
|
}
|
|
1880
1946
|
.workspace-source-row.active {
|
|
1881
|
-
border-color: #
|
|
1882
|
-
background:
|
|
1947
|
+
border-color: #111827;
|
|
1948
|
+
background: #f9fafb;
|
|
1949
|
+
box-shadow: 0 0 0 1px #111827, 0 2px 8px rgba(15, 23, 42, 0.05);
|
|
1950
|
+
}
|
|
1951
|
+
.workspace-source-info-card {
|
|
1952
|
+
margin: 0 0 14px;
|
|
1953
|
+
padding: 10px 12px;
|
|
1954
|
+
border: 1px solid #e5e7eb;
|
|
1955
|
+
border-radius: 8px;
|
|
1956
|
+
background: #fff;
|
|
1957
|
+
color: #6b7280;
|
|
1958
|
+
font-size: 12px;
|
|
1959
|
+
line-height: 1.4;
|
|
1960
|
+
box-shadow: 0 2px 8px rgba(15, 23, 42, 0.04);
|
|
1961
|
+
}
|
|
1962
|
+
.workspace-custom-source-config,
|
|
1963
|
+
.workspace-active-source-state,
|
|
1964
|
+
.workspace-filter-source-state {
|
|
1965
|
+
display: grid;
|
|
1966
|
+
gap: 7px;
|
|
1967
|
+
border: 1px solid #e8eef8;
|
|
1968
|
+
border-radius: 8px;
|
|
1969
|
+
background: #fff;
|
|
1970
|
+
box-shadow: 0 2px 8px rgba(15, 23, 42, 0.05);
|
|
1971
|
+
padding: 10px;
|
|
1972
|
+
}
|
|
1973
|
+
.workspace-active-source-state,
|
|
1974
|
+
.workspace-filter-source-state {
|
|
1975
|
+
margin-top: 10px;
|
|
1976
|
+
}
|
|
1977
|
+
.workspace-active-source-state span,
|
|
1978
|
+
.workspace-filter-source-state span {
|
|
1979
|
+
color: #8a97a8;
|
|
1980
|
+
font-size: 10px;
|
|
1981
|
+
font-weight: 700;
|
|
1982
|
+
text-transform: uppercase;
|
|
1983
|
+
}
|
|
1984
|
+
.workspace-active-source-state strong,
|
|
1985
|
+
.workspace-filter-source-state strong {
|
|
1986
|
+
color: #1f2937;
|
|
1987
|
+
font-size: 13px;
|
|
1988
|
+
}
|
|
1989
|
+
.workspace-active-source-state code,
|
|
1990
|
+
.workspace-filter-source-state code {
|
|
1991
|
+
color: #64748b;
|
|
1992
|
+
background: transparent;
|
|
1993
|
+
font-size: 11px;
|
|
1994
|
+
overflow-wrap: anywhere;
|
|
1995
|
+
}
|
|
1996
|
+
.workspace-custom-source-config label {
|
|
1997
|
+
display: grid;
|
|
1998
|
+
gap: 5px;
|
|
1999
|
+
}
|
|
2000
|
+
.workspace-custom-source-config span {
|
|
2001
|
+
color: #8a97a8;
|
|
2002
|
+
font-size: 10px;
|
|
2003
|
+
font-weight: 700;
|
|
2004
|
+
text-transform: uppercase;
|
|
2005
|
+
}
|
|
2006
|
+
.workspace-custom-source-config input {
|
|
2007
|
+
border: 1px solid #e5e7eb;
|
|
2008
|
+
border-radius: 6px;
|
|
2009
|
+
background: #fff;
|
|
2010
|
+
color: #333;
|
|
2011
|
+
font: inherit;
|
|
2012
|
+
font-size: 12px;
|
|
2013
|
+
padding: 7px 8px;
|
|
1883
2014
|
}
|
|
1884
2015
|
.workspace-source-icon {
|
|
1885
2016
|
width: 26px;
|
|
@@ -1912,8 +2043,118 @@ code { font-family: ui-monospace, SFMono-Regular, Menlo, monospace; font-size: 0
|
|
|
1912
2043
|
font-style: normal;
|
|
1913
2044
|
}
|
|
1914
2045
|
.workspace-source-tick {
|
|
1915
|
-
color: #
|
|
2046
|
+
color: #111827;
|
|
1916
2047
|
font-weight: 700;
|
|
2048
|
+
display: inline-grid;
|
|
2049
|
+
place-items: center;
|
|
2050
|
+
}
|
|
2051
|
+
|
|
2052
|
+
/* Governed integration reference binding — entity selector + badge */
|
|
2053
|
+
.workspace-entity-selector {
|
|
2054
|
+
display: grid;
|
|
2055
|
+
gap: 6px;
|
|
2056
|
+
margin-top: 4px;
|
|
2057
|
+
padding-top: 10px;
|
|
2058
|
+
border-top: 1px solid #ececec;
|
|
2059
|
+
}
|
|
2060
|
+
.workspace-entity-dropdown {
|
|
2061
|
+
display: grid;
|
|
2062
|
+
gap: 5px;
|
|
2063
|
+
min-width: 0;
|
|
2064
|
+
}
|
|
2065
|
+
.workspace-entity-dropdown span {
|
|
2066
|
+
color: #8a8a8a;
|
|
2067
|
+
font-size: 11px;
|
|
2068
|
+
font-weight: 700;
|
|
2069
|
+
}
|
|
2070
|
+
.workspace-entity-dropdown select {
|
|
2071
|
+
width: 100%;
|
|
2072
|
+
min-width: 0;
|
|
2073
|
+
min-height: 38px;
|
|
2074
|
+
border: 1px solid #d1d5db;
|
|
2075
|
+
border-radius: 7px;
|
|
2076
|
+
background: #fff;
|
|
2077
|
+
color: #111827;
|
|
2078
|
+
font: inherit;
|
|
2079
|
+
font-size: 13px;
|
|
2080
|
+
padding: 0 10px;
|
|
2081
|
+
box-shadow: 0 1px 2px rgba(15, 23, 42, 0.04);
|
|
2082
|
+
}
|
|
2083
|
+
.workspace-entity-dropdown select:focus {
|
|
2084
|
+
border-color: #111827;
|
|
2085
|
+
outline: 0;
|
|
2086
|
+
box-shadow: 0 0 0 1px #111827;
|
|
2087
|
+
}
|
|
2088
|
+
.workspace-entity-badge {
|
|
2089
|
+
display: grid;
|
|
2090
|
+
grid-template-columns: 26px 1fr auto;
|
|
2091
|
+
align-items: center;
|
|
2092
|
+
gap: 8px;
|
|
2093
|
+
padding: 7px 10px;
|
|
2094
|
+
border: 1px solid #d1d5db;
|
|
2095
|
+
border-radius: 7px;
|
|
2096
|
+
background: #fff;
|
|
2097
|
+
min-width: 0;
|
|
2098
|
+
}
|
|
2099
|
+
.workspace-entity-badge-icon {
|
|
2100
|
+
width: 24px;
|
|
2101
|
+
height: 24px;
|
|
2102
|
+
display: grid;
|
|
2103
|
+
place-items: center;
|
|
2104
|
+
border: 1px solid #e5e7eb;
|
|
2105
|
+
border-radius: 5px;
|
|
2106
|
+
background: #f9fafb;
|
|
2107
|
+
color: #374151;
|
|
2108
|
+
font-size: 11px;
|
|
2109
|
+
font-weight: 700;
|
|
2110
|
+
flex-shrink: 0;
|
|
2111
|
+
}
|
|
2112
|
+
.workspace-entity-badge-meta {
|
|
2113
|
+
display: flex;
|
|
2114
|
+
flex-direction: column;
|
|
2115
|
+
min-width: 0;
|
|
2116
|
+
}
|
|
2117
|
+
.workspace-entity-badge-meta strong {
|
|
2118
|
+
color: #111827;
|
|
2119
|
+
font-size: 12px;
|
|
2120
|
+
font-weight: 600;
|
|
2121
|
+
white-space: nowrap;
|
|
2122
|
+
overflow: hidden;
|
|
2123
|
+
text-overflow: ellipsis;
|
|
2124
|
+
}
|
|
2125
|
+
.workspace-entity-badge-meta em {
|
|
2126
|
+
color: #6b7280;
|
|
2127
|
+
font-size: 10px;
|
|
2128
|
+
font-style: normal;
|
|
2129
|
+
white-space: nowrap;
|
|
2130
|
+
overflow: hidden;
|
|
2131
|
+
text-overflow: ellipsis;
|
|
2132
|
+
}
|
|
2133
|
+
.workspace-entity-badge-clear {
|
|
2134
|
+
width: 20px;
|
|
2135
|
+
height: 20px;
|
|
2136
|
+
display: grid;
|
|
2137
|
+
place-items: center;
|
|
2138
|
+
border: 0;
|
|
2139
|
+
border-radius: 4px;
|
|
2140
|
+
background: transparent;
|
|
2141
|
+
color: #6b7280;
|
|
2142
|
+
cursor: pointer;
|
|
2143
|
+
flex-shrink: 0;
|
|
2144
|
+
}
|
|
2145
|
+
.workspace-entity-badge-clear:hover {
|
|
2146
|
+
background: #f3f4f6;
|
|
2147
|
+
color: #111827;
|
|
2148
|
+
}
|
|
2149
|
+
.workspace-entity-empty {
|
|
2150
|
+
color: #bbb;
|
|
2151
|
+
font-size: 12px;
|
|
2152
|
+
padding: 6px 2px;
|
|
2153
|
+
margin: 0;
|
|
2154
|
+
}
|
|
2155
|
+
.workspace-entity-sample-hint {
|
|
2156
|
+
color: #f59e0b;
|
|
2157
|
+
font-size: 11px;
|
|
1917
2158
|
}
|
|
1918
2159
|
|
|
1919
2160
|
/* Fields manager */
|
|
@@ -2055,10 +2296,11 @@ code { font-family: ui-monospace, SFMono-Regular, Menlo, monospace; font-size: 0
|
|
|
2055
2296
|
.workspace-filter-clause input {
|
|
2056
2297
|
border: 1px solid #e5e5e5;
|
|
2057
2298
|
border-radius: 6px;
|
|
2058
|
-
background: #
|
|
2299
|
+
background: #fff;
|
|
2059
2300
|
color: #444;
|
|
2060
2301
|
font: inherit;
|
|
2061
2302
|
padding: 6px 8px;
|
|
2303
|
+
box-shadow: 0 1px 4px rgba(15, 23, 42, 0.04);
|
|
2062
2304
|
}
|
|
2063
2305
|
.workspace-sort-row button,
|
|
2064
2306
|
.workspace-filter-clause button {
|
|
@@ -2080,13 +2322,14 @@ code { font-family: ui-monospace, SFMono-Regular, Menlo, monospace; font-size: 0
|
|
|
2080
2322
|
align-items: center;
|
|
2081
2323
|
gap: 4px;
|
|
2082
2324
|
border: 1px dashed #d8d8d8;
|
|
2083
|
-
background: #
|
|
2325
|
+
background: #fff;
|
|
2084
2326
|
color: #555;
|
|
2085
2327
|
border-radius: 6px;
|
|
2086
2328
|
padding: 6px 10px;
|
|
2087
2329
|
cursor: pointer;
|
|
2088
2330
|
font: inherit;
|
|
2089
2331
|
font-size: 12px;
|
|
2332
|
+
box-shadow: 0 1px 4px rgba(15, 23, 42, 0.04);
|
|
2090
2333
|
}
|
|
2091
2334
|
.workspace-add-clause:hover:not(:disabled) {
|
|
2092
2335
|
border-color: #38bdf8;
|
|
@@ -2105,6 +2348,32 @@ code { font-family: ui-monospace, SFMono-Regular, Menlo, monospace; font-size: 0
|
|
|
2105
2348
|
width: fit-content;
|
|
2106
2349
|
background: #fafafa;
|
|
2107
2350
|
}
|
|
2351
|
+
.workspace-color-preview-row {
|
|
2352
|
+
display: grid;
|
|
2353
|
+
grid-template-columns: auto 22px minmax(0, 1fr);
|
|
2354
|
+
align-items: center;
|
|
2355
|
+
gap: 8px;
|
|
2356
|
+
border: 1px solid #e8eef8;
|
|
2357
|
+
border-radius: 7px;
|
|
2358
|
+
background: #fff;
|
|
2359
|
+
padding: 8px 10px;
|
|
2360
|
+
box-shadow: 0 1px 4px rgba(15, 23, 42, 0.04);
|
|
2361
|
+
}
|
|
2362
|
+
.workspace-color-preview-row span {
|
|
2363
|
+
color: #777;
|
|
2364
|
+
font-size: 12px;
|
|
2365
|
+
}
|
|
2366
|
+
.workspace-color-preview-row em {
|
|
2367
|
+
width: 22px;
|
|
2368
|
+
height: 22px;
|
|
2369
|
+
border-radius: 5px;
|
|
2370
|
+
border: 1px solid rgba(15, 23, 42, 0.12);
|
|
2371
|
+
}
|
|
2372
|
+
.workspace-color-preview-row code {
|
|
2373
|
+
color: #64748b;
|
|
2374
|
+
background: transparent;
|
|
2375
|
+
font-size: 11px;
|
|
2376
|
+
}
|
|
2108
2377
|
.workspace-filter-op-toggle button {
|
|
2109
2378
|
border: 0;
|
|
2110
2379
|
background: transparent;
|
|
@@ -2224,7 +2493,7 @@ code { font-family: ui-monospace, SFMono-Regular, Menlo, monospace; font-size: 0
|
|
|
2224
2493
|
}
|
|
2225
2494
|
.workspace-chart-preview .workspace-chart-bar-h {
|
|
2226
2495
|
height: 12px;
|
|
2227
|
-
background: #38bdf8;
|
|
2496
|
+
background: var(--chart-accent, #38bdf8);
|
|
2228
2497
|
border-radius: 3px;
|
|
2229
2498
|
position: relative;
|
|
2230
2499
|
}
|
|
@@ -2244,7 +2513,7 @@ code { font-family: ui-monospace, SFMono-Regular, Menlo, monospace; font-size: 0
|
|
|
2244
2513
|
width: 60%;
|
|
2245
2514
|
aspect-ratio: 1;
|
|
2246
2515
|
border-radius: 50%;
|
|
2247
|
-
background: conic-gradient(#38bdf8 0 60%, #93c5fd 60% 85%, #cffafe 85% 100%);
|
|
2516
|
+
background: conic-gradient(var(--chart-accent, #38bdf8) 0 60%, #93c5fd 60% 85%, #cffafe 85% 100%);
|
|
2248
2517
|
}
|
|
2249
2518
|
.workspace-chart-preview.kind-line {
|
|
2250
2519
|
display: grid;
|
|
@@ -2283,7 +2552,7 @@ code { font-family: ui-monospace, SFMono-Regular, Menlo, monospace; font-size: 0
|
|
|
2283
2552
|
height: 36%;
|
|
2284
2553
|
border-radius: 999px 999px 0 0;
|
|
2285
2554
|
background:
|
|
2286
|
-
radial-gradient(circle at 50% 100%, transparent 56%, #38bdf8 56%, #38bdf8 var(--gauge-fill, 70%), #e5e5e5 var(--gauge-fill, 70%));
|
|
2555
|
+
radial-gradient(circle at 50% 100%, transparent 56%, var(--chart-accent, #38bdf8) 56%, var(--chart-accent, #38bdf8) var(--gauge-fill, 70%), #e5e5e5 var(--gauge-fill, 70%));
|
|
2287
2556
|
position: relative;
|
|
2288
2557
|
}
|
|
2289
2558
|
.workspace-chart-preview span em {
|
|
@@ -2436,3 +2705,81 @@ code { font-family: ui-monospace, SFMono-Regular, Menlo, monospace; font-size: 0
|
|
|
2436
2705
|
grid-template-columns: 1fr;
|
|
2437
2706
|
}
|
|
2438
2707
|
}
|
|
2708
|
+
|
|
2709
|
+
.dm-toast { display: inline-flex; align-items: center; height: 28px; padding: 0 10px; border-radius: 6px; border: 1px solid #e5e7eb; font-size: 12px; color: #374151; background: #fff; }
|
|
2710
|
+
.dm-toast.ok { color: #166534; background: #f0fdf4; border-color: #bbf7d0; }
|
|
2711
|
+
.dm-toast.error { color: #991b1b; background: #fef2f2; border-color: #fecaca; }
|
|
2712
|
+
.dm-toast.saving { color: #4b5563; background: #f9fafb; }
|
|
2713
|
+
.dm-summary-cards { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 10px; margin-bottom: 16px; }
|
|
2714
|
+
.dm-summary-card { border: 1px solid #e8e8e8; border-radius: 8px; background: #fff; padding: 14px 16px; }
|
|
2715
|
+
.dm-summary-card span { display: block; font-size: 11px; font-weight: 700; color: #888; text-transform: uppercase; letter-spacing: .06em; margin-bottom: 6px; }
|
|
2716
|
+
.dm-summary-card strong { font-size: 28px; line-height: 1; color: #1a1a2e; }
|
|
2717
|
+
.dm-layout { display: grid; grid-template-columns: 240px minmax(0, 1fr); border: 1px solid #e8e8e8; border-radius: 10px; background: #fff; overflow: hidden; min-height: 560px; }
|
|
2718
|
+
.dm-object-list { border-right: 1px solid #e8e8e8; background: #fafafa; }
|
|
2719
|
+
.dm-object-list-head { padding: 12px 14px 8px; border-bottom: 1px solid #efefef; font-size: 12px; color: #888; }
|
|
2720
|
+
.dm-object-list-body { padding: 6px; }
|
|
2721
|
+
.dm-object-row { width: 100%; border: 0; background: transparent; text-align: left; padding: 10px; border-radius: 7px; cursor: pointer; font: inherit; margin-bottom: 2px; }
|
|
2722
|
+
.dm-object-row:hover { background: #f0f0f0; }
|
|
2723
|
+
.dm-object-row.active { background: #e8f0fe; }
|
|
2724
|
+
.dm-object-row-top { display: flex; align-items: center; gap: 6px; margin-bottom: 4px; }
|
|
2725
|
+
.dm-object-icon { color: #94a3b8; flex-shrink: 0; }
|
|
2726
|
+
.dm-object-name { font-size: 13px; font-weight: 600; color: #111827; flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
2727
|
+
.dm-object-row-meta { display: flex; gap: 8px; flex-wrap: wrap; padding-left: 18px; font-size: 11px; color: #888; }
|
|
2728
|
+
.dm-badge { display: inline-flex; align-items: center; border-radius: 999px; border: 1px solid #e2e8f0; background: #f1f5f9; color: #475569; padding: 2px 7px; font-size: 11px; font-weight: 600; white-space: nowrap; }
|
|
2729
|
+
.dm-badge-datasource { background: #eff6ff; color: #1d4ed8; border-color: #bfdbfe; }
|
|
2730
|
+
.dm-badge-integration { background: #f0fdf4; color: #166534; border-color: #bbf7d0; }
|
|
2731
|
+
.dm-detail-panel { min-width: 0; }
|
|
2732
|
+
.dm-detail-header { padding: 14px 18px 10px; border-bottom: 1px solid #efefef; }
|
|
2733
|
+
.dm-detail-title-row { display: flex; align-items: center; gap: 8px; margin-bottom: 5px; }
|
|
2734
|
+
.dm-detail-title-row h2 { margin: 0; font-size: 16px; color: #111827; flex: 1; }
|
|
2735
|
+
.dm-detail-meta-row { display: flex; align-items: center; gap: 10px; padding-left: 22px; font-size: 12px; color: #9ca3af; }
|
|
2736
|
+
.dm-detail-meta-row code { font-size: 11px; color: #6b7280; background: #f3f4f6; border-radius: 4px; padding: 2px 6px; }
|
|
2737
|
+
.dm-tabs { display: flex; border-bottom: 1px solid #efefef; background: #fafafa; padding: 0 16px; }
|
|
2738
|
+
.dm-tab { border: 0; background: transparent; padding: 10px 12px; font: inherit; font-size: 13px; color: #6b7280; cursor: pointer; border-bottom: 2px solid transparent; margin-bottom: -1px; }
|
|
2739
|
+
.dm-tab.active { color: #1d4ed8; border-bottom-color: #1d4ed8; font-weight: 600; }
|
|
2740
|
+
.dm-tab-content { padding: 16px 18px; overflow-x: auto; }
|
|
2741
|
+
.dm-tab-toolbar { display: flex; justify-content: space-between; gap: 10px; align-items: center; margin-bottom: 12px; }
|
|
2742
|
+
.dm-tab-toolbar-actions, .dm-inline-add, .dm-csv-options { display: flex; gap: 6px; align-items: center; flex-wrap: wrap; }
|
|
2743
|
+
.dm-tab-stat { margin: 0; font-size: 12px; color: #888; }
|
|
2744
|
+
.dm-btn { display: inline-flex; align-items: center; gap: 5px; height: 30px; border: 1px solid #d1d5db; border-radius: 6px; background: #fff; color: #111827; font: inherit; font-size: 12px; padding: 0 11px; cursor: pointer; text-decoration: none; white-space: nowrap; box-shadow: 0 1px 2px rgba(15,23,42,.08); }
|
|
2745
|
+
.dm-btn:hover { background: #f9fafb; border-color: #9ca3af; }
|
|
2746
|
+
.dm-btn:disabled { opacity: .5; cursor: not-allowed; }
|
|
2747
|
+
.dm-icon-btn { width: 26px; height: 26px; border: 1px solid #e5e7eb; border-radius: 5px; background: #fff; color: #6b7280; cursor: pointer; }
|
|
2748
|
+
.dm-icon-btn.danger { color: #dc2626; }
|
|
2749
|
+
.dm-input, .dm-cell-input, .dm-csv-textarea { border: 1px solid #d1d5db; border-radius: 6px; background: #fff; color: #111827; font: inherit; font-size: 13px; padding: 6px 10px; box-sizing: border-box; }
|
|
2750
|
+
.dm-input { min-height: 32px; min-width: 180px; }
|
|
2751
|
+
.dm-field-list { display: grid; gap: 4px; }
|
|
2752
|
+
.dm-field-item { display: flex; align-items: center; gap: 7px; min-height: 38px; padding: 8px 10px; border: 1px solid #e5e7eb; border-radius: 7px; background: #fff; font-size: 13px; }
|
|
2753
|
+
.dm-field-icon { color: #cbd5e1; font-size: 11px; }
|
|
2754
|
+
.dm-field-error { margin: 4px 0 8px; color: #dc2626; font-size: 12px; }
|
|
2755
|
+
.dm-records-scroll { overflow-x: auto; border: 1px solid #e5e7eb; border-radius: 8px; }
|
|
2756
|
+
.dm-records-table { width: 100%; border-collapse: collapse; font-size: 13px; }
|
|
2757
|
+
.dm-records-table th { background: #f9fafb; border-bottom: 1px solid #e5e7eb; color: #6b7280; font-size: 11px; text-align: left; padding: 8px 10px; }
|
|
2758
|
+
.dm-records-table td { border-bottom: 1px solid #f0f0f0; padding: 5px 8px; }
|
|
2759
|
+
.dm-cell-btn { width: 100%; min-height: 24px; border: 0; background: transparent; text-align: left; font: inherit; cursor: text; color: #111827; }
|
|
2760
|
+
.dm-cell-empty { color: #d1d5db; }
|
|
2761
|
+
.dm-csv-panel, .dm-hint-block, .dm-empty-inline { border: 1px solid #e5e7eb; border-radius: 8px; background: #f9fafb; padding: 10px 12px; margin: 8px 0 12px; color: #6b7280; font-size: 12px; line-height: 1.5; }
|
|
2762
|
+
.dm-csv-textarea { width: 100%; margin-bottom: 8px; font-family: ui-monospace, SFMono-Regular, Menlo, monospace; }
|
|
2763
|
+
.dm-binding-header { display: flex; align-items: flex-start; gap: 10px; margin-bottom: 14px; }
|
|
2764
|
+
.dm-binding-header p { margin: 0; color: #4b5563; font-size: 13px; line-height: 1.5; }
|
|
2765
|
+
.dm-binding-rows, .dm-usage-list { display: grid; gap: 6px; }
|
|
2766
|
+
.dm-binding-row, .dm-usage-item { display: grid; grid-template-columns: 140px minmax(0, 1fr); gap: 10px; align-items: center; border: 1px solid #e5e7eb; border-radius: 7px; background: #fafafa; padding: 8px 10px; font-size: 12px; }
|
|
2767
|
+
.dm-binding-row code, .dm-usage-item code { word-break: break-all; }
|
|
2768
|
+
.dm-page-empty, .dm-loading, .dm-error-state { max-width: 520px; margin: 48px auto; text-align: center; color: #6b7280; display: grid; justify-items: center; gap: 10px; }
|
|
2769
|
+
.dm-page-empty strong, .dm-error-state strong { color: #111827; font-size: 18px; }
|
|
2770
|
+
.dm-dialog-shell { position: fixed; inset: 0; z-index: 80; display: grid; place-items: center; padding: 24px; }
|
|
2771
|
+
.dm-dialog-backdrop { position: absolute; inset: 0; background: rgba(17,24,39,.38); }
|
|
2772
|
+
.dm-dialog { position: relative; width: min(520px, 100%); border-radius: 10px; border: 1px solid #e5e7eb; background: #fff; box-shadow: 0 24px 60px rgba(15,23,42,.22); overflow: hidden; }
|
|
2773
|
+
.dm-dialog-head { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 16px 20px; border-bottom: 1px solid #e5e7eb; }
|
|
2774
|
+
.dm-dialog-head h2 { margin: 0; font-size: 16px; color: #111827; }
|
|
2775
|
+
.dm-dialog-body { display: grid; gap: 12px; padding: 18px 20px; }
|
|
2776
|
+
.dm-dialog-copy { margin: 0; color: #4b5563; font-size: 13px; line-height: 1.45; }
|
|
2777
|
+
.dm-field-label { display: grid; gap: 6px; color: #374151; font-size: 12px; font-weight: 700; }
|
|
2778
|
+
.dm-field-label span { color: #9ca3af; font-weight: 500; }
|
|
2779
|
+
.dm-field-label .dm-input { width: 100%; }
|
|
2780
|
+
.dm-dialog-actions { display: flex; justify-content: flex-end; gap: 8px; padding: 14px 20px; border-top: 1px solid #e5e7eb; background: #fafafa; }
|
|
2781
|
+
@media (max-width: 900px) {
|
|
2782
|
+
.dm-summary-cards { grid-template-columns: repeat(2, minmax(0, 1fr)); }
|
|
2783
|
+
.dm-layout { grid-template-columns: 1fr; }
|
|
2784
|
+
.dm-object-list { border-right: 0; border-bottom: 1px solid #e8e8e8; }
|
|
2785
|
+
}
|
|
@@ -1,18 +1,21 @@
|
|
|
1
1
|
import workspaceConfig from "../growthub.config.json";
|
|
2
2
|
import { readAdapterConfig } from "@/lib/adapters/env";
|
|
3
|
-
import { describeIntegrationAdapter } from "@/lib/adapters/integrations";
|
|
3
|
+
import { describeIntegrationAdapter, listGovernedWorkspaceIntegrations } from "@/lib/adapters/integrations";
|
|
4
|
+
import { groupIntegrationsByLane } from "@/lib/domain/integrations";
|
|
4
5
|
import { describePersistenceMode } from "@/lib/workspace-config";
|
|
5
6
|
import WorkspaceBuilder from "./workspace-builder.jsx";
|
|
6
7
|
|
|
7
|
-
function Home() {
|
|
8
|
+
async function Home() {
|
|
8
9
|
const adapterConfig = readAdapterConfig();
|
|
9
10
|
const integrationAdapter = describeIntegrationAdapter();
|
|
11
|
+
const integrations = await listGovernedWorkspaceIntegrations();
|
|
10
12
|
const persistence = describePersistenceMode();
|
|
11
13
|
return (
|
|
12
14
|
<WorkspaceBuilder
|
|
13
15
|
initialConfig={workspaceConfig}
|
|
14
16
|
adapterConfig={adapterConfig}
|
|
15
17
|
integrationAdapter={integrationAdapter}
|
|
18
|
+
integrationSettings={{ integrations: groupIntegrationsByLane(integrations) }}
|
|
16
19
|
persistence={persistence}
|
|
17
20
|
/>
|
|
18
21
|
);
|
|
@@ -10,10 +10,9 @@ function countConnected(rows) {
|
|
|
10
10
|
function integrationKey(item, lane, index) {
|
|
11
11
|
return [
|
|
12
12
|
lane,
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
item.connectionId,
|
|
13
|
+
item.provider,
|
|
14
|
+
item.id,
|
|
15
|
+
item.connectionId,
|
|
17
16
|
index
|
|
18
17
|
].filter(Boolean).join(":");
|
|
19
18
|
}
|
|
@@ -51,6 +50,7 @@ async function IntegrationsSettingsPage() {
|
|
|
51
50
|
</div>
|
|
52
51
|
<nav className="workspace-nav">
|
|
53
52
|
<Link href="/">Dashboards</Link>
|
|
53
|
+
<Link href="/data-model">Data Model</Link>
|
|
54
54
|
<Link className="active" href="/settings/integrations">Integrations</Link>
|
|
55
55
|
<span className="workspace-nav-static">Workspace Settings</span>
|
|
56
56
|
<span className="workspace-nav-static">Management</span>
|
|
@@ -99,7 +99,7 @@ async function IntegrationsSettingsPage() {
|
|
|
99
99
|
<section className="workspace-integration-toolbar">
|
|
100
100
|
<div>
|
|
101
101
|
<strong>Connection catalog</strong>
|
|
102
|
-
<p>{countConnected(allRows)}/{allRows.length} connected. Setup state is resolved from the selected adapter without storing
|
|
102
|
+
<p>{countConnected(allRows)}/{allRows.length} connected. Setup state is resolved from the selected adapter without storing source credentials in the app.</p>
|
|
103
103
|
</div>
|
|
104
104
|
</section>
|
|
105
105
|
|