@growthub/cli 0.9.11 → 0.9.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (21) hide show
  1. package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/app/api/settings/apis-webhooks/route.js +59 -0
  2. package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/app/api/settings/workspace/route.js +70 -0
  3. package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/app/api/workspace/route.js +1 -1
  4. package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/app/data-model/page.jsx +406 -0
  5. package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/app/global-error.jsx +21 -0
  6. package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/app/globals.css +767 -6
  7. package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/app/settings/apis-webhooks/apis-webhooks-form.jsx +208 -0
  8. package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/app/settings/apis-webhooks/page.jsx +19 -0
  9. package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/app/settings/apps/apps-list.jsx +43 -0
  10. package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/app/settings/apps/page.jsx +109 -0
  11. package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/app/settings/general/general-settings-form.jsx +134 -0
  12. package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/app/settings/general/page.jsx +25 -0
  13. package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/app/settings/integrations/page.jsx +23 -3
  14. package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/app/settings/page.jsx +25 -0
  15. package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/app/settings/settings-shell.jsx +33 -0
  16. package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/app/workspace-builder.jsx +139 -28
  17. package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/lib/workspace-config.js +189 -2
  18. package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/lib/workspace-data-model.js +433 -0
  19. package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/lib/workspace-schema.js +58 -7
  20. package/dist/index.js +3 -1
  21. package/package.json +1 -1
@@ -434,11 +434,20 @@ code { font-family: ui-monospace, SFMono-Regular, Menlo, monospace; font-size: 0
434
434
  background: #f7f7f7;
435
435
  color: #555;
436
436
  font-size: 12px;
437
+ overflow: hidden;
438
+ }
439
+ .workspace-mark img {
440
+ width: 100%;
441
+ height: 100%;
442
+ object-fit: cover;
437
443
  }
438
444
  .workspace-nav {
439
445
  display: grid;
440
446
  gap: 2px;
441
447
  }
448
+ .workspace-nav-bottom {
449
+ margin-top: 2px;
450
+ }
442
451
  .workspace-nav a,
443
452
  .workspace-nav-static {
444
453
  border-radius: 6px;
@@ -521,12 +530,20 @@ code { font-family: ui-monospace, SFMono-Regular, Menlo, monospace; font-size: 0
521
530
  .workspace-toolbar-actions button,
522
531
  .workspace-tabs button {
523
532
  min-height: 30px;
533
+ display: inline-flex;
534
+ align-items: center;
535
+ justify-content: center;
536
+ gap: 6px;
524
537
  border: 1px solid #dedede;
525
538
  border-radius: 6px;
526
539
  background: #ffffff;
527
540
  color: #4f4f4f;
528
541
  padding: 0 10px;
529
542
  }
543
+ .workspace-toolbar-actions button svg,
544
+ .workspace-tabs button svg {
545
+ flex: 0 0 auto;
546
+ }
530
547
  .workspace-table,
531
548
  .workspace-canvas {
532
549
  border: 1px solid #e7e7e7;
@@ -655,17 +672,23 @@ code { font-family: ui-monospace, SFMono-Regular, Menlo, monospace; font-size: 0
655
672
  justify-content: flex-start;
656
673
  }
657
674
  .workspace-dashboard-actions button {
658
- border: 1px solid #e1e1e1;
675
+ min-height: 30px;
676
+ display: inline-flex;
677
+ align-items: center;
678
+ justify-content: center;
679
+ border: 1px solid #dedede;
659
680
  border-radius: 6px;
660
- background: #fafafa;
661
- color: #444;
681
+ background: #ffffff;
682
+ color: #4f4f4f;
662
683
  cursor: pointer;
663
- font-size: 11px;
684
+ font: inherit;
685
+ font-size: 12px;
664
686
  line-height: 1;
665
- padding: 6px 8px;
687
+ padding: 0 10px;
666
688
  }
667
689
  .workspace-dashboard-actions button:hover {
668
- background: #f0f0f0;
690
+ background: #f7f7f7;
691
+ border-color: #cfcfcd;
669
692
  }
670
693
  .workspace-integration-summary {
671
694
  display: grid;
@@ -1841,6 +1864,666 @@ code { font-family: ui-monospace, SFMono-Regular, Menlo, monospace; font-size: 0
1841
1864
  white-space: normal;
1842
1865
  }
1843
1866
 
1867
+ .workspace-settings-shell {
1868
+ min-height: 100vh;
1869
+ background: #f7f7f6;
1870
+ color: #252525;
1871
+ }
1872
+ .workspace-settings-topbar {
1873
+ position: sticky;
1874
+ top: 0;
1875
+ z-index: 5;
1876
+ display: flex;
1877
+ align-items: center;
1878
+ gap: 18px;
1879
+ border-bottom: 1px solid #e4e4e2;
1880
+ background: rgba(247, 247, 246, 0.96);
1881
+ padding: 12px 24px;
1882
+ }
1883
+ .workspace-settings-exit {
1884
+ display: inline-flex;
1885
+ align-items: center;
1886
+ justify-content: center;
1887
+ width: 30px;
1888
+ height: 30px;
1889
+ border: 1px solid #dedede;
1890
+ border-radius: 6px;
1891
+ background: #fff;
1892
+ color: #666;
1893
+ text-decoration: none;
1894
+ }
1895
+ .workspace-settings-exit:hover {
1896
+ border-color: #c9c9c7;
1897
+ color: #222;
1898
+ box-shadow: 0 1px 4px rgba(0, 0, 0, 0.08);
1899
+ }
1900
+ .workspace-settings-tabs {
1901
+ display: flex;
1902
+ gap: 6px;
1903
+ }
1904
+ .workspace-settings-tabs a {
1905
+ min-height: 32px;
1906
+ display: flex;
1907
+ align-items: center;
1908
+ border: 1px solid transparent;
1909
+ border-radius: 6px;
1910
+ color: #5f5f5f;
1911
+ font-size: 13px;
1912
+ padding: 0 9px;
1913
+ text-decoration: none;
1914
+ }
1915
+ .workspace-settings-tabs a.active,
1916
+ .workspace-settings-tabs a:hover {
1917
+ border-color: #e4e4e2;
1918
+ background: #ffffff;
1919
+ color: #222;
1920
+ box-shadow: 0 1px 5px rgba(0, 0, 0, 0.08);
1921
+ }
1922
+ .workspace-settings-tabs a.active {
1923
+ font-weight: 700;
1924
+ }
1925
+ .workspace-settings-aside {
1926
+ margin-top: auto;
1927
+ color: #888;
1928
+ font-size: 12px;
1929
+ }
1930
+ .workspace-settings-main {
1931
+ min-width: 0;
1932
+ padding: 22px 28px 42px;
1933
+ }
1934
+ .workspace-settings-header {
1935
+ min-height: 36px;
1936
+ display: flex;
1937
+ align-items: baseline;
1938
+ gap: 8px;
1939
+ margin-bottom: 18px;
1940
+ }
1941
+ .workspace-settings-header p {
1942
+ margin: 0;
1943
+ color: #888;
1944
+ font-size: 13px;
1945
+ }
1946
+ .workspace-settings-header h1 {
1947
+ margin: 0;
1948
+ color: #242424;
1949
+ font-size: 14px;
1950
+ }
1951
+ .workspace-settings-card {
1952
+ width: min(100%, 980px);
1953
+ border: 1px solid #e2e2e0;
1954
+ border-radius: 8px;
1955
+ background: #ffffff;
1956
+ padding: 24px 28px;
1957
+ }
1958
+ .workspace-apps-card {
1959
+ max-height: calc(100vh - 116px);
1960
+ display: flex;
1961
+ flex-direction: column;
1962
+ overflow: hidden;
1963
+ padding-bottom: 16px;
1964
+ }
1965
+ .workspace-settings-card-heading {
1966
+ display: flex;
1967
+ justify-content: space-between;
1968
+ gap: 16px;
1969
+ align-items: flex-start;
1970
+ margin-bottom: 24px;
1971
+ }
1972
+ .workspace-apps-card .workspace-settings-card-heading {
1973
+ flex: 0 0 auto;
1974
+ margin-bottom: 18px;
1975
+ }
1976
+ .workspace-settings-top-actions {
1977
+ display: flex;
1978
+ justify-content: flex-end;
1979
+ gap: 8px;
1980
+ align-items: center;
1981
+ flex-wrap: wrap;
1982
+ }
1983
+ .workspace-settings-top-actions button {
1984
+ min-height: 32px;
1985
+ display: inline-flex;
1986
+ align-items: center;
1987
+ gap: 6px;
1988
+ border: 1px solid #d4d4d2;
1989
+ border-radius: 6px;
1990
+ background: #fff;
1991
+ color: #2f2f2f;
1992
+ font: inherit;
1993
+ font-size: 12px;
1994
+ padding: 0 10px;
1995
+ }
1996
+ .workspace-settings-top-actions button:hover:not(:disabled) {
1997
+ border-color: #c9c9c7;
1998
+ box-shadow: 0 1px 5px rgba(0, 0, 0, 0.08);
1999
+ }
2000
+ .workspace-settings-message {
2001
+ margin: 10px 0 0;
2002
+ color: #777;
2003
+ font-size: 13px;
2004
+ }
2005
+ .workspace-settings-card-heading h2,
2006
+ .workspace-settings-section h3 {
2007
+ margin: 0;
2008
+ color: #2a2a2a;
2009
+ }
2010
+ .workspace-settings-card-heading h2 {
2011
+ font-size: 18px;
2012
+ }
2013
+ .workspace-settings-card-heading p,
2014
+ .workspace-settings-section p,
2015
+ .workspace-settings-actions p,
2016
+ .workspace-settings-empty {
2017
+ margin: 5px 0 0;
2018
+ color: #888;
2019
+ font-size: 13px;
2020
+ line-height: 1.45;
2021
+ }
2022
+ .workspace-settings-section {
2023
+ display: grid;
2024
+ gap: 14px;
2025
+ border-top: 1px solid #eeeeec;
2026
+ padding: 20px 0;
2027
+ }
2028
+ .workspace-apps-linkage-section {
2029
+ flex: 0 0 auto;
2030
+ padding-bottom: 16px;
2031
+ }
2032
+ .workspace-apps-list-section {
2033
+ min-height: 0;
2034
+ flex: 1 1 auto;
2035
+ grid-template-rows: auto minmax(0, 1fr);
2036
+ padding-bottom: 0;
2037
+ }
2038
+ .workspace-settings-section:first-of-type {
2039
+ border-top: 0;
2040
+ padding-top: 0;
2041
+ }
2042
+ .workspace-settings-section h3 {
2043
+ font-size: 14px;
2044
+ }
2045
+ .workspace-settings-section.muted {
2046
+ color: #777;
2047
+ }
2048
+ .workspace-settings-grid {
2049
+ display: grid;
2050
+ gap: 14px;
2051
+ }
2052
+ .workspace-settings-grid.two {
2053
+ grid-template-columns: repeat(2, minmax(0, 1fr));
2054
+ }
2055
+ .workspace-settings-grid label {
2056
+ display: grid;
2057
+ gap: 6px;
2058
+ }
2059
+ .workspace-settings-grid label span {
2060
+ color: #8b8b8b;
2061
+ font-size: 12px;
2062
+ }
2063
+ .workspace-settings-grid input {
2064
+ min-height: 34px;
2065
+ width: 100%;
2066
+ border: 1px solid #dedede;
2067
+ border-radius: 6px;
2068
+ background: #fbfbfb;
2069
+ color: #303030;
2070
+ font: inherit;
2071
+ font-size: 13px;
2072
+ padding: 0 10px;
2073
+ }
2074
+ .workspace-identity-preview {
2075
+ display: flex;
2076
+ align-items: center;
2077
+ gap: 12px;
2078
+ }
2079
+ .workspace-identity-mark {
2080
+ width: 46px;
2081
+ height: 46px;
2082
+ display: grid;
2083
+ place-items: center;
2084
+ border: 1px solid #dedede;
2085
+ border-radius: 8px;
2086
+ color: #fff;
2087
+ font-size: 12px;
2088
+ font-weight: 800;
2089
+ overflow: hidden;
2090
+ }
2091
+ .workspace-identity-mark img,
2092
+ .workspace-logo-placeholder img {
2093
+ width: 100%;
2094
+ height: 100%;
2095
+ object-fit: cover;
2096
+ }
2097
+ .workspace-identity-preview strong {
2098
+ display: block;
2099
+ font-size: 14px;
2100
+ }
2101
+ .workspace-identity-preview p {
2102
+ margin: 3px 0 0;
2103
+ color: #888;
2104
+ font-size: 12px;
2105
+ }
2106
+ .workspace-logo-controls {
2107
+ display: inline-flex;
2108
+ align-items: flex-start;
2109
+ gap: 14px;
2110
+ }
2111
+ .workspace-logo-preview {
2112
+ display: inline-flex;
2113
+ align-items: center;
2114
+ }
2115
+ .workspace-logo-placeholder {
2116
+ width: 56px;
2117
+ height: 56px;
2118
+ display: grid;
2119
+ place-items: center;
2120
+ border: 1px solid #dedede;
2121
+ border-radius: 6px;
2122
+ background: #f5f5f4;
2123
+ color: #fff;
2124
+ font-size: 13px;
2125
+ font-weight: 800;
2126
+ overflow: hidden;
2127
+ }
2128
+ .workspace-settings-grid.logo-grid {
2129
+ grid-template-columns: minmax(0, 1fr) 180px;
2130
+ }
2131
+ .workspace-color-field {
2132
+ display: grid;
2133
+ grid-template-columns: 38px minmax(0, 1fr);
2134
+ gap: 8px;
2135
+ }
2136
+ .workspace-color-field input[type="color"] {
2137
+ min-height: 34px;
2138
+ padding: 3px;
2139
+ cursor: pointer;
2140
+ }
2141
+ .workspace-logo-actions {
2142
+ display: grid;
2143
+ align-content: start;
2144
+ gap: 8px;
2145
+ }
2146
+ .workspace-logo-actions > div {
2147
+ display: flex;
2148
+ gap: 8px;
2149
+ align-items: center;
2150
+ }
2151
+ .workspace-logo-actions p {
2152
+ margin: 0;
2153
+ color: #aaa;
2154
+ font-size: 12px;
2155
+ }
2156
+ .workspace-file-button {
2157
+ min-height: 32px;
2158
+ display: inline-flex;
2159
+ align-items: center;
2160
+ gap: 6px;
2161
+ border: 1px solid #dedede;
2162
+ border-radius: 6px;
2163
+ background: #fff;
2164
+ color: #333;
2165
+ font-size: 12px;
2166
+ padding: 0 10px;
2167
+ cursor: pointer;
2168
+ }
2169
+ .workspace-file-button input {
2170
+ position: absolute;
2171
+ width: 1px;
2172
+ height: 1px;
2173
+ overflow: hidden;
2174
+ opacity: 0;
2175
+ pointer-events: none;
2176
+ }
2177
+ .workspace-settings-pill {
2178
+ min-height: 28px;
2179
+ display: inline-flex;
2180
+ align-items: center;
2181
+ border: 1px solid #dedede;
2182
+ border-radius: 999px;
2183
+ background: #fafafa;
2184
+ color: #666;
2185
+ font-size: 12px;
2186
+ padding: 0 9px;
2187
+ white-space: nowrap;
2188
+ }
2189
+ .workspace-settings-pill.good,
2190
+ .workspace-settings-status-row strong.good {
2191
+ color: #15803d;
2192
+ }
2193
+ .workspace-settings-pill.warn {
2194
+ color: #a16207;
2195
+ }
2196
+ .workspace-settings-kv,
2197
+ .workspace-settings-status-grid {
2198
+ display: grid;
2199
+ grid-template-columns: minmax(140px, 0.42fr) minmax(0, 1fr);
2200
+ gap: 8px 12px;
2201
+ align-items: center;
2202
+ }
2203
+ .workspace-settings-kv span,
2204
+ .workspace-settings-status-row span {
2205
+ color: #888;
2206
+ font-size: 12px;
2207
+ }
2208
+ .workspace-settings-kv code,
2209
+ .workspace-app-row code {
2210
+ width: fit-content;
2211
+ max-width: 100%;
2212
+ border: 1px solid #e1e1df;
2213
+ border-radius: 999px;
2214
+ background: #fafafa;
2215
+ color: #666;
2216
+ font-size: 11px;
2217
+ padding: 4px 7px;
2218
+ word-break: break-word;
2219
+ }
2220
+ .workspace-settings-status-row {
2221
+ display: contents;
2222
+ }
2223
+ .workspace-settings-status-row strong {
2224
+ font-size: 13px;
2225
+ font-weight: 650;
2226
+ }
2227
+ .workspace-settings-actions {
2228
+ display: flex;
2229
+ justify-content: flex-end;
2230
+ gap: 12px;
2231
+ align-items: center;
2232
+ padding-top: 2px;
2233
+ }
2234
+ .workspace-settings-actions button {
2235
+ min-height: 34px;
2236
+ border: 1px solid #d4d4d2;
2237
+ border-radius: 6px;
2238
+ background: #fff;
2239
+ color: #2f2f2f;
2240
+ font: inherit;
2241
+ font-size: 13px;
2242
+ padding: 0 14px;
2243
+ }
2244
+ .workspace-settings-actions button:hover:not(:disabled) {
2245
+ border-color: #0b6bff;
2246
+ color: #0b6bff;
2247
+ }
2248
+ .workspace-settings-actions p {
2249
+ margin-right: auto;
2250
+ }
2251
+ .workspace-settings-actions button:disabled {
2252
+ cursor: default;
2253
+ opacity: 0.5;
2254
+ }
2255
+ .workspace-app-list {
2256
+ display: grid;
2257
+ border: 1px solid #ececea;
2258
+ border-radius: 8px;
2259
+ overflow: hidden;
2260
+ }
2261
+ .workspace-paginated-list {
2262
+ min-height: 0;
2263
+ display: grid;
2264
+ grid-template-rows: minmax(0, 1fr) auto;
2265
+ gap: 10px;
2266
+ }
2267
+ .workspace-app-list.bounded,
2268
+ .workspace-secret-list {
2269
+ max-height: min(58vh, 620px);
2270
+ overflow: auto;
2271
+ overscroll-behavior: contain;
2272
+ scrollbar-gutter: stable;
2273
+ }
2274
+ .workspace-apps-list-section .workspace-app-list.bounded {
2275
+ max-height: none;
2276
+ min-height: 0;
2277
+ height: 100%;
2278
+ }
2279
+ .workspace-reference-list {
2280
+ display: grid;
2281
+ gap: 8px;
2282
+ }
2283
+ .workspace-secret-list {
2284
+ display: grid;
2285
+ gap: 10px;
2286
+ }
2287
+ .workspace-secret-row {
2288
+ display: grid;
2289
+ gap: 8px;
2290
+ border: 1px solid #ececea;
2291
+ border-radius: 8px;
2292
+ background: #fff;
2293
+ padding: 10px;
2294
+ }
2295
+ .workspace-secret-row h3 {
2296
+ margin: 0;
2297
+ color: #242424;
2298
+ font-size: 13px;
2299
+ }
2300
+ .workspace-secret-row-main {
2301
+ display: grid;
2302
+ grid-template-columns: minmax(220px, 1fr) minmax(220px, 1fr) 34px;
2303
+ gap: 8px;
2304
+ align-items: center;
2305
+ }
2306
+ .workspace-secret-row input,
2307
+ .workspace-url-field input {
2308
+ min-height: 34px;
2309
+ border: 1px solid #dedede;
2310
+ border-radius: 6px;
2311
+ background: #fbfbfb;
2312
+ color: #303030;
2313
+ font: inherit;
2314
+ font-size: 13px;
2315
+ padding: 0 10px;
2316
+ }
2317
+ .workspace-key-field {
2318
+ position: relative;
2319
+ min-height: 34px;
2320
+ min-width: 0;
2321
+ border: 1px solid #dedede;
2322
+ border-radius: 6px;
2323
+ background: #fbfbfb;
2324
+ color: #222;
2325
+ font: inherit;
2326
+ font-size: 12px;
2327
+ font-weight: 700;
2328
+ padding: 0 9px;
2329
+ text-align: left;
2330
+ overflow: hidden;
2331
+ text-overflow: ellipsis;
2332
+ white-space: nowrap;
2333
+ }
2334
+ .workspace-key-field:hover::after {
2335
+ content: attr(data-tooltip);
2336
+ position: absolute;
2337
+ left: 16px;
2338
+ bottom: calc(100% + 7px);
2339
+ z-index: 10;
2340
+ border: 1px solid #d7d7d5;
2341
+ border-radius: 5px;
2342
+ background: #fff;
2343
+ color: #2f2f2f;
2344
+ box-shadow: 0 3px 10px rgba(0, 0, 0, 0.12);
2345
+ font-size: 12px;
2346
+ font-weight: 500;
2347
+ padding: 6px 8px;
2348
+ white-space: nowrap;
2349
+ }
2350
+ .workspace-key-field:hover::before {
2351
+ content: "";
2352
+ position: absolute;
2353
+ left: 28px;
2354
+ bottom: calc(100% + 2px);
2355
+ z-index: 11;
2356
+ width: 9px;
2357
+ height: 9px;
2358
+ background: #fff;
2359
+ border-right: 1px solid #d7d7d5;
2360
+ border-bottom: 1px solid #d7d7d5;
2361
+ transform: rotate(45deg);
2362
+ }
2363
+ .workspace-secret-field {
2364
+ display: grid;
2365
+ grid-template-columns: minmax(0, 1fr) 34px;
2366
+ }
2367
+ .workspace-secret-field input {
2368
+ border-radius: 6px 0 0 6px;
2369
+ }
2370
+ .workspace-secret-field button,
2371
+ .workspace-icon-button {
2372
+ min-height: 34px;
2373
+ display: inline-flex;
2374
+ align-items: center;
2375
+ justify-content: center;
2376
+ border: 1px solid #dedede;
2377
+ background: #fff;
2378
+ color: #555;
2379
+ }
2380
+ .workspace-secret-field button {
2381
+ border-left: 0;
2382
+ border-radius: 0 6px 6px 0;
2383
+ }
2384
+ .workspace-icon-button {
2385
+ border-radius: 6px;
2386
+ }
2387
+ .workspace-url-field {
2388
+ display: grid;
2389
+ gap: 5px;
2390
+ }
2391
+ .workspace-url-field span {
2392
+ color: #8b8b8b;
2393
+ font-size: 12px;
2394
+ }
2395
+ .workspace-link-button {
2396
+ width: fit-content;
2397
+ min-height: 28px;
2398
+ display: inline-flex;
2399
+ align-items: center;
2400
+ gap: 6px;
2401
+ border: 0;
2402
+ background: transparent;
2403
+ color: #777;
2404
+ font: inherit;
2405
+ font-size: 12px;
2406
+ padding: 0;
2407
+ }
2408
+ .workspace-link-button:hover {
2409
+ color: #222;
2410
+ }
2411
+ .workspace-add-row {
2412
+ display: flex;
2413
+ gap: 8px;
2414
+ }
2415
+ .workspace-pagination {
2416
+ display: flex;
2417
+ justify-content: flex-end;
2418
+ align-items: center;
2419
+ gap: 8px;
2420
+ color: #777;
2421
+ font-size: 12px;
2422
+ }
2423
+ .workspace-pagination button {
2424
+ min-height: 30px;
2425
+ border: 1px solid #d4d4d2;
2426
+ border-radius: 6px;
2427
+ background: #fff;
2428
+ color: #333;
2429
+ font: inherit;
2430
+ font-size: 12px;
2431
+ padding: 0 10px;
2432
+ }
2433
+ .workspace-pagination button:disabled {
2434
+ opacity: 0.45;
2435
+ }
2436
+ .workspace-reference-row {
2437
+ display: grid;
2438
+ grid-template-columns: 110px minmax(140px, 0.7fr) minmax(220px, 1fr) 142px auto;
2439
+ gap: 8px;
2440
+ align-items: center;
2441
+ }
2442
+ .workspace-reference-row input,
2443
+ .workspace-reference-row select {
2444
+ min-height: 34px;
2445
+ border: 1px solid #dedede;
2446
+ border-radius: 6px;
2447
+ background: #fbfbfb;
2448
+ color: #303030;
2449
+ font: inherit;
2450
+ font-size: 13px;
2451
+ padding: 0 10px;
2452
+ }
2453
+ .workspace-error-page {
2454
+ min-height: 100vh;
2455
+ display: grid;
2456
+ place-items: center;
2457
+ background: #f7f7f6;
2458
+ color: #252525;
2459
+ padding: 24px;
2460
+ }
2461
+ .workspace-error-page section {
2462
+ width: min(100%, 420px);
2463
+ border: 1px solid #e2e2e0;
2464
+ border-radius: 8px;
2465
+ background: #fff;
2466
+ padding: 24px;
2467
+ }
2468
+ .workspace-error-page h1 {
2469
+ margin: 0 0 8px;
2470
+ font-size: 22px;
2471
+ }
2472
+ .workspace-error-page p {
2473
+ margin: 0 0 16px;
2474
+ color: #777;
2475
+ }
2476
+ .workspace-error-page a {
2477
+ color: #0b6bff;
2478
+ font-weight: 650;
2479
+ }
2480
+ .workspace-checkbox {
2481
+ display: inline-flex;
2482
+ align-items: center;
2483
+ gap: 6px;
2484
+ color: #666;
2485
+ font-size: 12px;
2486
+ }
2487
+ .workspace-secondary-button,
2488
+ .workspace-remove-button {
2489
+ min-height: 32px;
2490
+ display: inline-flex;
2491
+ align-items: center;
2492
+ gap: 6px;
2493
+ border: 1px solid #dedede;
2494
+ border-radius: 6px;
2495
+ background: #fff;
2496
+ color: #333;
2497
+ font: inherit;
2498
+ font-size: 12px;
2499
+ padding: 0 10px;
2500
+ }
2501
+ .workspace-remove-button:disabled {
2502
+ opacity: 0.45;
2503
+ }
2504
+ .workspace-app-row {
2505
+ display: grid;
2506
+ grid-template-columns: 38px minmax(0, 1fr) auto;
2507
+ gap: 12px;
2508
+ align-items: start;
2509
+ border-bottom: 1px solid #ececea;
2510
+ padding: 12px 14px;
2511
+ }
2512
+ .workspace-app-row:last-child {
2513
+ border-bottom: 0;
2514
+ }
2515
+ .workspace-app-row strong {
2516
+ display: block;
2517
+ color: #303030;
2518
+ font-size: 13px;
2519
+ }
2520
+ .workspace-app-row p {
2521
+ margin: 4px 0 0;
2522
+ color: #777;
2523
+ font-size: 12px;
2524
+ line-height: 1.4;
2525
+ }
2526
+
1844
2527
  /* Source picker */
1845
2528
  .workspace-source-list {
1846
2529
  display: grid;
@@ -2705,3 +3388,81 @@ code { font-family: ui-monospace, SFMono-Regular, Menlo, monospace; font-size: 0
2705
3388
  grid-template-columns: 1fr;
2706
3389
  }
2707
3390
  }
3391
+
3392
+ .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; }
3393
+ .dm-toast.ok { color: #166534; background: #f0fdf4; border-color: #bbf7d0; }
3394
+ .dm-toast.error { color: #991b1b; background: #fef2f2; border-color: #fecaca; }
3395
+ .dm-toast.saving { color: #4b5563; background: #f9fafb; }
3396
+ .dm-summary-cards { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 10px; margin-bottom: 16px; }
3397
+ .dm-summary-card { border: 1px solid #e8e8e8; border-radius: 8px; background: #fff; padding: 14px 16px; }
3398
+ .dm-summary-card span { display: block; font-size: 11px; font-weight: 700; color: #888; text-transform: uppercase; letter-spacing: .06em; margin-bottom: 6px; }
3399
+ .dm-summary-card strong { font-size: 28px; line-height: 1; color: #1a1a2e; }
3400
+ .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; }
3401
+ .dm-object-list { border-right: 1px solid #e8e8e8; background: #fafafa; }
3402
+ .dm-object-list-head { padding: 12px 14px 8px; border-bottom: 1px solid #efefef; font-size: 12px; color: #888; }
3403
+ .dm-object-list-body { padding: 6px; }
3404
+ .dm-object-row { width: 100%; border: 0; background: transparent; text-align: left; padding: 10px; border-radius: 7px; cursor: pointer; font: inherit; margin-bottom: 2px; }
3405
+ .dm-object-row:hover { background: #f0f0f0; }
3406
+ .dm-object-row.active { background: #e8f0fe; }
3407
+ .dm-object-row-top { display: flex; align-items: center; gap: 6px; margin-bottom: 4px; }
3408
+ .dm-object-icon { color: #94a3b8; flex-shrink: 0; }
3409
+ .dm-object-name { font-size: 13px; font-weight: 600; color: #111827; flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
3410
+ .dm-object-row-meta { display: flex; gap: 8px; flex-wrap: wrap; padding-left: 18px; font-size: 11px; color: #888; }
3411
+ .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; }
3412
+ .dm-badge-datasource { background: #eff6ff; color: #1d4ed8; border-color: #bfdbfe; }
3413
+ .dm-badge-integration { background: #f0fdf4; color: #166534; border-color: #bbf7d0; }
3414
+ .dm-detail-panel { min-width: 0; }
3415
+ .dm-detail-header { padding: 14px 18px 10px; border-bottom: 1px solid #efefef; }
3416
+ .dm-detail-title-row { display: flex; align-items: center; gap: 8px; margin-bottom: 5px; }
3417
+ .dm-detail-title-row h2 { margin: 0; font-size: 16px; color: #111827; flex: 1; }
3418
+ .dm-detail-meta-row { display: flex; align-items: center; gap: 10px; padding-left: 22px; font-size: 12px; color: #9ca3af; }
3419
+ .dm-detail-meta-row code { font-size: 11px; color: #6b7280; background: #f3f4f6; border-radius: 4px; padding: 2px 6px; }
3420
+ .dm-tabs { display: flex; border-bottom: 1px solid #efefef; background: #fafafa; padding: 0 16px; }
3421
+ .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; }
3422
+ .dm-tab.active { color: #1d4ed8; border-bottom-color: #1d4ed8; font-weight: 600; }
3423
+ .dm-tab-content { padding: 16px 18px; overflow-x: auto; }
3424
+ .dm-tab-toolbar { display: flex; justify-content: space-between; gap: 10px; align-items: center; margin-bottom: 12px; }
3425
+ .dm-tab-toolbar-actions, .dm-inline-add, .dm-csv-options { display: flex; gap: 6px; align-items: center; flex-wrap: wrap; }
3426
+ .dm-tab-stat { margin: 0; font-size: 12px; color: #888; }
3427
+ .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); }
3428
+ .dm-btn:hover { background: #f9fafb; border-color: #9ca3af; }
3429
+ .dm-btn:disabled { opacity: .5; cursor: not-allowed; }
3430
+ .dm-icon-btn { width: 26px; height: 26px; border: 1px solid #e5e7eb; border-radius: 5px; background: #fff; color: #6b7280; cursor: pointer; }
3431
+ .dm-icon-btn.danger { color: #dc2626; }
3432
+ .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; }
3433
+ .dm-input { min-height: 32px; min-width: 180px; }
3434
+ .dm-field-list { display: grid; gap: 4px; }
3435
+ .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; }
3436
+ .dm-field-icon { color: #cbd5e1; font-size: 11px; }
3437
+ .dm-field-error { margin: 4px 0 8px; color: #dc2626; font-size: 12px; }
3438
+ .dm-records-scroll { overflow-x: auto; border: 1px solid #e5e7eb; border-radius: 8px; }
3439
+ .dm-records-table { width: 100%; border-collapse: collapse; font-size: 13px; }
3440
+ .dm-records-table th { background: #f9fafb; border-bottom: 1px solid #e5e7eb; color: #6b7280; font-size: 11px; text-align: left; padding: 8px 10px; }
3441
+ .dm-records-table td { border-bottom: 1px solid #f0f0f0; padding: 5px 8px; }
3442
+ .dm-cell-btn { width: 100%; min-height: 24px; border: 0; background: transparent; text-align: left; font: inherit; cursor: text; color: #111827; }
3443
+ .dm-cell-empty { color: #d1d5db; }
3444
+ .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; }
3445
+ .dm-csv-textarea { width: 100%; margin-bottom: 8px; font-family: ui-monospace, SFMono-Regular, Menlo, monospace; }
3446
+ .dm-binding-header { display: flex; align-items: flex-start; gap: 10px; margin-bottom: 14px; }
3447
+ .dm-binding-header p { margin: 0; color: #4b5563; font-size: 13px; line-height: 1.5; }
3448
+ .dm-binding-rows, .dm-usage-list { display: grid; gap: 6px; }
3449
+ .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; }
3450
+ .dm-binding-row code, .dm-usage-item code { word-break: break-all; }
3451
+ .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; }
3452
+ .dm-page-empty strong, .dm-error-state strong { color: #111827; font-size: 18px; }
3453
+ .dm-dialog-shell { position: fixed; inset: 0; z-index: 80; display: grid; place-items: center; padding: 24px; }
3454
+ .dm-dialog-backdrop { position: absolute; inset: 0; background: rgba(17,24,39,.38); }
3455
+ .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; }
3456
+ .dm-dialog-head { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 16px 20px; border-bottom: 1px solid #e5e7eb; }
3457
+ .dm-dialog-head h2 { margin: 0; font-size: 16px; color: #111827; }
3458
+ .dm-dialog-body { display: grid; gap: 12px; padding: 18px 20px; }
3459
+ .dm-dialog-copy { margin: 0; color: #4b5563; font-size: 13px; line-height: 1.45; }
3460
+ .dm-field-label { display: grid; gap: 6px; color: #374151; font-size: 12px; font-weight: 700; }
3461
+ .dm-field-label span { color: #9ca3af; font-weight: 500; }
3462
+ .dm-field-label .dm-input { width: 100%; }
3463
+ .dm-dialog-actions { display: flex; justify-content: flex-end; gap: 8px; padding: 14px 20px; border-top: 1px solid #e5e7eb; background: #fafafa; }
3464
+ @media (max-width: 900px) {
3465
+ .dm-summary-cards { grid-template-columns: repeat(2, minmax(0, 1fr)); }
3466
+ .dm-layout { grid-template-columns: 1fr; }
3467
+ .dm-object-list { border-right: 0; border-bottom: 1px solid #e8e8e8; }
3468
+ }