@metabase/cli 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.
Files changed (164) hide show
  1. package/dist/{add-collection-DQjTlDNF.mjs → add-collection-CwrbKmC1.mjs} +4 -4
  2. package/dist/{add-collection-C9BdVBs2.mjs → add-collection-DxtuNxeP.mjs} +6 -6
  3. package/dist/{archive-BXzghEQX.mjs → archive-BAjGIzhn.mjs} +3 -3
  4. package/dist/{archive-CBGKzEAl.mjs → archive-BO3DOWI4.mjs} +3 -3
  5. package/dist/{archive-CuVk8iwN.mjs → archive-BpKZsGAm.mjs} +3 -3
  6. package/dist/{archive-DTN9tLGT.mjs → archive-BzvqQd34.mjs} +3 -3
  7. package/dist/{archive-B3qiL-kK.mjs → archive-DqUtqRut.mjs} +3 -3
  8. package/dist/{archive-De8jzzq7.mjs → archive-ZnnJc2iT.mjs} +3 -3
  9. package/dist/auth-B9B4pUaH.mjs +19 -0
  10. package/dist/{body-tcURGnGh.mjs → body-DDYKoyMt.mjs} +1 -1
  11. package/dist/{branches-CIGkjXIk.mjs → branches-DjiGsjAz.mjs} +4 -4
  12. package/dist/{cancel-pPsvgJ0Z.mjs → cancel-BwtDQ2MR.mjs} +3 -3
  13. package/dist/{cancel-task-BLGE4UlL.mjs → cancel-task-uJp18RvR.mjs} +4 -4
  14. package/dist/card-D54unw6r.mjs +20 -0
  15. package/dist/{cards-Dq3nx_9n.mjs → cards-z68PANDD.mjs} +3 -3
  16. package/dist/cli.mjs +23 -23
  17. package/dist/collection-B5kIKRTL.mjs +20 -0
  18. package/dist/{create-BcgoukG4.mjs → create-4EAGYVyp.mjs} +3 -3
  19. package/dist/{create-w3mQg9n4.mjs → create-6XE7GYxk.mjs} +3 -3
  20. package/dist/{create-BIphz0kO.mjs → create-7JOWFxqu.mjs} +3 -3
  21. package/dist/{create-9DBTkbMq.mjs → create-BzK59YlR.mjs} +4 -4
  22. package/dist/{create-B1dyuL9Y.mjs → create-C8gA-XP2.mjs} +3 -3
  23. package/dist/{create-DHscDhRd.mjs → create-CQ4Vg4Ge.mjs} +3 -3
  24. package/dist/{create-BdPoSk_7.mjs → create-DHWfmO2L.mjs} +3 -3
  25. package/dist/{create-aPaUEGdr.mjs → create-Dd_Gyg_F.mjs} +3 -3
  26. package/dist/{create-BrUqxreg.mjs → create-GVfCQU3B.mjs} +3 -3
  27. package/dist/{create-branch-DGoc9CUU.mjs → create-branch-CdWGiREu.mjs} +4 -4
  28. package/dist/{credentials-qryRLUed.mjs → credentials-CFA9iGZG.mjs} +5 -5
  29. package/dist/{current-task-DZM28rnr.mjs → current-task-nPs-iCLi.mjs} +4 -4
  30. package/dist/dashboard-lw6IFfOs.mjs +21 -0
  31. package/dist/{database-Ce1gOJF7.mjs → database-BPT6BrmF.mjs} +3 -3
  32. package/dist/db-CBCj8sBg.mjs +22 -0
  33. package/dist/{delete-BPaFdHZP.mjs → delete-CJqLgr6w.mjs} +3 -3
  34. package/dist/{delete-FFj1xQWO.mjs → delete-CiV6f69N.mjs} +5 -5
  35. package/dist/{delete-BrJOotpW.mjs → delete-Do1agSiL.mjs} +3 -3
  36. package/dist/{delete-table-CNupWUO0.mjs → delete-table-ZiJDpMFT.mjs} +3 -3
  37. package/dist/{deprovision-BNr9fPDY.mjs → deprovision-C-qEnh-P.mjs} +6 -6
  38. package/dist/{dirty-BCkNOY8c.mjs → dirty-BnTG7w7v.mjs} +4 -4
  39. package/dist/{docker-Ds252Mwc.mjs → docker-B-QQWThD.mjs} +2 -2
  40. package/dist/{eid-CLY5X0Uw.mjs → eid-CwQ_smOD.mjs} +3 -3
  41. package/dist/{error-ZsFeevV2.mjs → error-CTVL5CdB.mjs} +1 -1
  42. package/dist/{export-CgHgWW3I.mjs → export-DR2cC4rL.mjs} +6 -6
  43. package/dist/field-DJmQ2pul.mjs +18 -0
  44. package/dist/{fields-RkRWU-u9.mjs → fields-Ck31lDz9.mjs} +3 -3
  45. package/dist/{get-42tJ7BNp.mjs → get-BFJ3VBPa.mjs} +3 -3
  46. package/dist/{get-C9O_aEGo.mjs → get-BNKsNCcx.mjs} +3 -3
  47. package/dist/{get-CTDqioaj.mjs → get-BPOd0Rm8.mjs} +3 -3
  48. package/dist/{get-CiZrZJLt.mjs → get-BZiu-u-9.mjs} +3 -3
  49. package/dist/{get-B9kwSs6U.mjs → get-C71ypFQk.mjs} +3 -3
  50. package/dist/{get-DmzgSgrl.mjs → get-CICzGFSW.mjs} +3 -3
  51. package/dist/{get-sMpa-X4E.mjs → get-CyG_P55z.mjs} +3 -3
  52. package/dist/{get-CRvbChoX.mjs → get-DauAF3sm.mjs} +2 -2
  53. package/dist/{get-y17zJMnU.mjs → get-DxqzDKKK.mjs} +3 -3
  54. package/dist/{get-B8l4t4Pz.mjs → get-DyArILlF.mjs} +2 -2
  55. package/dist/{get-DsqGHNHN.mjs → get-F338MOK-.mjs} +3 -3
  56. package/dist/{get-Bo4Cpd_c.mjs → get-GWRprk7k.mjs} +2 -2
  57. package/dist/{get-CvmqPN30.mjs → get-pO0wiy1e.mjs} +3 -3
  58. package/dist/{get-run-CBwcRc8E.mjs → get-run-DhM_PyVy.mjs} +3 -3
  59. package/dist/git-sync-rmjYOGFK.mjs +28 -0
  60. package/dist/{has-remote-changes-CfRidwXT.mjs → has-remote-changes-Ca0exJmb.mjs} +4 -4
  61. package/dist/{import-BZV0Z2KR.mjs → import-DjclIzGP.mjs} +6 -6
  62. package/dist/{is-dirty-hKcB4OH9.mjs → is-dirty-Cke0a1ie.mjs} +3 -3
  63. package/dist/is-dirty-DFGgGLDi.mjs +10 -0
  64. package/dist/{items-C94eW2Yd.mjs → items-BSpapmCU.mjs} +3 -3
  65. package/dist/{license-B37055sr.mjs → license-j0tDQLKI.mjs} +3 -3
  66. package/dist/{list-CU6sOfI-.mjs → list-BI1PfPjn.mjs} +2 -2
  67. package/dist/{list-C-oZe1_p.mjs → list-BRXGDSMo.mjs} +3 -3
  68. package/dist/{list-CqN4gvCk.mjs → list-Br77Mw6U.mjs} +2 -2
  69. package/dist/{list-DuSoEk_J.mjs → list-Brt4oKO7.mjs} +3 -3
  70. package/dist/{list-DrINpVLM.mjs → list-CEE9yKNp.mjs} +2 -2
  71. package/dist/{list-BS_Bxejg.mjs → list-D1qhCQn0.mjs} +2 -2
  72. package/dist/{list-BFlzLGlw.mjs → list-DUyWON1F.mjs} +2 -2
  73. package/dist/{list-B0V7FeL2.mjs → list-DWWGcUTg.mjs} +2 -2
  74. package/dist/{list-HS15y_WN.mjs → list-DmO4ADQq.mjs} +2 -2
  75. package/dist/{list-DfDZr55C.mjs → list-Fjjtpghb.mjs} +2 -2
  76. package/dist/{list-BJXaGk-z.mjs → list-V5IuMr_5.mjs} +2 -2
  77. package/dist/{list-CF1pMN4S.mjs → list-bVlCwg8g.mjs} +2 -2
  78. package/dist/{list-DUXdt0XI.mjs → list-evetBTcH.mjs} +2 -2
  79. package/dist/{list-BmHoYJr7.mjs → list-fIV-P6wP.mjs} +2 -2
  80. package/dist/{login-enh9Yimb.mjs → login-BJGhZLgZ.mjs} +3 -3
  81. package/dist/{logout-BWLPLDh8.mjs → logout-BAGLqtnV.mjs} +2 -2
  82. package/dist/{logs-Cu3QtvPs.mjs → logs-jx5b_YDk.mjs} +5 -5
  83. package/dist/measure-BfgxqewH.mjs +19 -0
  84. package/dist/{metadata-D2TxboMm.mjs → metadata-B-GOcWqL.mjs} +3 -3
  85. package/dist/{metadata-BTTEBWdS.mjs → metadata-DJAdsOoh.mjs} +3 -3
  86. package/dist/{parse-id-0_tOPvfI.mjs → parse-id-D1LTTt9L.mjs} +1 -1
  87. package/dist/{parse-schemas-D-qVLl4z.mjs → parse-schemas-DDK9nXuh.mjs} +1 -1
  88. package/dist/{path-C8GrBdgT.mjs → path-D5kX-msX.mjs} +2 -2
  89. package/dist/{poll-4eoh5J0r.mjs → poll-DxpnK1wW.mjs} +1 -1
  90. package/dist/{poll-task-51WRdugU.mjs → poll-task-D8mG49IN.mjs} +2 -2
  91. package/dist/{preflight-BhsErYz3.mjs → preflight-Df_FqJ6o.mjs} +1 -1
  92. package/dist/{provision-Chf86BF0.mjs → provision-BJd6zO1D.mjs} +8 -8
  93. package/dist/{ps-CIDwaubS.mjs → ps-CpyHEvv7.mjs} +5 -5
  94. package/dist/{ps-CEYtsKBj.mjs → ps-dEqRGeB3.mjs} +3 -3
  95. package/dist/{query-BBCAF-tG.mjs → query-OIuumiXN.mjs} +3 -3
  96. package/dist/{query-DYVBnu9d.mjs → query-zWFRDH3T.mjs} +3 -3
  97. package/dist/{remove-2yInufA6.mjs → remove-BNQ1c6hB.mjs} +2 -2
  98. package/dist/{remove-collection-CBAHz0Dk.mjs → remove-collection-BxmiXWKz.mjs} +6 -6
  99. package/dist/{rescan-values-cfTSNQZo.mjs → rescan-values-M7g81KIl.mjs} +3 -3
  100. package/dist/{run-qgdEJv-I.mjs → run-DTsx8bLb.mjs} +5 -5
  101. package/dist/{runs-BFIIH4GL.mjs → runs-CqfJIuh_.mjs} +3 -3
  102. package/dist/{runtime-Duawf5lE.mjs → runtime-B40L_bj8.mjs} +1 -1
  103. package/dist/{schema-tables-C2xM3dho.mjs → schema-tables-CjBRF0_0.mjs} +3 -3
  104. package/dist/{schemas-BP7xiktH.mjs → schemas-GIIbek2O.mjs} +3 -3
  105. package/dist/{search-DYP3lOlq.mjs → search-h78uOYec.mjs} +3 -3
  106. package/dist/segment-CoElN2b-.mjs +19 -0
  107. package/dist/{set-DpRQqdo7.mjs → set-BRDxcLcQ.mjs} +3 -3
  108. package/dist/{set-Tt-ioa4L.mjs → set-Dclba9xF.mjs} +2 -2
  109. package/dist/{setting-DUa96KF3.mjs → setting-mKzZJpQY.mjs} +3 -3
  110. package/dist/{setup-BPlllnim.mjs → setup-WTIT2WbM.mjs} +3 -3
  111. package/dist/{skills-SqbPo0BI.mjs → skills-tMYd5d9v.mjs} +3 -3
  112. package/dist/snippet-B84H3tfp.mjs +19 -0
  113. package/dist/{start-DJZA67WF.mjs → start-B7ByBicB.mjs} +5 -5
  114. package/dist/{stash-C89zNKxo.mjs → stash-DxoAJzcK.mjs} +6 -6
  115. package/dist/{status-BNvFPemM.mjs → status-B1dc3bbQ.mjs} +2 -2
  116. package/dist/{status-B1EJ_jv0.mjs → status-D0Ukfodl.mjs} +5 -5
  117. package/dist/{status-D5wSqYV_.mjs → status-DAzD1Cn_.mjs} +2 -2
  118. package/dist/{stop-5rCLmkCQ.mjs → stop-Cvexagxh.mjs} +6 -6
  119. package/dist/{summary-Cihbx0Qs.mjs → summary-3qOMUcEX.mjs} +3 -3
  120. package/dist/{sync-schema-C3odu0ZH.mjs → sync-schema-CrmVX1cy.mjs} +3 -3
  121. package/dist/table-B0fRQv91.mjs +19 -0
  122. package/dist/transform-K_kp6Rdm.mjs +24 -0
  123. package/dist/transform-job-CuNN8zgv.mjs +19 -0
  124. package/dist/{tree-mvq9gM9w.mjs → tree-DsnIPFyE.mjs} +2 -2
  125. package/dist/{update-C0jP0AKT.mjs → update-BEtl9LpG.mjs} +4 -4
  126. package/dist/{update-VvKMnwsM.mjs → update-BRLcnSwK.mjs} +4 -4
  127. package/dist/{update-tRparnUs.mjs → update-Baya6OkO.mjs} +5 -5
  128. package/dist/{update-DCrOQ1PW.mjs → update-BsgHRoZ8.mjs} +4 -4
  129. package/dist/{update-Rr4usmCo.mjs → update-CLsqoEJ8.mjs} +4 -4
  130. package/dist/{update-CtOo3LsX.mjs → update-CZEd_Eej.mjs} +4 -4
  131. package/dist/{update-BoIiuC70.mjs → update-DPouQi4U.mjs} +4 -4
  132. package/dist/{update-DwRxdflw.mjs → update-DWn-nLPo.mjs} +4 -4
  133. package/dist/{update-CbBnHz42.mjs → update-UaPqSfPN.mjs} +4 -4
  134. package/dist/{update-dashcard-DFvIz8Qj.mjs → update-dashcard-DK9X91ha.mjs} +4 -4
  135. package/dist/{update-DEZayTb4.mjs → update-hiJdbbsb.mjs} +8 -8
  136. package/dist/{upgrade-D-Rl_fH9.mjs → upgrade-UqdvTikR.mjs} +2 -2
  137. package/dist/{url-BB6jeNQj.mjs → url-LMJZRDv4.mjs} +5 -5
  138. package/dist/{uuid-BSVUk8u2.mjs → uuid-BWCaWG4O.mjs} +2 -2
  139. package/dist/{values-D1RJE4H6.mjs → values-D_wycrcr.mjs} +3 -3
  140. package/dist/{verify-A7BWfBPZ.mjs → verify-D7hb6VMy.mjs} +1 -1
  141. package/dist/{wait-DK5QDZ8n.mjs → wait-B5IpNFCG.mjs} +5 -5
  142. package/dist/{wait-B17I_pWy.mjs → wait-DHjXk3jD.mjs} +1 -1
  143. package/dist/{wait-flags-DlfbIXHw.mjs → wait-flags-CNIeSq0_.mjs} +2 -2
  144. package/dist/workspace-Bt8n3ojY.mjs +25 -0
  145. package/package.json +1 -1
  146. package/skill-data/visualization/SKILL.md +158 -0
  147. package/skill-data/visualization/references/settings.md +414 -0
  148. package/dist/auth-D9eAyVoG.mjs +0 -19
  149. package/dist/card-DDDrWcDU.mjs +0 -20
  150. package/dist/collection-DkEvCDar.mjs +0 -20
  151. package/dist/dashboard-BLf1RZlk.mjs +0 -21
  152. package/dist/db-CWTFe_FZ.mjs +0 -22
  153. package/dist/field-LL6W_c-c.mjs +0 -18
  154. package/dist/git-sync-CrWTo3YX.mjs +0 -28
  155. package/dist/is-dirty-CPzOnnH6.mjs +0 -10
  156. package/dist/measure-CDlEPFtB.mjs +0 -19
  157. package/dist/segment-B6HnNGDs.mjs +0 -19
  158. package/dist/snippet-dJ68tGsl.mjs +0 -19
  159. package/dist/table-J2f0STnB.mjs +0 -19
  160. package/dist/transform-job-OW4SDhsQ.mjs +0 -19
  161. package/dist/transform-q1LYWQtW.mjs +0 -24
  162. package/dist/workspace-ri6r3zWo.mjs +0 -25
  163. package/skill-data/viz/SKILL.md +0 -137
  164. package/skill-data/viz/references/settings.md +0 -312
@@ -0,0 +1,414 @@
1
+ # visualization_settings — per-chart key reference
2
+
3
+ Authorable keys per `display`, plus the data shape each chart suits and the minimum needed to render. Set keys only to override defaults — an empty `{}` works for a simple aggregate.
4
+
5
+ All column-naming keys (`graph.dimensions`, `pie.dimension`, `table.columns[].name`, `map.latitude_column`, …) take **output column-name strings** — the names the query produces. Every key and value below is identical in the API form (`mb card create`) and the portable git-sync form, with two exceptions: `column_settings` `["ref", …]` keys and click-behavior dimension targets carry a numeric field id in the API form and a name-path in the portable form. In a JSON body, `column_settings` keys are escaped strings: `"[\"name\",\"TOTAL\"]"`.
6
+
7
+ ---
8
+
9
+ # Cartesian — `bar`, `line`, `area`, `combo`, `scatter`, `waterfall`, `row`, `boxplot`
10
+
11
+ `bar`/`line`/`area`/`combo` share an identical key set (combo just defaults the first series to a line, the rest to bars). `scatter`/`waterfall`/`row`/`boxplot` use a subset plus their own extras. Most allow up to 2 dimensions and unlimited metrics; **waterfall is 1 dimension + 1 metric**, boxplot allows 2 dimensions.
12
+
13
+ ## Shared keys
14
+
15
+ **Data binding**
16
+
17
+ | Key | Type | Notes |
18
+ | -------------------- | -------------------- | ----------------------------------------------------------------------------------- |
19
+ | `graph.dimensions` | string[] (col names) | X-axis. Index 0 = x-axis; a 2nd entry = series breakout. |
20
+ | `graph.metrics` | string[] (col names) | Y-axis metric column(s). |
21
+ | `graph.series_order` | object[] | Per-series order/visibility `{ key, name, color, enabled }` (only with a breakout). |
22
+
23
+ **Stacking**
24
+
25
+ | Key | Type | Values | Default |
26
+ | ---------------------- | -------------- | ------------------------------------------------ | ---------------------------------------------- |
27
+ | `stackable.stack_type` | string \| null | `null`, `"stacked"`, `"normalized"` (100%) | `null` (`"stacked"` for `area` with >1 series) |
28
+ | `graph.split_panels` | boolean | each series in its own panel (excludes stacking) | `false` |
29
+
30
+ **Goal & trend**
31
+
32
+ | Key | Type | Default |
33
+ | ---------------------- | ------- | -------- |
34
+ | `graph.show_goal` | boolean | `false` |
35
+ | `graph.goal_value` | number | `0` |
36
+ | `graph.goal_label` | string | `"Goal"` |
37
+ | `graph.show_trendline` | boolean | `false` |
38
+
39
+ **Data labels**
40
+
41
+ | Key | Type | Values | Default |
42
+ | ------------------------------ | ------- | -------------------------------------------------- | --------- |
43
+ | `graph.show_values` | boolean | | `false` |
44
+ | `graph.label_value_frequency` | string | `"fit"`, `"all"` | `"fit"` |
45
+ | `graph.show_stack_values` | string | `"total"`, `"series"`, `"all"` (stacked bars only) | `"total"` |
46
+ | `graph.label_value_formatting` | string | `"auto"`, `"compact"`, `"full"` | `"auto"` |
47
+
48
+ **Axes**
49
+
50
+ | Key | Type | Values | Default |
51
+ | ----------------------------------------------------- | ----------------- | ------------------------------------------------------------------------------------------------ | ----------- |
52
+ | `graph.x_axis.scale` | string | `"timeseries"`, `"linear"`, `"pow"`, `"log"`, `"histogram"`, `"ordinal"` (subset by column type) | auto |
53
+ | `graph.y_axis.scale` | string | `"linear"`, `"pow"`, `"log"` | `"linear"` |
54
+ | `graph.x_axis.axis_enabled` | boolean \| string | `false`, `true`, `"compact"`, `"rotate-45"`, `"rotate-90"` | `true` |
55
+ | `graph.y_axis.axis_enabled` | boolean | | `true` |
56
+ | `graph.y_axis.unpin_from_zero` | boolean | don't force the Y axis through 0 | varies |
57
+ | `graph.y_axis.auto_range` | boolean | | `true` |
58
+ | `graph.y_axis.min` / `.max` | number | when `auto_range` is `false` | `0` / `100` |
59
+ | `graph.y_axis.auto_split` | boolean | split Y axis for multi-series | auto |
60
+ | `graph.x_axis.title_text` / `graph.y_axis.title_text` | string | axis label text (toggle with `*.labels_enabled`) | column name |
61
+
62
+ **Tooltip**
63
+
64
+ | Key | Type | Notes |
65
+ | ----------------------- | -------------------- | ---------------------------- |
66
+ | `graph.tooltip_columns` | string[] (col names) | extra columns shown on hover |
67
+
68
+ Per-series color/type/line-style live in `series_settings` (see below).
69
+
70
+ ## bar / line / area / combo
71
+
72
+ Use for comparing a measure across categories (`bar`) or change over time (`line`/`area`); `combo` overlays a line and bars for two related measures on different scales. **Use for:** >1 row, ≥2 columns, ≥1 dimension + ≥1 measure. **Required:** `graph.dimensions`, `graph.metrics`. Stacked-100% (`normalized`) is incompatible with a `log` y-scale.
73
+
74
+ ## scatter
75
+
76
+ Use for correlation between two numeric measures. Extra: `scatter.bubble` (numeric col name → bubble size). No stacking, data labels, or legend. **Required:** `graph.dimensions`, `graph.metrics`.
77
+
78
+ ## waterfall
79
+
80
+ Use for sequential additive contributions (start → +/− steps → total). **Use for:** exactly 1 dimension + 1 measure. X-scale can't be `pow`/`log`.
81
+
82
+ | Key | Type | Default |
83
+ | -------------------------- | ------- | ------- |
84
+ | `waterfall.increase_color` | string | accent1 |
85
+ | `waterfall.decrease_color` | string | accent3 |
86
+ | `waterfall.show_total` | boolean | `true` |
87
+ | `waterfall.total_color` | string | theme |
88
+
89
+ ## row
90
+
91
+ Horizontal bars — use when category labels are long or numerous. Here `graph.dimensions` is the y-axis (categories) and `graph.metrics` the x-axis (values). X-scale is `"ordinal"` only; no trend line, tooltip columns, or split panels. **Required:** `graph.dimensions`, `graph.metrics`.
92
+
93
+ ## boxplot
94
+
95
+ Use for distribution/spread/outliers, especially across several groups. Needs **unaggregated** rows. **Use for:** ≥3 columns, ≥2 dimensions, ≥1 measure. **Required:** `graph.dimensions`, `graph.metrics`. X-scale is `"ordinal"`.
96
+
97
+ | Key | Type | Values | Default |
98
+ | -------------------------- | ------- | ---------------------------------------------- | ------------ |
99
+ | `boxplot.whisker_type` | string | `"tukey"` (1.5×IQR), `"min-max"` | `"tukey"` |
100
+ | `boxplot.points_mode` | string | `"none"`, `"outliers"`, `"all"` | `"outliers"` |
101
+ | `boxplot.show_mean` | boolean | | `true` |
102
+ | `boxplot.show_values_mode` | string | `"median"`, `"all"` (when `graph.show_values`) | `"median"` |
103
+
104
+ ---
105
+
106
+ # Part-to-whole & single value — `pie`, `funnel`, `gauge`, `progress`, `scalar`, `smartscalar`
107
+
108
+ ## pie
109
+
110
+ Use for part-to-whole, one snapshot, ≤5 slices. **Use for:** ≥2 rows, ≥2 columns, ≥1 dimension + ≥1 measure. **Required:** `pie.dimension`, `pie.metric`.
111
+
112
+ | Key | Type | Values | Default |
113
+ | ------------------------ | ------------------ | ------------------------------------------------- | ---------------------- |
114
+ | `pie.metric` | string (col name) | the measure | first metric |
115
+ | `pie.dimension` | string \| string[] | the dimension; array = concentric rings (up to 3) | first dimension |
116
+ | `pie.show_legend` | boolean | | `true` |
117
+ | `pie.show_total` | boolean | total in the center | `true` |
118
+ | `pie.show_labels` | boolean | slice labels | `true` if >1 dimension |
119
+ | `pie.percent_visibility` | string | `"off"`, `"legend"`, `"inside"`, `"both"` | `"legend"` |
120
+ | `pie.decimal_places` | number | decimal places for percentages | auto |
121
+ | `pie.slice_threshold` | number (percent) | min slice % before grouping into "Other" | `2.5` |
122
+
123
+ (Set slice colors via the UI/escape hatch.)
124
+
125
+ ## funnel
126
+
127
+ Use for stage drop-off in an ordered, cumulative funnel. **Use for:** 2 columns (stage + value). **Required:** `funnel.dimension`, `funnel.metric`.
128
+
129
+ | Key | Type | Values | Default |
130
+ | ------------------ | ----------------- | ------------------------------------------ | ------------------------------------ |
131
+ | `funnel.dimension` | string (col name) | the step column | first dimension |
132
+ | `funnel.metric` | string (col name) | the step value | first metric |
133
+ | `funnel.type` | string | `"funnel"`, `"bar"` | `"funnel"` (`"bar"` if multi-series) |
134
+ | `funnel.rows` | object[] | step order/enable `{ key, name, enabled }` | data order |
135
+
136
+ ## gauge
137
+
138
+ Use for one value against colored target ranges. **Use for:** 1 row, 1 numeric column.
139
+
140
+ | Key | Type | Notes |
141
+ | ---------------- | -------- | ------------------------------------------------------------------ |
142
+ | `gauge.segments` | object[] | value ranges `{ min, max, color?, label? }` (`min`/`max` required) |
143
+
144
+ ## progress
145
+
146
+ Use for one value's progress toward a goal. **Use for:** 1 row, ≥1 numeric column.
147
+
148
+ | Key | Type | Values | Default |
149
+ | ---------------- | -------------------------- | ------------------------------------- | ------------- |
150
+ | `progress.value` | string (col name) | the numeric column (only if >1) | first numeric |
151
+ | `progress.goal` | number **or** string (col) | a literal target, or a numeric column | `0` |
152
+ | `progress.color` | string (color) | bar color | accent1 |
153
+
154
+ ## scalar
155
+
156
+ A single KPI — this **is** the "Number" viz (`display: scalar`). **Use for:** 1 row, 1 column. Number formatting (currency, decimals, prefix/suffix) is set per-column in `column_settings`, not here.
157
+
158
+ | Key | Type | Notes | Default |
159
+ | ----------------- | ----------------- | --------------------------------------------- | --------- |
160
+ | `scalar.field` | string (col name) | which column to show (only if >1 column) | first col |
161
+ | `scalar.segments` | object[] | color thresholds `{ min, max, color, label }` | `[]` |
162
+
163
+ ## smartscalar
164
+
165
+ Use for a value's change vs the previous period. **Use for:** one value grouped by a single **time** field.
166
+
167
+ | Key | Type | Default |
168
+ | --------------------------------- | ----------------- | --------------- |
169
+ | `scalar.field` | string (col name) | first numeric |
170
+ | `scalar.comparisons` | object[] | up to 3 (below) |
171
+ | `scalar.switch_positive_negative` | boolean | `false` |
172
+ | `scalar.compact_primary_number` | boolean | `false` |
173
+
174
+ Each `scalar.comparisons` entry is `{ id, type, … }`:
175
+
176
+ | `type` | Extra fields | Meaning |
177
+ | ------------------ | ----------------- | ---------------------- |
178
+ | `"previousPeriod"` | — | vs. the prior period |
179
+ | `"previousValue"` | — | vs. the previous value |
180
+ | `"periodsAgo"` | `value` | vs. N periods ago |
181
+ | `"staticNumber"` | `value`, `label` | vs. a fixed number |
182
+ | `"anotherColumn"` | `column`, `label` | vs. another column |
183
+
184
+ ```yaml
185
+ scalar.comparisons:
186
+ - { id: c1, type: previousPeriod }
187
+ - { id: c2, type: periodsAgo, value: 12 }
188
+ - { id: c3, type: staticNumber, value: 1000, label: Target }
189
+ ```
190
+
191
+ ---
192
+
193
+ # Tabular, geographic & flow — `table`, `pivot`, `object`, `map`, `sankey`
194
+
195
+ ## table
196
+
197
+ The universal fallback; use for precise values, many columns, or mixed types. Always renders.
198
+
199
+ | Key | Type | Notes | Default |
200
+ | ---------------------------- | -------- | ---------------------------------------------------------- | ------------------------------------------- |
201
+ | `table.columns` | object[] | column order + visibility `{ name, enabled }` | all columns |
202
+ | `table.column_formatting` | object[] | conditional formatting rules (below) | `[]` |
203
+ | `table.pivot` | boolean | simple in-table pivot (2 dims + 1 metric) | `true` only when 3 cols = 2 dims + 1 metric |
204
+ | `table.pivot_column` | string | dimension whose values become columns (when `table.pivot`) | auto |
205
+ | `table.cell_column` | string | column supplying pivot cell values (when `table.pivot`) | first metric |
206
+ | `table.pagination` | boolean | | `false` |
207
+ | `table.row_index` | boolean | show a row-index column | `false` |
208
+ | `table.freeze_columns` | boolean | freeze leading columns | `false` |
209
+ | `table.freeze_columns_count` | number | how many to freeze (when `freeze_columns`) | `1` |
210
+ | `table.freeze_rows` | boolean | freeze leading rows | `false` |
211
+ | `table.freeze_rows_count` | number | how many to freeze (when `freeze_rows`) | `1` |
212
+
213
+ Per-column titles, currency, links, alignment, and mini bars are set in `column_settings`.
214
+
215
+ **Conditional formatting (`table.column_formatting`)** — a list of rules, each `type: "single"` or `"range"`:
216
+
217
+ ```yaml
218
+ table.column_formatting:
219
+ - {
220
+ columns: [Total],
221
+ type: single,
222
+ operator: ">",
223
+ value: 100,
224
+ color: "#84BB4C",
225
+ highlight_row: false,
226
+ }
227
+ - {
228
+ columns: [Rating],
229
+ type: range,
230
+ colors: ["#ED6E6E", "#F9CF48", "#84BB4C"],
231
+ min_type: custom,
232
+ min_value: 1,
233
+ max_type: custom,
234
+ max_value: 5,
235
+ }
236
+ ```
237
+
238
+ `single` operators: `"="`, `"!="`, `"<"`, `">"`, `"<="`, `">="`, `"is-null"`, `"not-null"`, `"contains"`, `"does-not-contain"`, `"starts-with"`, `"ends-with"`, `"is-true"`, `"is-false"`. `range` `min_type`/`max_type`: `"custom"`, `"all"`, or `null`.
239
+
240
+ ## pivot
241
+
242
+ Use for a cross-tab of two dimensions. Needs an aggregated query built in the query builder (not native), on a database that supports pivots. The split and formatting use the `pivot_table.*` namespace; the totals toggles use `pivot.*`.
243
+
244
+ | Key | Type | Notes | Default |
245
+ | --------------------------------- | -------- | --------------------------------------------------------------- | ------- |
246
+ | `pivot_table.column_split` | object | `{ rows: [...names], columns: [...names], values: [...names] }` | auto |
247
+ | `pivot.show_row_totals` | boolean | | `true` |
248
+ | `pivot.show_column_totals` | boolean | | `true` |
249
+ | `pivot.condense_duplicate_totals` | boolean | hide duplicate total cells | `true` |
250
+ | `pivot_table.column_formatting` | object[] | conditional formatting on measure cells | — |
251
+
252
+ Per-column (under `column_settings[<key>]`): `pivot_table.column_sort_order` (`"ascending"`/`"descending"`), `pivot_table.column_show_totals` (boolean).
253
+
254
+ ## object
255
+
256
+ A single record's detail. `table.columns` (`{ name, enabled }`) picks which fields to show; per-column `column_settings` apply.
257
+
258
+ ## map
259
+
260
+ Three modes via `map.type`. **Region** (`"region"`) colors predefined areas; **pin** (`"pin"`) plots lat/long points; **grid** (`"grid"`) bins points. **Required:** region → `map.region`, `map.dimension`, `map.metric`; pin/grid → `map.latitude_column`, `map.longitude_column`.
261
+
262
+ | Key | Type | Values / notes | Mode |
263
+ | ---------------------------------------------------------- | ----------------- | ----------------------------------------------------------- | -------- |
264
+ | `map.type` | string | `"region"`, `"pin"`, `"grid"` | all |
265
+ | `map.region` | string | `"us_states"`, `"world_countries"`, or a custom-geojson key | region |
266
+ | `map.dimension` | string (col name) | the region column | region |
267
+ | `map.metric` | string (col name) | metric coloring the regions | region |
268
+ | `map.colors` | string[] | region color scale | region |
269
+ | `map.latitude_column` | string (col name) | latitude | pin/grid |
270
+ | `map.longitude_column` | string (col name) | longitude | pin/grid |
271
+ | `map.metric_column` | string (col name) | metric for heat/grid intensity | pin |
272
+ | `map.pin_type` | string | `"tiles"`, `"markers"`, `"grid"`, `"heat"` | pin |
273
+ | `map.heat.radius` / `.blur` / `.min-opacity` / `.max-zoom` | number | heatmap tuning | heat |
274
+
275
+ ## sankey
276
+
277
+ Use for flow volume between nodes. Needs distinct source and target columns forming an acyclic flow (≤150 unique nodes). **Use for:** ≥3 columns, ≥2 non-date dimensions, ≥1 measure. **Required:** `sankey.source`, `sankey.target`, `sankey.value`.
278
+
279
+ | Key | Type | Values | Default |
280
+ | ------------------------------- | ----------------- | -------------------------------- | ---------- |
281
+ | `sankey.source` | string (col name) | flow source | auto |
282
+ | `sankey.target` | string (col name) | flow target | auto |
283
+ | `sankey.value` | string (col name) | edge weight | auto |
284
+ | `sankey.node_align` | string | `"left"`, `"right"`, `"justify"` | `"left"` |
285
+ | `sankey.show_edge_labels` | boolean | | `false` |
286
+ | `sankey.label_value_formatting` | string | `"auto"`, `"compact"`, `"full"` | `"auto"` |
287
+ | `sankey.edge_color` | string | `"gray"`, `"source"`, `"target"` | `"source"` |
288
+
289
+ ---
290
+
291
+ # `column_settings` — per-column formatting
292
+
293
+ A map keyed by a JSON-encoded column reference, applying to `table`, `pie`, `object`, the cartesian charts, and more.
294
+
295
+ **Key forms:** prefer the name form `["name", "<output column name>"]` — it's what Metabase writes and is identical across API and portable forms. A legacy ref form `["ref", ["field", <id>, <opts>]]` exists for read-back; its inner field ref uses the **legacy order** (id second) with a numeric id in the API form — avoid it. In a JSON body the key is an escaped string: `"[\"name\",\"TOTAL\"]"`.
296
+
297
+ | Key | Type | Values | Applies to |
298
+ | -------------------- | ------------ | ------------------------------------------------------------ | --------------- |
299
+ | `column_title` | string | header override | all |
300
+ | `text_align` | string | `"left"`, `"right"`, `"middle"` | table |
301
+ | `view_as` | string\|null | `null` (text), `"link"`, `"email_link"`, `"image"`, `"auto"` | table |
302
+ | `link_text` | string | text for a link/email_link (supports `{{COLUMN}}`) | table |
303
+ | `link_url` | string | target URL (supports `{{COLUMN}}`) | table |
304
+ | `show_mini_bar` | boolean | inline bar in the cell | number |
305
+ | `text_wrapping` | boolean | wrap long text | string |
306
+ | `number_style` | string | `"decimal"`, `"currency"`, `"percent"`, `"scientific"` | number |
307
+ | `currency` | string | ISO code, e.g. `"USD"` | currency |
308
+ | `currency_style` | string | `"symbol"`, `"narrowSymbol"`, `"code"`, `"name"` | currency |
309
+ | `currency_in_header` | boolean | show currency in the header vs every cell | currency, table |
310
+ | `number_separators` | string | `".,"`, `", "`, `",."`, `"."`, `".’"` | number |
311
+ | `decimals` | number | fixed decimal places | number |
312
+ | `scale` | number | multiply the value by this factor | number |
313
+ | `prefix` / `suffix` | string | affixes around the value | number |
314
+ | `date_style` | string | moment.js format, e.g. `"MMMM D, YYYY"` | date |
315
+ | `date_separator` | string | `"/"`, `"-"`, `"."` | date |
316
+ | `date_abbreviate` | boolean | abbreviate day/month names | date |
317
+ | `time_enabled` | string\|null | `null`, `"minutes"`, `"seconds"`, `"milliseconds"` | date+time |
318
+ | `time_style` | string | e.g. `"h:mm A"`, `"HH:mm"` | date+time |
319
+ | `click_behavior` | object | per-column click behavior — **dashcards only** (below) | all |
320
+
321
+ ```yaml
322
+ column_settings:
323
+ '["name","TOTAL"]':
324
+ number_style: currency
325
+ currency: USD
326
+ decimals: 2
327
+ column_title: "Total Revenue"
328
+ '["name","CREATED_AT"]': { date_style: "MMMM D, YYYY", time_enabled: null }
329
+ '["name","EMAIL"]': { view_as: email_link, link_text: "Email {{NAME}}" }
330
+ ```
331
+
332
+ ---
333
+
334
+ # `series_settings` — per-series styling (cartesian)
335
+
336
+ A map under `series_settings`, keyed by series name: the metric column's name for a single series, or the breakout value for a broken-out series.
337
+
338
+ | Key | Type | Values | Default |
339
+ | ----------------------- | ------------- | ---------------------------------------------------- | --------------- |
340
+ | `title` | string | series label | column name |
341
+ | `color` | string | series color | palette |
342
+ | `display` | string | `"line"`, `"area"`, `"bar"` (per-series type, combo) | card default |
343
+ | `line.interpolate` | string | `"linear"`, `"cardinal"` (curved), `"step-after"` | `"linear"` |
344
+ | `line.style` | string | `"solid"`, `"dashed"`, `"dotted"` | `"solid"` |
345
+ | `line.size` | string | `"S"`, `"M"`, `"L"` | `"M"` |
346
+ | `line.marker_enabled` | boolean\|null | `null` (auto), `true`, `false` | `null` |
347
+ | `line.missing` | string | `"zero"`, `"none"`, `"interpolate"` | `"interpolate"` |
348
+ | `axis` | string\|null | `null` (auto), `"left"`, `"right"` | `null` |
349
+ | `show_series_values` | boolean | value labels for this series | inherits chart |
350
+ | `show_series_trendline` | boolean | trend line for this series | inherits chart |
351
+
352
+ `line.*` keys apply only when the series `display` is `line`/`area`.
353
+
354
+ ```yaml
355
+ series_settings:
356
+ Revenue: { display: line, color: "#509EE3", axis: left, show_series_values: true }
357
+ ```
358
+
359
+ ---
360
+
361
+ # Virtual cards (dashcards only, `card_id: null`)
362
+
363
+ Text/heading/link/iframe tiles carry `visualization_settings.virtual_card.display`:
364
+
365
+ | `virtual_card.display` | Extra keys |
366
+ | ---------------------- | -------------------------------------------------------------------------------------------------------------- |
367
+ | `heading` | `text` (the heading string) |
368
+ | `text` | `text` (markdown; `{{param}}` placeholders wired via dashcard `parameter_mappings`, target `[text-tag, name]`) |
369
+ | `link` | `link.url`, or `link.entity` `{ id, model }`, model ∈ `question`/`dashboard`/`collection`/`database`/`table` |
370
+ | `iframe` | `iframe` (the `<iframe …>` HTML string) |
371
+
372
+ ```yaml
373
+ visualization_settings:
374
+ virtual_card: { display: text }
375
+ text: "**Bold** and _italic_ markdown content"
376
+ ```
377
+
378
+ ---
379
+
380
+ # Click behavior (dashcards only)
381
+
382
+ Click behavior is a **dashboard** feature — author it in a **dashcard's** `visualization_settings` (whole-card) or its `column_settings[<key>].click_behavior` (per column), **not** in a saved card's own `visualization_settings`. There is no query-builder UI for it, and the interactive types need the dashboard around them: `crossfilter` reads the dashboard's parameters, and links to a `question`/`dashboard` resolve against the dashboard's target entities — both do nothing on a standalone card. (A bare URL link is the only type not strictly gated by dashboard context, but it's still only authored on dashcards.)
383
+
384
+ `type` is `actionMenu` (default drill-through menu), `crossfilter` (filter the dashboard with the clicked value), or `link` (go to a URL, question, or dashboard).
385
+
386
+ ```yaml
387
+ # Link to a URL — {{column}} = clicked row value, {{filter:param}} = dashboard parameter
388
+ click_behavior:
389
+ type: link
390
+ linkType: url
391
+ linkTemplate: "https://example.com/orders/{{ORDER_ID}}?status={{filter:status}}"
392
+
393
+ # Link to another dashboard/question — targetId is the target's entity_id
394
+ click_behavior:
395
+ type: link
396
+ linkType: dashboard # or "question"
397
+ targetId: Q_jD-f-9clKLFZ2TfUG2h
398
+ parameterMapping:
399
+ target-param-uuid:
400
+ id: target-param-uuid
401
+ source: { id: USER_ID, name: User ID, type: column }
402
+ target: { id: target-param-uuid, type: parameter }
403
+
404
+ # Crossfilter — map a clicked column to dashboard parameters
405
+ click_behavior:
406
+ type: crossfilter
407
+ parameterMapping:
408
+ param-uuid:
409
+ id: param-uuid
410
+ source: { id: CATEGORY, name: Category, type: column }
411
+ target: { id: param-uuid, type: parameter }
412
+ ```
413
+
414
+ In `parameterMapping`, `source` is `{ id, name, type }` (type `"column"`/`"parameter"`) and `target` is `{ id, type }` (type `"parameter"`/`"dimension"`/`"variable"`); a `dimension` target also carries a `dimension` array.
@@ -1,19 +0,0 @@
1
- import { defineCommand } from "citty";
2
-
3
- //#region src/commands/auth/index.ts
4
- var auth_default = defineCommand({
5
- meta: {
6
- name: "auth",
7
- description: "Authenticate against a Metabase instance"
8
- },
9
- default: "login",
10
- subCommands: {
11
- login: () => import("./login-enh9Yimb.mjs").then((m) => m.default),
12
- status: () => import("./status-BNvFPemM.mjs").then((m) => m.default),
13
- list: () => import("./list-C-oZe1_p.mjs").then((m) => m.default),
14
- logout: () => import("./logout-BWLPLDh8.mjs").then((m) => m.default)
15
- }
16
- });
17
-
18
- //#endregion
19
- export { auth_default as default };
@@ -1,20 +0,0 @@
1
- import { defineCommand } from "citty";
2
-
3
- //#region src/commands/card/index.ts
4
- var card_default = defineCommand({
5
- meta: {
6
- name: "card",
7
- description: "Manage Metabase cards (questions, models, metrics)"
8
- },
9
- subCommands: {
10
- list: () => import("./list-DfDZr55C.mjs").then((mod) => mod.default),
11
- get: () => import("./get-sMpa-X4E.mjs").then((mod) => mod.default),
12
- query: () => import("./query-DYVBnu9d.mjs").then((mod) => mod.default),
13
- create: () => import("./create-BIphz0kO.mjs").then((mod) => mod.default),
14
- update: () => import("./update-DCrOQ1PW.mjs").then((mod) => mod.default),
15
- archive: () => import("./archive-De8jzzq7.mjs").then((mod) => mod.default)
16
- }
17
- });
18
-
19
- //#endregion
20
- export { card_default as default };
@@ -1,20 +0,0 @@
1
- import { defineCommand } from "citty";
2
-
3
- //#region src/commands/collection/index.ts
4
- var collection_default = defineCommand({
5
- meta: {
6
- name: "collection",
7
- description: "Manage Metabase collections"
8
- },
9
- subCommands: {
10
- list: () => import("./list-CU6sOfI-.mjs").then((mod) => mod.default),
11
- get: () => import("./get-CRvbChoX.mjs").then((mod) => mod.default),
12
- items: () => import("./items-C94eW2Yd.mjs").then((mod) => mod.default),
13
- tree: () => import("./tree-mvq9gM9w.mjs").then((mod) => mod.default),
14
- create: () => import("./create-w3mQg9n4.mjs").then((mod) => mod.default),
15
- archive: () => import("./archive-DTN9tLGT.mjs").then((mod) => mod.default)
16
- }
17
- });
18
-
19
- //#endregion
20
- export { collection_default as default };
@@ -1,21 +0,0 @@
1
- import { defineCommand } from "citty";
2
-
3
- //#region src/commands/dashboard/index.ts
4
- var dashboard_default = defineCommand({
5
- meta: {
6
- name: "dashboard",
7
- description: "Manage Metabase dashboards"
8
- },
9
- subCommands: {
10
- list: () => import("./list-CqN4gvCk.mjs").then((mod) => mod.default),
11
- get: () => import("./get-C9O_aEGo.mjs").then((mod) => mod.default),
12
- cards: () => import("./cards-Dq3nx_9n.mjs").then((mod) => mod.default),
13
- create: () => import("./create-9DBTkbMq.mjs").then((mod) => mod.default),
14
- update: () => import("./update-tRparnUs.mjs").then((mod) => mod.default),
15
- "update-dashcard": () => import("./update-dashcard-DFvIz8Qj.mjs").then((mod) => mod.default),
16
- archive: () => import("./archive-B3qiL-kK.mjs").then((mod) => mod.default)
17
- }
18
- });
19
-
20
- //#endregion
21
- export { dashboard_default as default };
@@ -1,22 +0,0 @@
1
- import { defineCommand } from "citty";
2
-
3
- //#region src/commands/db/index.ts
4
- var db_default = defineCommand({
5
- meta: {
6
- name: "db",
7
- description: "Inspect and sync Metabase databases",
8
- alias: "database"
9
- },
10
- subCommands: {
11
- list: () => import("./list-BS_Bxejg.mjs").then((m) => m.default),
12
- get: () => import("./get-CiZrZJLt.mjs").then((m) => m.default),
13
- metadata: () => import("./metadata-BTTEBWdS.mjs").then((m) => m.default),
14
- schemas: () => import("./schemas-BP7xiktH.mjs").then((m) => m.default),
15
- "schema-tables": () => import("./schema-tables-C2xM3dho.mjs").then((m) => m.default),
16
- "sync-schema": () => import("./sync-schema-C3odu0ZH.mjs").then((m) => m.default),
17
- "rescan-values": () => import("./rescan-values-cfTSNQZo.mjs").then((m) => m.default)
18
- }
19
- });
20
-
21
- //#endregion
22
- export { db_default as default };
@@ -1,18 +0,0 @@
1
- import { defineCommand } from "citty";
2
-
3
- //#region src/commands/field/index.ts
4
- var field_default = defineCommand({
5
- meta: {
6
- name: "field",
7
- description: "Manage Metabase fields"
8
- },
9
- subCommands: {
10
- get: () => import("./get-42tJ7BNp.mjs").then((m) => m.default),
11
- values: () => import("./values-D1RJE4H6.mjs").then((m) => m.default),
12
- summary: () => import("./summary-Cihbx0Qs.mjs").then((m) => m.default),
13
- update: () => import("./update-Rr4usmCo.mjs").then((m) => m.default)
14
- }
15
- });
16
-
17
- //#endregion
18
- export { field_default as default };
@@ -1,28 +0,0 @@
1
- import { defineCommand } from "citty";
2
-
3
- //#region src/commands/git-sync/index.ts
4
- var git_sync_default = defineCommand({
5
- meta: {
6
- name: "git-sync",
7
- description: "Sync Metabase content with a git remote"
8
- },
9
- subCommands: {
10
- status: () => import("./status-B1EJ_jv0.mjs").then((mod) => mod.default),
11
- "is-dirty": () => import("./is-dirty-CPzOnnH6.mjs").then((mod) => mod.default),
12
- "has-remote-changes": () => import("./has-remote-changes-CfRidwXT.mjs").then((mod) => mod.default),
13
- dirty: () => import("./dirty-BCkNOY8c.mjs").then((mod) => mod.default),
14
- "current-task": () => import("./current-task-DZM28rnr.mjs").then((mod) => mod.default),
15
- "cancel-task": () => import("./cancel-task-BLGE4UlL.mjs").then((mod) => mod.default),
16
- wait: () => import("./wait-DK5QDZ8n.mjs").then((mod) => mod.default),
17
- import: () => import("./import-BZV0Z2KR.mjs").then((mod) => mod.default),
18
- export: () => import("./export-CgHgWW3I.mjs").then((mod) => mod.default),
19
- stash: () => import("./stash-C89zNKxo.mjs").then((mod) => mod.default),
20
- branches: () => import("./branches-CIGkjXIk.mjs").then((mod) => mod.default),
21
- "create-branch": () => import("./create-branch-DGoc9CUU.mjs").then((mod) => mod.default),
22
- "add-collection": () => import("./add-collection-C9BdVBs2.mjs").then((mod) => mod.default),
23
- "remove-collection": () => import("./remove-collection-CBAHz0Dk.mjs").then((mod) => mod.default)
24
- }
25
- });
26
-
27
- //#endregion
28
- export { git_sync_default as default };
@@ -1,10 +0,0 @@
1
- import "./command-augment-BH9qgQ5u.mjs";
2
- import "./error-ZsFeevV2.mjs";
3
- import "./runtime-Duawf5lE.mjs";
4
- import "./capabilities-7e9MgquN.mjs";
5
- import "./render-0_GsapXa.mjs";
6
- import "./poll-task-51WRdugU.mjs";
7
- import "./poll-4eoh5J0r.mjs";
8
- import { IsDirtyResult, is_dirty_default } from "./is-dirty-hKcB4OH9.mjs";
9
-
10
- export { is_dirty_default as default };
@@ -1,19 +0,0 @@
1
- import { defineCommand } from "citty";
2
-
3
- //#region src/commands/measure/index.ts
4
- var measure_default = defineCommand({
5
- meta: {
6
- name: "measure",
7
- description: "Manage Metabase measures"
8
- },
9
- subCommands: {
10
- list: () => import("./list-HS15y_WN.mjs").then((mod) => mod.default),
11
- get: () => import("./get-y17zJMnU.mjs").then((mod) => mod.default),
12
- create: () => import("./create-BdPoSk_7.mjs").then((mod) => mod.default),
13
- update: () => import("./update-CbBnHz42.mjs").then((mod) => mod.default),
14
- archive: () => import("./archive-CuVk8iwN.mjs").then((mod) => mod.default)
15
- }
16
- });
17
-
18
- //#endregion
19
- export { measure_default as default };
@@ -1,19 +0,0 @@
1
- import { defineCommand } from "citty";
2
-
3
- //#region src/commands/segment/index.ts
4
- var segment_default = defineCommand({
5
- meta: {
6
- name: "segment",
7
- description: "Manage Metabase segments"
8
- },
9
- subCommands: {
10
- list: () => import("./list-BFlzLGlw.mjs").then((mod) => mod.default),
11
- get: () => import("./get-B9kwSs6U.mjs").then((mod) => mod.default),
12
- create: () => import("./create-DHscDhRd.mjs").then((mod) => mod.default),
13
- update: () => import("./update-VvKMnwsM.mjs").then((mod) => mod.default),
14
- archive: () => import("./archive-BXzghEQX.mjs").then((mod) => mod.default)
15
- }
16
- });
17
-
18
- //#endregion
19
- export { segment_default as default };