@mono-lit/helper 0.0.0-stage → 0.0.2

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 (539) hide show
  1. package/LICENSE.md +55 -0
  2. package/README.md +35 -3
  3. package/dist/breakpoints-CAbhDUht.js +84 -0
  4. package/dist/checkbox-Cqpie9Ap.js +4 -0
  5. package/dist/chip-DBUUa2eB.js +4 -0
  6. package/dist/chip-limits-BMoO31JM.js +213 -0
  7. package/dist/chip-strip-Cw3gyz0q.js +213 -0
  8. package/dist/color-DHYrfXsX.js +253 -0
  9. package/dist/css-class-BRKRzHx-.js +60 -0
  10. package/dist/css-size-DhHSVZJK.js +37 -0
  11. package/dist/data/theme/presets.json.d.ts +140 -0
  12. package/dist/data-source-controller-B_rgHCjw.js +241 -0
  13. package/dist/data-source-controller-Dbb4fd8I.js +241 -0
  14. package/dist/data-source-options-CP-X62Pa.js +535 -0
  15. package/dist/data-source-options-Jqj7LU3Z.js +537 -0
  16. package/dist/data-source-read-B4DGp6UQ.js +216 -0
  17. package/dist/data-source-read-DL88aH8t.js +217 -0
  18. package/dist/decorate-DEXtNagw.js +141 -0
  19. package/dist/element-props-CLB6yvbm.js +114 -0
  20. package/dist/esm-Ptok4SQZ.js +2026 -0
  21. package/dist/excel-CY6zGkcx.js +608 -0
  22. package/dist/excel-DopRbEMK.js +608 -0
  23. package/dist/export-BiGVyxt6.js +2302 -0
  24. package/dist/export.d.ts +1 -0
  25. package/dist/export.js +2302 -0
  26. package/dist/field-icons-DELrSdqJ.js +86 -0
  27. package/dist/field-path-C92eGLg3.js +251 -0
  28. package/dist/filter-builder-Bke3qOgJ.js +205 -0
  29. package/dist/filter-builder-CE4zE0V5.js +205 -0
  30. package/dist/filter-eval-DIfU2EAn.js +173 -0
  31. package/dist/filter-odata-C1vSGZaY.js +591 -0
  32. package/dist/form-control-core-B8d7k6vk.js +223 -0
  33. package/dist/form-control-core-eeRr0zLU.js +223 -0
  34. package/dist/hydration-flush-RB5Tz5nl.js +1001 -0
  35. package/dist/icon-CJkTlmTb.js +55 -0
  36. package/dist/icon-dVhYJUIH.js +17 -0
  37. package/dist/import-BgJdkwBI.js +606 -0
  38. package/dist/import.d.ts +1 -0
  39. package/dist/import.js +606 -0
  40. package/dist/index.d.ts +1 -0
  41. package/dist/index.js +16 -0
  42. package/dist/index.node-BIqEGehH.js +396 -0
  43. package/dist/index.node.d.ts +1 -0
  44. package/dist/index.node.js +16 -0
  45. package/dist/input-zGOULADt.js +4 -0
  46. package/dist/layout-var-CZnzMC0s.js +73 -0
  47. package/dist/light-slots-BVJwyg_2.js +244 -0
  48. package/dist/light-slots-DW1WgfgT.js +254 -0
  49. package/dist/markdown-DfqrfOJN.js +20146 -0
  50. package/dist/mono-button-simcTQdW.js +873 -0
  51. package/dist/mono-button.shadow-B_rKOY9N.js +784 -0
  52. package/dist/mono-data-chart-CEv29_NS.js +779 -0
  53. package/dist/mono-data-dropdown-Wnoke6zO.js +357 -0
  54. package/dist/mono-data-grid-CjkEqxgE.js +3913 -0
  55. package/dist/mono-data-grid-YjR3n9Ar.js +3915 -0
  56. package/dist/mono-element-B0kP_96P.js +232 -0
  57. package/dist/mono-event-Bi1qP9uN.js +129 -0
  58. package/dist/mono-form-controller-5PfsU4qa.js +409 -0
  59. package/dist/mono-modal-controller-BMO3n3rP.js +223 -0
  60. package/dist/mono-ui-CPV7rrdo.js +358 -0
  61. package/dist/normalize-error-Gcgmgh5i.js +871 -0
  62. package/dist/notifier-CE4yxMUQ.js +88 -0
  63. package/dist/nuxt.d.ts +1 -0
  64. package/dist/nuxt.js +130 -0
  65. package/dist/popup-portal-BziRX1yG.js +465 -0
  66. package/dist/popup-stack-CEEMib__.js +189 -0
  67. package/dist/rate-limit-BBa2PO79.js +521 -0
  68. package/dist/reactive-D3EERqgO.js +47 -0
  69. package/dist/reactive-Di3mTMnV.js +1087 -0
  70. package/dist/search.d.ts +1 -0
  71. package/dist/search.js +97 -0
  72. package/dist/src/components/accordion/accordion-core.d.ts +62 -0
  73. package/dist/src/components/accordion/accordion-types.d.ts +62 -0
  74. package/dist/src/components/accordion/index.d.ts +3 -0
  75. package/dist/src/components/accordion/index.shadow.d.ts +5 -0
  76. package/dist/src/components/accordion/mono-accordion.d.ts +55 -0
  77. package/dist/src/components/accordion/mono-accordion.shadow.d.ts +56 -0
  78. package/dist/src/components/alert/alert-core.d.ts +46 -0
  79. package/dist/src/components/alert/alert-types.d.ts +44 -0
  80. package/dist/src/components/alert/index.d.ts +3 -0
  81. package/dist/src/components/alert/index.shadow.d.ts +5 -0
  82. package/dist/src/components/alert/mono-alert.d.ts +44 -0
  83. package/dist/src/components/alert/mono-alert.shadow.d.ts +34 -0
  84. package/dist/src/components/breadcrumb/breadcrumb-core.d.ts +61 -0
  85. package/dist/src/components/breadcrumb/breadcrumb-list-core.d.ts +49 -0
  86. package/dist/src/components/breadcrumb/breadcrumb-render.d.ts +31 -0
  87. package/dist/src/components/breadcrumb/breadcrumb-types.d.ts +117 -0
  88. package/dist/src/components/breadcrumb/breadcrumb-utils.d.ts +43 -0
  89. package/dist/src/components/breadcrumb/index.d.ts +6 -0
  90. package/dist/src/components/breadcrumb/index.shadow.d.ts +8 -0
  91. package/dist/src/components/breadcrumb/mono-breadcrumb-list.d.ts +29 -0
  92. package/dist/src/components/breadcrumb/mono-breadcrumb-list.shadow.d.ts +48 -0
  93. package/dist/src/components/breadcrumb/mono-breadcrumb.d.ts +38 -0
  94. package/dist/src/components/breadcrumb/mono-breadcrumb.shadow.d.ts +73 -0
  95. package/dist/src/components/button/button-core.d.ts +90 -0
  96. package/dist/src/components/button/button-dropdown-core.d.ts +57 -0
  97. package/dist/src/components/button/button-dropdown-types.d.ts +129 -0
  98. package/dist/src/components/button/button-types.d.ts +219 -0
  99. package/dist/src/components/button/button-utils.d.ts +18 -0
  100. package/dist/src/components/button/index.button-dropdown.d.ts +4 -0
  101. package/dist/src/components/button/index.button-dropdown.shadow.d.ts +4 -0
  102. package/dist/src/components/button/index.d.ts +8 -0
  103. package/dist/src/components/button/index.shadow.d.ts +5 -0
  104. package/dist/src/components/button/mono-button-dropdown.d.ts +35 -0
  105. package/dist/src/components/button/mono-button-dropdown.shadow.d.ts +45 -0
  106. package/dist/src/components/button/mono-button.d.ts +123 -0
  107. package/dist/src/components/button/mono-button.shadow.d.ts +56 -0
  108. package/dist/src/components/card/card-core.d.ts +75 -0
  109. package/dist/src/components/card/card-types.d.ts +137 -0
  110. package/dist/src/components/card/card-utils.d.ts +23 -0
  111. package/dist/src/components/card/index.d.ts +4 -0
  112. package/dist/src/components/card/index.shadow.d.ts +6 -0
  113. package/dist/src/components/card/mono-card.d.ts +56 -0
  114. package/dist/src/components/card/mono-card.shadow.d.ts +52 -0
  115. package/dist/src/components/chart/chart-core.d.ts +43 -0
  116. package/dist/src/components/chart/chart-odata.d.ts +52 -0
  117. package/dist/src/components/chart/chart-types.d.ts +356 -0
  118. package/dist/src/components/chart/index.d.ts +8 -0
  119. package/dist/src/components/chart/index.shadow.d.ts +7 -0
  120. package/dist/src/components/chart/mono-chart-presets.d.ts +43 -0
  121. package/dist/src/components/chart/mono-chart-presets.shadow.d.ts +43 -0
  122. package/dist/src/components/chart/mono-chart.d.ts +30 -0
  123. package/dist/src/components/chart/mono-chart.shadow.d.ts +22 -0
  124. package/dist/src/components/chart/mono-data-chart.d.ts +27 -0
  125. package/dist/src/components/checkbox/checkbox-core.d.ts +53 -0
  126. package/dist/src/components/checkbox/checkbox-types.d.ts +69 -0
  127. package/dist/src/components/checkbox/checkbox-utils.d.ts +35 -0
  128. package/dist/src/components/checkbox/index.d.ts +4 -0
  129. package/dist/src/components/checkbox/index.shadow.d.ts +5 -0
  130. package/dist/src/components/checkbox/mono-checkbox.d.ts +34 -0
  131. package/dist/src/components/checkbox/mono-checkbox.shadow.d.ts +45 -0
  132. package/dist/src/components/chip/chip-core.d.ts +58 -0
  133. package/dist/src/components/chip/chip-types.d.ts +142 -0
  134. package/dist/src/components/chip/chip-utils.d.ts +24 -0
  135. package/dist/src/components/chip/index.d.ts +8 -0
  136. package/dist/src/components/chip/index.shadow.d.ts +6 -0
  137. package/dist/src/components/chip/mono-chip.d.ts +48 -0
  138. package/dist/src/components/chip/mono-chip.shadow.d.ts +33 -0
  139. package/dist/src/components/chip/mono-status-dot.d.ts +34 -0
  140. package/dist/src/components/date/date-core.d.ts +80 -0
  141. package/dist/src/components/date/date-types.d.ts +163 -0
  142. package/dist/src/components/date/index.d.ts +3 -0
  143. package/dist/src/components/date/index.shadow.d.ts +4 -0
  144. package/dist/src/components/date/mono-date.d.ts +22 -0
  145. package/dist/src/components/date/mono-date.shadow.d.ts +31 -0
  146. package/dist/src/components/drawer/drawer-core.d.ts +99 -0
  147. package/dist/src/components/drawer/drawer-types.d.ts +153 -0
  148. package/dist/src/components/drawer/index.d.ts +3 -0
  149. package/dist/src/components/drawer/index.shadow.d.ts +4 -0
  150. package/dist/src/components/drawer/mono-drawer.d.ts +45 -0
  151. package/dist/src/components/drawer/mono-drawer.shadow.d.ts +46 -0
  152. package/dist/src/components/dropdown/dropdown-core.d.ts +33 -0
  153. package/dist/src/components/dropdown/dropdown-types.d.ts +88 -0
  154. package/dist/src/components/dropdown/index.d.ts +3 -0
  155. package/dist/src/components/dropdown/index.shadow.d.ts +4 -0
  156. package/dist/src/components/dropdown/mono-dropdown.d.ts +34 -0
  157. package/dist/src/components/dropdown/mono-dropdown.shadow.d.ts +28 -0
  158. package/dist/src/components/dropdown-table/dropdown-table-core.d.ts +65 -0
  159. package/dist/src/components/dropdown-table/dropdown-table-types.d.ts +278 -0
  160. package/dist/src/components/dropdown-table/index.d.ts +5 -0
  161. package/dist/src/components/dropdown-table/index.shadow.d.ts +6 -0
  162. package/dist/src/components/dropdown-table/mono-data-dropdown.d.ts +152 -0
  163. package/dist/src/components/dropdown-table/mono-dropdown-table.d.ts +46 -0
  164. package/dist/src/components/dropdown-table/mono-dropdown-table.shadow.d.ts +22 -0
  165. package/dist/src/components/file-upload/file-upload-core.d.ts +60 -0
  166. package/dist/src/components/file-upload/file-upload-types.d.ts +145 -0
  167. package/dist/src/components/file-upload/file-upload-utils.d.ts +16 -0
  168. package/dist/src/components/file-upload/index.d.ts +4 -0
  169. package/dist/src/components/file-upload/index.shadow.d.ts +5 -0
  170. package/dist/src/components/file-upload/mono-file-upload.d.ts +33 -0
  171. package/dist/src/components/file-upload/mono-file-upload.shadow.d.ts +50 -0
  172. package/dist/src/components/filter/filter-builder-core.d.ts +36 -0
  173. package/dist/src/components/filter/filter-builder.d.ts +23 -0
  174. package/dist/src/components/filter/filter-odata.d.ts +27 -0
  175. package/dist/src/components/filter/filter-operators.d.ts +13 -0
  176. package/dist/src/components/filter/filter-types.d.ts +253 -0
  177. package/dist/src/components/filter/index.d.ts +6 -0
  178. package/dist/src/components/filter/index.shadow.d.ts +7 -0
  179. package/dist/src/components/filter/mono-filter-builder.d.ts +21 -0
  180. package/dist/src/components/filter/mono-filter-builder.shadow.d.ts +17 -0
  181. package/dist/src/components/form/form-control-core.d.ts +37 -0
  182. package/dist/src/components/form/form-rules.d.ts +25 -0
  183. package/dist/src/components/form/form-types.d.ts +307 -0
  184. package/dist/src/components/form/index.d.ts +6 -0
  185. package/dist/src/components/form/mono-form-controller.d.ts +16 -0
  186. package/dist/src/components/input/index.d.ts +6 -0
  187. package/dist/src/components/input/index.shadow.d.ts +8 -0
  188. package/dist/src/components/input/input-core.d.ts +91 -0
  189. package/dist/src/components/input/input-format.d.ts +118 -0
  190. package/dist/src/components/input/input-types.d.ts +179 -0
  191. package/dist/src/components/input/input-utils.d.ts +10 -0
  192. package/dist/src/components/input/mono-input.d.ts +46 -0
  193. package/dist/src/components/input/mono-input.shadow.d.ts +34 -0
  194. package/dist/src/components/menu/index.d.ts +6 -0
  195. package/dist/src/components/menu/index.shadow.d.ts +7 -0
  196. package/dist/src/components/menu/menu-core.d.ts +65 -0
  197. package/dist/src/components/menu/menu-render.d.ts +55 -0
  198. package/dist/src/components/menu/menu-types.d.ts +195 -0
  199. package/dist/src/components/menu/menu-utils.d.ts +53 -0
  200. package/dist/src/components/menu/mono-menu-list.d.ts +118 -0
  201. package/dist/src/components/menu/mono-menu.d.ts +39 -0
  202. package/dist/src/components/menu/mono-menu.shadow.d.ts +40 -0
  203. package/dist/src/components/modal/index.d.ts +4 -0
  204. package/dist/src/components/modal/index.shadow.d.ts +5 -0
  205. package/dist/src/components/modal/modal-core.d.ts +110 -0
  206. package/dist/src/components/modal/modal-types.d.ts +304 -0
  207. package/dist/src/components/modal/mono-modal-controller.d.ts +4 -0
  208. package/dist/src/components/modal/mono-modal.d.ts +45 -0
  209. package/dist/src/components/modal/mono-modal.shadow.d.ts +50 -0
  210. package/dist/src/components/nav/index.d.ts +4 -0
  211. package/dist/src/components/nav/index.shadow.d.ts +6 -0
  212. package/dist/src/components/nav/mono-nav.d.ts +41 -0
  213. package/dist/src/components/nav/mono-nav.shadow.d.ts +21 -0
  214. package/dist/src/components/nav/nav-core.d.ts +34 -0
  215. package/dist/src/components/nav/nav-types.d.ts +48 -0
  216. package/dist/src/components/nav/nav-utils.d.ts +12 -0
  217. package/dist/src/components/radio/index.d.ts +4 -0
  218. package/dist/src/components/radio/index.shadow.d.ts +5 -0
  219. package/dist/src/components/radio/mono-radio.d.ts +31 -0
  220. package/dist/src/components/radio/mono-radio.shadow.d.ts +35 -0
  221. package/dist/src/components/radio/radio-core.d.ts +45 -0
  222. package/dist/src/components/radio/radio-types.d.ts +58 -0
  223. package/dist/src/components/radio/radio-utils.d.ts +12 -0
  224. package/dist/src/components/rich-text-editor/index.d.ts +5 -0
  225. package/dist/src/components/rich-text-editor/index.shadow.d.ts +6 -0
  226. package/dist/src/components/rich-text-editor/mono-rich-text-editor.d.ts +31 -0
  227. package/dist/src/components/rich-text-editor/mono-rich-text-editor.shadow.d.ts +34 -0
  228. package/dist/src/components/rich-text-editor/rich-text-editor-core.d.ts +100 -0
  229. package/dist/src/components/rich-text-editor/rich-text-editor-loader.d.ts +17 -0
  230. package/dist/src/components/rich-text-editor/rich-text-editor-toolbar.d.ts +65 -0
  231. package/dist/src/components/rich-text-editor/rich-text-editor-types.d.ts +231 -0
  232. package/dist/src/components/select/index.d.ts +4 -0
  233. package/dist/src/components/select/index.shadow.d.ts +5 -0
  234. package/dist/src/components/select/mono-select.d.ts +69 -0
  235. package/dist/src/components/select/mono-select.shadow.d.ts +48 -0
  236. package/dist/src/components/select/select-core.d.ts +98 -0
  237. package/dist/src/components/select/select-types.d.ts +284 -0
  238. package/dist/src/components/select/select-utils.d.ts +7 -0
  239. package/dist/src/components/sidebar/index.d.ts +4 -0
  240. package/dist/src/components/sidebar/index.shadow.d.ts +6 -0
  241. package/dist/src/components/sidebar/mono-sidebar.d.ts +34 -0
  242. package/dist/src/components/sidebar/mono-sidebar.shadow.d.ts +27 -0
  243. package/dist/src/components/sidebar/sidebar-core.d.ts +51 -0
  244. package/dist/src/components/sidebar/sidebar-types.d.ts +119 -0
  245. package/dist/src/components/sidebar/sidebar-utils.d.ts +55 -0
  246. package/dist/src/components/switch/index.d.ts +4 -0
  247. package/dist/src/components/switch/index.shadow.d.ts +5 -0
  248. package/dist/src/components/switch/mono-switch.d.ts +31 -0
  249. package/dist/src/components/switch/mono-switch.shadow.d.ts +36 -0
  250. package/dist/src/components/switch/switch-core.d.ts +49 -0
  251. package/dist/src/components/switch/switch-types.d.ts +64 -0
  252. package/dist/src/components/switch/switch-utils.d.ts +12 -0
  253. package/dist/src/components/table/array-source.d.ts +44 -0
  254. package/dist/src/components/table/date-filter-tree.d.ts +93 -0
  255. package/dist/src/components/table/grouping.d.ts +55 -0
  256. package/dist/src/components/table/index.d.ts +33 -0
  257. package/dist/src/components/table/index.shadow.d.ts +47 -0
  258. package/dist/src/components/table/mono-data-grid.d.ts +1756 -0
  259. package/dist/src/components/table/mono-table-checkbox-core.d.ts +76 -0
  260. package/dist/src/components/table/mono-table-checkbox.d.ts +34 -0
  261. package/dist/src/components/table/mono-table-checkbox.shadow.d.ts +26 -0
  262. package/dist/src/components/table/mono-table-detail-core.d.ts +87 -0
  263. package/dist/src/components/table/mono-table-detail.d.ts +32 -0
  264. package/dist/src/components/table/mono-table-detail.shadow.d.ts +31 -0
  265. package/dist/src/components/table/mono-table-empty-core.d.ts +60 -0
  266. package/dist/src/components/table/mono-table-empty.d.ts +35 -0
  267. package/dist/src/components/table/mono-table-empty.shadow.d.ts +40 -0
  268. package/dist/src/components/table/mono-table-error-core.d.ts +84 -0
  269. package/dist/src/components/table/mono-table-error.d.ts +28 -0
  270. package/dist/src/components/table/mono-table-error.shadow.d.ts +21 -0
  271. package/dist/src/components/table/mono-table-info-core.d.ts +13 -0
  272. package/dist/src/components/table/mono-table-info.d.ts +19 -0
  273. package/dist/src/components/table/mono-table-info.shadow.d.ts +14 -0
  274. package/dist/src/components/table/mono-table-loading-core.d.ts +41 -0
  275. package/dist/src/components/table/mono-table-loading.d.ts +50 -0
  276. package/dist/src/components/table/mono-table-loading.shadow.d.ts +14 -0
  277. package/dist/src/components/table/mono-table-page-size-core.d.ts +14 -0
  278. package/dist/src/components/table/mono-table-page-size.d.ts +16 -0
  279. package/dist/src/components/table/mono-table-page-size.shadow.d.ts +11 -0
  280. package/dist/src/components/table/mono-table-paging-core.d.ts +22 -0
  281. package/dist/src/components/table/mono-table-paging-group-core.d.ts +18 -0
  282. package/dist/src/components/table/mono-table-paging-group.d.ts +20 -0
  283. package/dist/src/components/table/mono-table-paging-group.shadow.d.ts +13 -0
  284. package/dist/src/components/table/mono-table-paging.d.ts +16 -0
  285. package/dist/src/components/table/mono-table-paging.shadow.d.ts +11 -0
  286. package/dist/src/components/table/mono-table-search-core.d.ts +74 -0
  287. package/dist/src/components/table/mono-table-search.d.ts +34 -0
  288. package/dist/src/components/table/mono-table-search.shadow.d.ts +21 -0
  289. package/dist/src/components/table/mono-table-sort-core.d.ts +35 -0
  290. package/dist/src/components/table/mono-table-sort.d.ts +38 -0
  291. package/dist/src/components/table/mono-table-sort.shadow.d.ts +20 -0
  292. package/dist/src/components/table/mono-table-summary-core.d.ts +26 -0
  293. package/dist/src/components/table/mono-table-summary.d.ts +24 -0
  294. package/dist/src/components/table/mono-table-summary.shadow.d.ts +14 -0
  295. package/dist/src/components/table/mono-table-th-core.d.ts +56 -0
  296. package/dist/src/components/table/mono-table-th.d.ts +41 -0
  297. package/dist/src/components/table/mono-table-th.shadow.d.ts +19 -0
  298. package/dist/src/components/table/store-group-source.d.ts +24 -0
  299. package/dist/src/components/table/table-controller-core.d.ts +40 -0
  300. package/dist/src/components/table/table-filter-icons.d.ts +3 -0
  301. package/dist/src/components/table/table-menu-core.d.ts +65 -0
  302. package/dist/src/components/table/table-overlay.d.ts +165 -0
  303. package/dist/src/components/table/table-sort-icons.d.ts +4 -0
  304. package/dist/src/components/table/table-sort-utils.d.ts +20 -0
  305. package/dist/src/components/table/table-types.d.ts +475 -0
  306. package/dist/src/components/tabs/index.d.ts +3 -0
  307. package/dist/src/components/tabs/index.shadow.d.ts +4 -0
  308. package/dist/src/components/tabs/mono-tabs.d.ts +33 -0
  309. package/dist/src/components/tabs/mono-tabs.shadow.d.ts +37 -0
  310. package/dist/src/components/tabs/tabs-core.d.ts +57 -0
  311. package/dist/src/components/tabs/tabs-types.d.ts +65 -0
  312. package/dist/src/components/tag-input/index.d.ts +4 -0
  313. package/dist/src/components/tag-input/index.shadow.d.ts +5 -0
  314. package/dist/src/components/tag-input/mono-tag-input.d.ts +66 -0
  315. package/dist/src/components/tag-input/mono-tag-input.shadow.d.ts +40 -0
  316. package/dist/src/components/tag-input/tag-input-core.d.ts +108 -0
  317. package/dist/src/components/tag-input/tag-input-types.d.ts +420 -0
  318. package/dist/src/components/tag-input/tag-input-utils.d.ts +8 -0
  319. package/dist/src/components/textarea/index.d.ts +4 -0
  320. package/dist/src/components/textarea/index.shadow.d.ts +5 -0
  321. package/dist/src/components/textarea/mono-textarea.d.ts +29 -0
  322. package/dist/src/components/textarea/mono-textarea.shadow.d.ts +31 -0
  323. package/dist/src/components/textarea/textarea-core.d.ts +60 -0
  324. package/dist/src/components/textarea/textarea-types.d.ts +131 -0
  325. package/dist/src/components/textarea/textarea-utils.d.ts +7 -0
  326. package/dist/src/components/tooltip/control-tooltip.d.ts +36 -0
  327. package/dist/src/components/tooltip/index.d.ts +6 -0
  328. package/dist/src/components/tooltip/tooltip-config.d.ts +27 -0
  329. package/dist/src/components/tooltip/tooltip-declarative.d.ts +41 -0
  330. package/dist/src/components/tooltip/tooltip-loader.d.ts +1 -0
  331. package/dist/src/components/tooltip/tooltip-types.d.ts +110 -0
  332. package/dist/src/composables/breakpoints.d.ts +59 -0
  333. package/dist/src/composables/chip-limits.d.ts +48 -0
  334. package/dist/src/composables/chip-strip.d.ts +93 -0
  335. package/dist/src/composables/color.d.ts +103 -0
  336. package/dist/src/composables/css-class.d.ts +27 -0
  337. package/dist/src/composables/css-size.d.ts +40 -0
  338. package/dist/src/composables/data-source-controller.d.ts +113 -0
  339. package/dist/src/composables/element-props.d.ts +46 -0
  340. package/dist/src/composables/field-icons.d.ts +15 -0
  341. package/dist/src/composables/hybird-prop.d.ts +79 -0
  342. package/dist/src/composables/hydration-flush.d.ts +34 -0
  343. package/dist/src/composables/icon.d.ts +17 -0
  344. package/dist/src/composables/layout-var.d.ts +34 -0
  345. package/dist/src/composables/light-slots.d.ts +133 -0
  346. package/dist/src/composables/mdi-glyphs.d.ts +4 -0
  347. package/dist/src/composables/mono-element.d.ts +9 -0
  348. package/dist/src/composables/mono-event.d.ts +55 -0
  349. package/dist/src/composables/mono-pending.d.ts +8 -0
  350. package/dist/src/composables/mono-skeleton.d.ts +193 -0
  351. package/dist/src/composables/mono-ui.d.ts +58 -0
  352. package/dist/src/composables/notifier.d.ts +46 -0
  353. package/dist/src/composables/popup-portal.d.ts +226 -0
  354. package/dist/src/composables/popup-stack.d.ts +70 -0
  355. package/dist/src/composables/rate-limit.d.ts +108 -0
  356. package/dist/src/composables/reactive.d.ts +53 -0
  357. package/dist/src/composables/shadow-css.d.ts +42 -0
  358. package/dist/src/composables/visibility.d.ts +36 -0
  359. package/dist/src/data/theme/index.d.ts +30 -0
  360. package/dist/src/data/theme/presets.d.ts +94 -0
  361. package/dist/src/entries/index.d.ts +2 -0
  362. package/dist/src/entries/index.node.d.ts +42 -0
  363. package/dist/src/entries/search.d.ts +3 -0
  364. package/dist/src/export/detail.d.ts +29 -0
  365. package/dist/src/export/download.d.ts +9 -0
  366. package/dist/src/export/excel/index.d.ts +27 -0
  367. package/dist/src/export/excel/nodes.d.ts +123 -0
  368. package/dist/src/export/expression.d.ts +36 -0
  369. package/dist/src/export/helpers.d.ts +6 -0
  370. package/dist/src/export/index.d.ts +13 -0
  371. package/dist/src/export/markdown.d.ts +52 -0
  372. package/dist/src/export/resolve-data.d.ts +31 -0
  373. package/dist/src/export/sentinel.d.ts +97 -0
  374. package/dist/src/export/sheet-name.d.ts +45 -0
  375. package/dist/src/export/styles.d.ts +33 -0
  376. package/dist/src/export/template.d.ts +10 -0
  377. package/dist/src/export/types.d.ts +259 -0
  378. package/dist/src/import/coerce.d.ts +38 -0
  379. package/dist/src/import/index.d.ts +16 -0
  380. package/dist/src/import/match.d.ts +54 -0
  381. package/dist/src/import/parse.d.ts +15 -0
  382. package/dist/src/import/types.d.ts +153 -0
  383. package/dist/src/nuxt/index.d.ts +94 -0
  384. package/dist/src/search/data-search.d.ts +207 -0
  385. package/dist/src/search/field-path.d.ts +107 -0
  386. package/dist/src/search/filter-eval.d.ts +30 -0
  387. package/dist/src/search/index.d.ts +22 -0
  388. package/dist/src/search/odata-search.d.ts +18 -0
  389. package/dist/src/search/search-expr.d.ts +160 -0
  390. package/dist/src/utils/data-source-apply.d.ts +97 -0
  391. package/dist/src/utils/data-source-options.d.ts +116 -0
  392. package/dist/src/utils/data-source-read.d.ts +85 -0
  393. package/dist/src/utils/data-source-summary.d.ts +55 -0
  394. package/dist/src/utils/normalize-error.d.ts +90 -0
  395. package/dist/src/vite/index.d.ts +48 -0
  396. package/dist/src/vite/mono-client-only.d.ts +35 -0
  397. package/dist/src/vite/mono-ssr-stub.d.ts +20 -0
  398. package/dist/src/vite/shadow-manifest.d.ts +8 -0
  399. package/dist/styles-BIJ31TM4.js +20146 -0
  400. package/dist/tooltip-DQqNpqk2.js +795 -0
  401. package/dist/tooltip.d.ts +1 -0
  402. package/dist/tooltip.js +2 -0
  403. package/dist/ui/accordion.d.ts +1 -0
  404. package/dist/ui/accordion.js +466 -0
  405. package/dist/ui/alert.d.ts +1 -0
  406. package/dist/ui/alert.js +221 -0
  407. package/dist/ui/breadcrumb.d.ts +1 -0
  408. package/dist/ui/breadcrumb.js +902 -0
  409. package/dist/ui/button-dropdown.d.ts +1 -0
  410. package/dist/ui/button-dropdown.js +679 -0
  411. package/dist/ui/button.d.ts +1 -0
  412. package/dist/ui/button.js +63 -0
  413. package/dist/ui/card.d.ts +1 -0
  414. package/dist/ui/card.js +524 -0
  415. package/dist/ui/chart.d.ts +1 -0
  416. package/dist/ui/chart.js +885 -0
  417. package/dist/ui/checkbox.d.ts +1 -0
  418. package/dist/ui/checkbox.js +413 -0
  419. package/dist/ui/chip.d.ts +1 -0
  420. package/dist/ui/chip.js +558 -0
  421. package/dist/ui/date.d.ts +1 -0
  422. package/dist/ui/date.js +686 -0
  423. package/dist/ui/drawer.d.ts +1 -0
  424. package/dist/ui/drawer.js +901 -0
  425. package/dist/ui/dropdown-table.d.ts +1 -0
  426. package/dist/ui/dropdown-table.js +1291 -0
  427. package/dist/ui/dropdown.d.ts +1 -0
  428. package/dist/ui/dropdown.js +586 -0
  429. package/dist/ui/file-upload.d.ts +1 -0
  430. package/dist/ui/file-upload.js +688 -0
  431. package/dist/ui/filter.d.ts +1 -0
  432. package/dist/ui/filter.js +400 -0
  433. package/dist/ui/font/files/geist-47c091c9.woff2 +0 -0
  434. package/dist/ui/font/files/geist-8dd77544.woff2 +0 -0
  435. package/dist/ui/font/files/geist-b9248b1e.woff2 +0 -0
  436. package/dist/ui/font/files/geist-d40d74b4.woff2 +0 -0
  437. package/dist/ui/font/files/geist-f493429a.woff2 +0 -0
  438. package/dist/ui/font/files/geistmono-03737868.woff2 +0 -0
  439. package/dist/ui/font/files/geistmono-421a7e38.woff2 +0 -0
  440. package/dist/ui/font/files/geistmono-48ef518d.woff2 +0 -0
  441. package/dist/ui/font/files/geistmono-5df35d39.woff2 +0 -0
  442. package/dist/ui/font/files/geistmono-7de289a4.woff2 +0 -0
  443. package/dist/ui/font/files/geistmono-e976128f.woff2 +0 -0
  444. package/dist/ui/font/files/inter-05cf802c.woff2 +0 -0
  445. package/dist/ui/font/files/inter-2b2f25a4.woff2 +0 -0
  446. package/dist/ui/font/files/inter-467acc7a.woff2 +0 -0
  447. package/dist/ui/font/files/inter-6e85163c.woff2 +0 -0
  448. package/dist/ui/font/files/inter-7048add3.woff2 +0 -0
  449. package/dist/ui/font/files/inter-9be0371e.woff2 +0 -0
  450. package/dist/ui/font/files/inter-a28b7e31.woff2 +0 -0
  451. package/dist/ui/font/files/poppins-054df55a.woff2 +0 -0
  452. package/dist/ui/font/files/poppins-0ee5dc9a.woff2 +0 -0
  453. package/dist/ui/font/files/poppins-0f44cb18.woff2 +0 -0
  454. package/dist/ui/font/files/poppins-0ff0d30c.woff2 +0 -0
  455. package/dist/ui/font/files/poppins-13045147.woff2 +0 -0
  456. package/dist/ui/font/files/poppins-1db57cd9.woff2 +0 -0
  457. package/dist/ui/font/files/poppins-2cf2a902.woff2 +0 -0
  458. package/dist/ui/font/files/poppins-39e7f079.woff2 +0 -0
  459. package/dist/ui/font/files/poppins-9607042d.woff2 +0 -0
  460. package/dist/ui/font/files/poppins-9a88fc1f.woff2 +0 -0
  461. package/dist/ui/font/files/poppins-b8f4f752.woff2 +0 -0
  462. package/dist/ui/font/files/poppins-f5e57db4.woff2 +0 -0
  463. package/dist/ui/font/geist-mono.css +104 -0
  464. package/dist/ui/font/geist.css +168 -0
  465. package/dist/ui/font/inter.css +232 -0
  466. package/dist/ui/font/poppins.css +104 -0
  467. package/dist/ui/form.d.ts +1 -0
  468. package/dist/ui/form.js +3 -0
  469. package/dist/ui/index.css +21989 -0
  470. package/dist/ui/input.d.ts +1 -0
  471. package/dist/ui/input.js +1176 -0
  472. package/dist/ui/menu.d.ts +1 -0
  473. package/dist/ui/menu.js +1289 -0
  474. package/dist/ui/modal.d.ts +1 -0
  475. package/dist/ui/modal.js +996 -0
  476. package/dist/ui/nav.d.ts +1 -0
  477. package/dist/ui/nav.js +295 -0
  478. package/dist/ui/radio.d.ts +1 -0
  479. package/dist/ui/radio.js +379 -0
  480. package/dist/ui/rich-text-editor.d.ts +1 -0
  481. package/dist/ui/rich-text-editor.js +1338 -0
  482. package/dist/ui/select.d.ts +1 -0
  483. package/dist/ui/select.js +2200 -0
  484. package/dist/ui/shadow/accordion.js +442 -0
  485. package/dist/ui/shadow/alert.js +218 -0
  486. package/dist/ui/shadow/breadcrumb.js +919 -0
  487. package/dist/ui/shadow/button-dropdown.js +696 -0
  488. package/dist/ui/shadow/button.js +63 -0
  489. package/dist/ui/shadow/card.js +538 -0
  490. package/dist/ui/shadow/chart.js +1685 -0
  491. package/dist/ui/shadow/checkbox.js +457 -0
  492. package/dist/ui/shadow/chip.js +559 -0
  493. package/dist/ui/shadow/date.js +712 -0
  494. package/dist/ui/shadow/drawer.js +869 -0
  495. package/dist/ui/shadow/dropdown-table.js +1620 -0
  496. package/dist/ui/shadow/dropdown.js +547 -0
  497. package/dist/ui/shadow/file-upload.js +731 -0
  498. package/dist/ui/shadow/filter.js +402 -0
  499. package/dist/ui/shadow/input.js +1150 -0
  500. package/dist/ui/shadow/menu.js +899 -0
  501. package/dist/ui/shadow/modal.js +1194 -0
  502. package/dist/ui/shadow/nav.js +240 -0
  503. package/dist/ui/shadow/radio.js +408 -0
  504. package/dist/ui/shadow/rich-text-editor.js +1344 -0
  505. package/dist/ui/shadow/select.js +2167 -0
  506. package/dist/ui/shadow/sidebar.js +606 -0
  507. package/dist/ui/shadow/switch.js +428 -0
  508. package/dist/ui/shadow/table.js +4755 -0
  509. package/dist/ui/shadow/tabs.js +372 -0
  510. package/dist/ui/shadow/tag-input.js +2974 -0
  511. package/dist/ui/shadow/textarea.js +816 -0
  512. package/dist/ui/sidebar.d.ts +1 -0
  513. package/dist/ui/sidebar.js +659 -0
  514. package/dist/ui/switch.d.ts +1 -0
  515. package/dist/ui/switch.js +398 -0
  516. package/dist/ui/table.d.ts +1 -0
  517. package/dist/ui/table.js +4654 -0
  518. package/dist/ui/tabs.d.ts +1 -0
  519. package/dist/ui/tabs.js +379 -0
  520. package/dist/ui/tag-input.d.ts +1 -0
  521. package/dist/ui/tag-input.js +2947 -0
  522. package/dist/ui/textarea.d.ts +1 -0
  523. package/dist/ui/textarea.js +819 -0
  524. package/dist/ui/theme/legacy.css +293 -0
  525. package/dist/ui/theme/luma.css +743 -0
  526. package/dist/ui/theme/lyra.css +754 -0
  527. package/dist/ui/theme/maia.css +673 -0
  528. package/dist/ui/theme/mira.css +802 -0
  529. package/dist/ui/theme/nova.css +662 -0
  530. package/dist/ui/theme/one.css +699 -0
  531. package/dist/ui/theme/rhea.css +742 -0
  532. package/dist/ui/theme/sera.css +845 -0
  533. package/dist/ui/theme/tokens.css +261 -0
  534. package/dist/ui/theme/vega.css +467 -0
  535. package/dist/vite-C5iUK7so.js +329 -0
  536. package/dist/vite.d.ts +1 -0
  537. package/dist/vite.js +2 -0
  538. package/dist/vue.d.ts +282 -0
  539. package/package.json +411 -3
@@ -0,0 +1,1291 @@
1
+ import { f as monoPendingGrace, l as monoHostChildNodes } from "../mono-ui-CPV7rrdo.js";
2
+ import { n as detachEventHandlers, t as applyProps } from "../element-props-CLB6yvbm.js";
3
+ import { t as monoDataDropdown } from "../mono-data-dropdown-Wnoke6zO.js";
4
+ import { t as customElement } from "../mono-element-B0kP_96P.js";
5
+ import { a as defineHybridPropAliases, i as defineHybridPropAlias, o as numberStringConverter, r as booleanStringConverter, s as optionalNumberConverter, t as __decorate } from "../decorate-DEXtNagw.js";
6
+ import { t as dispatchMonoEvent } from "../mono-event-Bi1qP9uN.js";
7
+ import { i as guardHostTextContent, s as placeSlotNode } from "../light-slots-DW1WgfgT.js";
8
+ import { n as toCssSize, t as buildSizeStyle } from "../css-size-DhHSVZJK.js";
9
+ import { n as applyPopupPlacement, r as computePopupPlacement, t as PopupPortalController } from "../popup-portal-BziRX1yG.js";
10
+ import { n as chevronIcon, r as closeIcon, t as caretIcon } from "../field-icons-DELrSdqJ.js";
11
+ import { t as MonoFormControlCore } from "../form-control-core-eeRr0zLU.js";
12
+ import { n as visibleChipCap, r as ChipStripController, t as resolveChipLimit } from "../chip-limits-BMoO31JM.js";
13
+ import { LitElement, html, isServer, nothing, unsafeCSS } from "lit";
14
+ import { property } from "lit/decorators.js";
15
+ import { ifDefined } from "lit/directives/if-defined.js";
16
+ import { styleMap } from "lit/directives/style-map.js";
17
+ //#region src/components/dropdown-table/dropdown-table-core.ts
18
+ /** Sentinel so an initial `model-value === our last emit` guard never matches by accident. */
19
+ var SYMBOL_INIT = Symbol("init");
20
+ /**
21
+ * `MonoDropdownTableCore` — the field + popup shell for `<mono-dropdown-table>`. The
22
+ * FIELD mirrors `<mono-select>` (same size/color/variant/validation/label props and
23
+ * an identical look); the selection/value/display magic lives in the bound
24
+ * {@link MonoDropdownController} (`monoDataDropdown`). The consumer's native `<table>`
25
+ * + `mono-table-*` are slotted into the body-portaled panel; row clicks delegate to
26
+ * `dd.toggleRow`. The panel is sized independently of the field via the `dropdown`
27
+ * object (`matchWidth` is intentionally off). Reuses `PopupPortalController`,
28
+ * `buildSizeStyle`, and the global `.mono-chip` classes.
29
+ */
30
+ var MonoDropdownTableCore = (superClass) => {
31
+ class MonoDropdownTableCoreClass extends MonoFormControlCore(superClass) {
32
+ static {
33
+ this.monoPendingAuto = "data";
34
+ }
35
+ _monoPendingReady() {
36
+ const grid = this._dd?.grid;
37
+ if (!grid) return monoPendingGrace(this);
38
+ if (grid.hasLoaded || grid.error) return true;
39
+ return monoPendingGrace(this) && !grid.loading;
40
+ }
41
+ constructor(...args) {
42
+ super(...args);
43
+ this.size = "md";
44
+ this.color = "primary";
45
+ this.variant = "outlined";
46
+ this.label = "";
47
+ this.placeholder = "Select…";
48
+ this.helperText = "";
49
+ this.validationState = "default";
50
+ this.validationMessage = "";
51
+ this.errorMessage = "";
52
+ this.successMessage = "";
53
+ this.required = false;
54
+ this.disabled = false;
55
+ this.readonly = false;
56
+ this.clearable = false;
57
+ this.multiple = false;
58
+ this.maxVisible = 5;
59
+ this.chip = {};
60
+ this.modelValue = void 0;
61
+ this.placement = "bottom-start";
62
+ this.flip = true;
63
+ this.shift = true;
64
+ this.offset = 6;
65
+ this.autoFocusSearch = true;
66
+ this.stayOpen = false;
67
+ this.cssClass = {};
68
+ this.cssClassName = "";
69
+ this._moreOpen = false;
70
+ this._resolvedSide = "bottom";
71
+ this._lastEmitted = SYMBOL_INIT;
72
+ this._chipStrip = new ChipStripController(this, {
73
+ strip: () => this.renderRoot?.querySelector(".mono-dropdown-table-chip-strip"),
74
+ enabled: () => this._inlineChips
75
+ });
76
+ this._popup = new PopupPortalController(this, {
77
+ getPanel: () => this.renderRoot.querySelector(".mono-dropdown-table-panel"),
78
+ getAnchor: () => this.renderRoot.querySelector(".mono-dropdown-table-trigger"),
79
+ getStyleScope: () => this.renderRoot.querySelector(".mono-dropdown-table"),
80
+ isOpen: () => this._isOpen,
81
+ matchWidth: false,
82
+ ...this._placementOpts(),
83
+ onSideResolved: (side) => {
84
+ this._resolvedSide = side;
85
+ this._applySideClass();
86
+ }
87
+ });
88
+ this._morePopup = new PopupPortalController(this, {
89
+ getPanel: () => this.renderRoot.querySelector(".mono-dropdown-table-more"),
90
+ getAnchor: () => this.renderRoot.querySelector(".mono-dropdown-table-more-chip"),
91
+ getStyleScope: () => this.renderRoot.querySelector(".mono-dropdown-table"),
92
+ isOpen: () => this._moreOpen,
93
+ matchWidth: false,
94
+ ...this._morePlacementOpts()
95
+ });
96
+ this._ddPropsQueued = false;
97
+ this._onTriggerKeydown = (e) => {
98
+ if (e.key === "Enter" || e.key === " " || e.key === "ArrowDown") {
99
+ e.preventDefault();
100
+ this.open();
101
+ } else if (e.key === "Escape" && this._isOpen) {
102
+ e.preventDefault();
103
+ this.close();
104
+ }
105
+ };
106
+ this._onDocPointer = (e) => {
107
+ if (this.stayOpen) return;
108
+ if (!this._isOpen && !this._moreOpen) return;
109
+ const path = e.composedPath();
110
+ if (path.includes(this)) return;
111
+ if (this._popup.containsInPath(path)) return;
112
+ if (this._morePopup.containsInPath(path)) return;
113
+ this.close();
114
+ };
115
+ this._onDocKey = (e) => {
116
+ if (e.key !== "Escape") return;
117
+ if (!this._isOpen && !this._moreOpen) return;
118
+ if (this._popup.ownsNestedInPath(e.composedPath())) return;
119
+ this.close();
120
+ };
121
+ this._onPanelClick = (e) => {
122
+ if (this.disabled || this.readonly) return;
123
+ const path = e.composedPath();
124
+ if (path.some((n) => n?.matches?.("mono-table-checkbox, mono-shadow-table-checkbox, mono-checkbox, mono-shadow-checkbox, .mono-checkbox, input, button, a, select, textarea"))) return;
125
+ const row = path.find((n) => n?.matches?.("[data-row-key]"));
126
+ if (!row) return;
127
+ const key = row.getAttribute("data-row-key");
128
+ if (key == null) return;
129
+ this._activeRowKey = key;
130
+ this._focusZone = "list";
131
+ this._dd?.toggleRow(key);
132
+ this._reflectSelection();
133
+ };
134
+ this._onViewportChange = () => {
135
+ if (this._isOpen) this._positionPanel();
136
+ if (this._moreOpen) this._positionMorePanel();
137
+ };
138
+ this._wasOpen = false;
139
+ this._lastSelectedCount = 0;
140
+ this._searchFocused = false;
141
+ this._focusZone = "search";
142
+ this._activeRowKey = null;
143
+ this._panelTabHeld = false;
144
+ this._panelTabConsumed = false;
145
+ this._onPanelKeydown = (e) => {
146
+ if (this.disabled || this.readonly || !this._isOpen) return;
147
+ if (e.key === "Tab") {
148
+ if (!this._searchEl()) return;
149
+ e.preventDefault();
150
+ if (!e.repeat) {
151
+ this._panelTabHeld = true;
152
+ this._panelTabConsumed = false;
153
+ }
154
+ return;
155
+ }
156
+ if (this._panelTabHeld && (e.key === "ArrowDown" || e.key === "ArrowUp")) {
157
+ e.preventDefault();
158
+ this._panelTabConsumed = true;
159
+ if (e.key === "ArrowDown") this._enterList();
160
+ else this._enterSearch();
161
+ return;
162
+ }
163
+ if (e.key === "ArrowDown" || e.key === "ArrowUp") {
164
+ if (this._focusZone !== "list") return;
165
+ e.preventDefault();
166
+ this._moveActiveRow(e.key === "ArrowDown" ? 1 : -1);
167
+ return;
168
+ }
169
+ if (e.key === "Enter" && this._focusZone === "list") {
170
+ e.preventDefault();
171
+ this._selectActiveRow();
172
+ }
173
+ };
174
+ this._onPanelKeyup = (e) => {
175
+ if (e.key !== "Tab" || !this._panelTabHeld) return;
176
+ this._panelTabHeld = false;
177
+ if (this._panelTabConsumed) return;
178
+ if (this._focusZone === "search") this._enterList();
179
+ else this._enterSearch();
180
+ };
181
+ defineHybridPropAliases(this, [
182
+ "dataDropdown",
183
+ "modelValue",
184
+ "cssClass",
185
+ "autoFocusSearch",
186
+ "stayOpen",
187
+ "maxVisible",
188
+ "minVisible"
189
+ ]);
190
+ defineHybridPropAlias(this, "controlDataDropdown", "dataDropdown");
191
+ for (const alias of ["css-class", "cssclass"]) Object.defineProperty(this, alias, {
192
+ get: () => this.cssClass,
193
+ set: (value) => this._setCssClass(value),
194
+ configurable: true,
195
+ enumerable: false
196
+ });
197
+ }
198
+ /** Normalize an object | JSON string | plain-string `css-class` value. */
199
+ _setCssClass(value) {
200
+ if (value == null) {
201
+ this.cssClass = {};
202
+ this.cssClassName = "";
203
+ return;
204
+ }
205
+ if (typeof value === "object") {
206
+ this.cssClass = value;
207
+ return;
208
+ }
209
+ if (typeof value === "string") {
210
+ const trimmed = value.trim();
211
+ if (!trimmed) {
212
+ this.cssClass = {};
213
+ this.cssClassName = "";
214
+ return;
215
+ }
216
+ if (trimmed.startsWith("{") && trimmed.endsWith("}")) try {
217
+ this.cssClass = JSON.parse(trimmed);
218
+ return;
219
+ } catch {}
220
+ this.cssClassName = trimmed;
221
+ }
222
+ }
223
+ /** Append the consumer's per-part override to a built-in class. */
224
+ _cls(base, key) {
225
+ const extra = this.cssClass?.[key];
226
+ return extra ? `${base} ${extra}` : base;
227
+ }
228
+ /**
229
+ * `chip` is an object prop, so the real binding is `:chip.prop="{…}"`. This
230
+ * covers the two ways a *string* can arrive: a hand-written JSON attribute
231
+ * (`chip='{"size":"md"}'`, incl. DSD/SSR), and Vue's `String(value)` mirror
232
+ * of a plain `:chip="{…}"` binding — which yields `"[object Object]"` and
233
+ * must be ignored, or it would wipe the property set moments later.
234
+ */
235
+ _setChip(value) {
236
+ if (value == null) {
237
+ this.chip = {};
238
+ return;
239
+ }
240
+ if (typeof value === "object") {
241
+ this.chip = value;
242
+ return;
243
+ }
244
+ if (typeof value !== "string") return;
245
+ const trimmed = value.trim();
246
+ if (!trimmed) {
247
+ this.chip = {};
248
+ return;
249
+ }
250
+ if (!trimmed.startsWith("{") || !trimmed.endsWith("}")) return;
251
+ try {
252
+ this.chip = JSON.parse(trimmed);
253
+ } catch {}
254
+ }
255
+ static get observedAttributes() {
256
+ return [
257
+ ...super.observedAttributes ?? [],
258
+ "css-class",
259
+ "cssclass",
260
+ "chip"
261
+ ];
262
+ }
263
+ attributeChangedCallback(name, old, value) {
264
+ super.attributeChangedCallback(name, old, value);
265
+ if (name === "css-class" || name === "cssclass") this._setCssClass(value);
266
+ if (name === "chip") this._setChip(value);
267
+ }
268
+ /** Imperatively sync the `is-<side>` class — see `_resolvedSide`. */
269
+ _applySideClass() {
270
+ const root = this.renderRoot.querySelector(".mono-dropdown-table");
271
+ if (!root) return;
272
+ root.classList.toggle("is-top", this._resolvedSide === "top");
273
+ root.classList.toggle("is-bottom", this._resolvedSide === "bottom");
274
+ root.classList.toggle("is-left", this._resolvedSide === "left");
275
+ root.classList.toggle("is-right", this._resolvedSide === "right");
276
+ if (root.getAttribute("mono-side") !== this._resolvedSide) root.setAttribute("mono-side", this._resolvedSide);
277
+ }
278
+ /** Shared by the light path (the controller) and the shadow path (`_positionMorePanel`). */
279
+ _morePlacementOpts() {
280
+ return {
281
+ side: () => "bottom",
282
+ align: () => "start",
283
+ offset: () => 4,
284
+ flip: () => true,
285
+ shift: () => true,
286
+ constrainSize: () => true
287
+ };
288
+ }
289
+ /**
290
+ * Placement options shared by the light path (the controller) and the shadow
291
+ * path (`_positionPanel`), so both run the identical algorithm.
292
+ *
293
+ * `constrainSize` is on: a field low in a dense grid can have less room than
294
+ * the panel wants on BOTH sides, so flipping alone isn't enough — the panel
295
+ * also has to shrink and scroll internally (see dropdown-table.css).
296
+ */
297
+ _placementOpts() {
298
+ return {
299
+ side: () => this._sideFromPlacement(this.placement),
300
+ align: () => this._alignFromPlacement(this.placement),
301
+ offset: () => this.offset,
302
+ flip: () => this.flip,
303
+ shift: () => this.shift,
304
+ constrainSize: () => true
305
+ };
306
+ }
307
+ _sideFromPlacement(p) {
308
+ if (p.startsWith("top")) return "top";
309
+ if (p.startsWith("left")) return "left";
310
+ if (p.startsWith("right")) return "right";
311
+ return "bottom";
312
+ }
313
+ _alignFromPlacement(p) {
314
+ if (p.endsWith("-start")) return "start";
315
+ if (p.endsWith("-end")) return "end";
316
+ return "center";
317
+ }
318
+ get _dd() {
319
+ return this.dataDropdown;
320
+ }
321
+ get _isOpen() {
322
+ return !!this._dd?.open;
323
+ }
324
+ get _multi() {
325
+ return this.multiple || !!this._dd?.multiple;
326
+ }
327
+ get _hasValue() {
328
+ const v = this._dd?.value;
329
+ return this._multi ? Array.isArray(v) && v.length > 0 : v != null;
330
+ }
331
+ /** Resolve the effective validation state (message props force it). */
332
+ get _validationState() {
333
+ if (this.validationState && this.validationState !== "default") return this.validationState;
334
+ if (this.errorMessage) return "invalid";
335
+ if (this.successMessage) return "valid";
336
+ return "default";
337
+ }
338
+ get _wrapperClasses() {
339
+ const v = this._validationState;
340
+ return [
341
+ "mono-dropdown-table",
342
+ this.size,
343
+ this.color,
344
+ this.variant,
345
+ `is-${this._resolvedSide}`,
346
+ this._isOpen ? "open" : "",
347
+ this._moreOpen ? "more-open" : "",
348
+ this.disabled ? "disabled" : "",
349
+ this.readonly ? "readonly" : "",
350
+ v !== "default" ? `is-${v}` : "",
351
+ this._hasValue ? "has-value" : "",
352
+ this._multi ? "multiple" : "",
353
+ this.cssClassName,
354
+ this.cssClass?.root
355
+ ].filter(Boolean).join(" ");
356
+ }
357
+ get _triggerClasses() {
358
+ return [
359
+ "mono-dropdown-table-trigger",
360
+ this.size,
361
+ this.color,
362
+ this.variant,
363
+ this.disabled ? "disabled" : "",
364
+ this.readonly ? "readonly" : "",
365
+ this.cssClass?.trigger
366
+ ].filter(Boolean).join(" ");
367
+ }
368
+ connectedCallback() {
369
+ super.connectedCallback();
370
+ this._subscribe();
371
+ this._wireDropdown();
372
+ if (!isServer) {
373
+ document.addEventListener("pointerdown", this._onDocPointer, true);
374
+ document.addEventListener("keydown", this._onDocKey, true);
375
+ if (this._isShadowHost) {
376
+ window.addEventListener("scroll", this._onViewportChange, true);
377
+ window.addEventListener("resize", this._onViewportChange);
378
+ }
379
+ }
380
+ }
381
+ disconnectedCallback() {
382
+ this._off?.();
383
+ this._off = void 0;
384
+ this._panelObserver?.disconnect();
385
+ this._panelObserver = void 0;
386
+ if (this._dropdownWired) this._dropdownWired.onValueChange = null;
387
+ if (!isServer) {
388
+ document.removeEventListener("pointerdown", this._onDocPointer, true);
389
+ document.removeEventListener("keydown", this._onDocKey, true);
390
+ window.removeEventListener("scroll", this._onViewportChange, true);
391
+ window.removeEventListener("resize", this._onViewportChange);
392
+ }
393
+ super.disconnectedCallback();
394
+ }
395
+ willUpdate(changed) {
396
+ if (changed.has("dataDropdown")) {
397
+ this._subscribe();
398
+ this._wireDropdown();
399
+ }
400
+ if (changed.has("modelValue")) this._pushModelToDd();
401
+ if (changed.has("dataDropdown") || changed.has("max") || changed.has("min") || changed.has("chip")) this._pushLimits();
402
+ super.willUpdate?.(changed);
403
+ }
404
+ /**
405
+ * Second entry point for the props apply. `MonoFormControlCore` (composed
406
+ * below this core) also overrides `update`, so chain `super`.
407
+ */
408
+ update(changed) {
409
+ this._scheduleApplyDropdownProps();
410
+ super.update(changed);
411
+ }
412
+ _subscribe() {
413
+ this._off?.();
414
+ detachEventHandlers(this);
415
+ this._off = this._dd?.subscribe(() => {
416
+ this._scheduleApplyDropdownProps();
417
+ this.requestUpdate();
418
+ });
419
+ this._scheduleApplyDropdownProps();
420
+ }
421
+ /**
422
+ * Deferred + de-duplicated, and driven from `update()` as well as
423
+ * `_subscribe()` — the same belt-and-braces the table base needed once two
424
+ * cores were found replacing `_subscribe` without chaining `super`. The
425
+ * deferral keeps the reactive writes out of the update cycle, so they can't
426
+ * trip Lit's change-in-update warning.
427
+ */
428
+ _scheduleApplyDropdownProps() {
429
+ if (this._ddPropsQueued) return;
430
+ if (typeof queueMicrotask !== "function") {
431
+ this._applyDropdownProps();
432
+ return;
433
+ }
434
+ this._ddPropsQueued = true;
435
+ queueMicrotask(() => {
436
+ this._ddPropsQueued = false;
437
+ this._applyDropdownProps();
438
+ });
439
+ }
440
+ /**
441
+ * Pull `monoDataDropdown({ props: { dropdownTable } })` onto this element, so
442
+ * the field needs nothing but `:data-dropdown.prop`. The CONTROLLER WINS for
443
+ * keys it declares; the rest stay with the template.
444
+ */
445
+ _applyDropdownProps() {
446
+ const dd = this._dd;
447
+ if (!dd?.props) return;
448
+ applyProps(this, dd.props().dropdownTable);
449
+ }
450
+ _wireDropdown() {
451
+ const dd = this._dd;
452
+ if (this._dropdownWired && this._dropdownWired !== dd) this._dropdownWired.onValueChange = null;
453
+ this._dropdownWired = dd;
454
+ if (!dd) return;
455
+ dd.onValueChange = (v) => {
456
+ this._lastEmitted = v;
457
+ this.modelValue = v;
458
+ this._emitChange(v);
459
+ };
460
+ this._pushModelToDd();
461
+ }
462
+ /**
463
+ * The selection limits the element asks for: `chip.max` / `chip.min` pin,
464
+ * `max` / `min` are the fallback, and `undefined` leaves the controller's own
465
+ * option in force. They are ENFORCED by the controller's check store (the one
466
+ * place a row click, the keyboard, a `<mono-table-checkbox>` and the
467
+ * select-all drain all go through), so the element only forwards them.
468
+ */
469
+ _pushLimits() {
470
+ const chip = this._chipProps;
471
+ this._dd?.setLimits({
472
+ max: resolveChipLimit(chip, "max", this.max),
473
+ min: resolveChipLimit(chip, "min", this.min)
474
+ });
475
+ }
476
+ /** Push an external `model-value` into the controller (guarding our own echo). */
477
+ _pushModelToDd() {
478
+ const dd = this._dd;
479
+ if (!dd || this.modelValue === void 0) return;
480
+ if (this._sameValue(this.modelValue, this._lastEmitted)) return;
481
+ if (this._sameValue(this.modelValue, dd.value)) return;
482
+ dd.setValue(this.modelValue);
483
+ }
484
+ _sameValue(a, b) {
485
+ if (a === b) return true;
486
+ if (Array.isArray(a) && Array.isArray(b)) return a.length === b.length && a.every((x, i) => String(x) === String(b[i]));
487
+ return String(a) === String(b);
488
+ }
489
+ _emitChange(value) {
490
+ const detail = {
491
+ modelValue: value,
492
+ value,
493
+ selectedItems: this._dd?.selectedItems() ?? []
494
+ };
495
+ dispatchMonoEvent(this, "change", detail);
496
+ }
497
+ /** Whether the panel is currently open. */
498
+ get isOpen() {
499
+ return this._isOpen;
500
+ }
501
+ open() {
502
+ if (this.disabled || this.readonly) return;
503
+ this._dd?.setOpen(true);
504
+ }
505
+ close() {
506
+ this._moreOpen = false;
507
+ this._dd?.setOpen(false);
508
+ this.requestUpdate();
509
+ }
510
+ toggle() {
511
+ if (this.disabled || this.readonly) return;
512
+ this._moreOpen = false;
513
+ this._dd?.setOpen(!this._isOpen);
514
+ }
515
+ /**
516
+ * Where the `[data-row-key]` rows live: light = the captured table inside the
517
+ * (portaled) panel; shadow = the SLOTTED table (host's light-DOM children).
518
+ */
519
+ get _rowScope() {
520
+ return this.renderRoot === this ? this._popup.panelRoot : this;
521
+ }
522
+ _reflectSelection() {
523
+ const dd = this._dd;
524
+ const root = this._rowScope;
525
+ if (!dd || !root?.querySelectorAll) return;
526
+ const rows = Array.from(root.querySelectorAll("[data-row-key]"));
527
+ if ((this._focusZone === "list" || this._activeRowKey != null) && rows.length && !rows.some((el) => el.getAttribute("data-row-key") === this._activeRowKey)) this._activeRowKey = rows[0].getAttribute("data-row-key");
528
+ rows.forEach((el) => {
529
+ const key = el.getAttribute("data-row-key");
530
+ const on = key != null && dd.isSelected(key);
531
+ const active = key != null && key === this._activeRowKey;
532
+ el.classList.toggle("mono-dd-row-selected", on);
533
+ el.classList.toggle("mono-dd-row-active", active);
534
+ el.toggleAttribute("mono-selected", on);
535
+ el.toggleAttribute("mono-dd-selected", on);
536
+ el.toggleAttribute("mono-dd-active", active);
537
+ if (on) el.setAttribute("aria-selected", "true");
538
+ else el.removeAttribute("aria-selected");
539
+ });
540
+ }
541
+ /** Re-reflect after the consumer's Vue re-renders rows (paging/search). */
542
+ _observePanel() {
543
+ const root = this._rowScope;
544
+ if (!root || this._panelObserver) return;
545
+ this._panelObserver = new MutationObserver(() => this._reflectSelection());
546
+ this._panelObserver.observe(root, {
547
+ childList: true,
548
+ subtree: true
549
+ });
550
+ }
551
+ /** True for the shadow build — a shadow host keeps its panel in the shadow root. */
552
+ get _isShadowHost() {
553
+ return this.renderRoot !== this;
554
+ }
555
+ /**
556
+ * Position the panel for the SHADOW build (renderRoot ≠ this): the popup
557
+ * controller only portals/positions LIGHT hosts (`_canPortal`), so a shadow
558
+ * host places its own `position:fixed` panel. It runs the SAME shared math as
559
+ * the light path — flip, shift and size-constrain included. Light is untouched.
560
+ */
561
+ _positionPanel() {
562
+ if (isServer || !this._isShadowHost) return;
563
+ if (!this._isOpen) return;
564
+ const root = this.renderRoot;
565
+ const panel = root.querySelector(".mono-dropdown-table-panel");
566
+ const anchor = root.querySelector(".mono-dropdown-table-trigger");
567
+ if (!panel || !anchor) return;
568
+ const o = this._placementOpts();
569
+ const placement = computePopupPlacement(anchor, panel, {
570
+ side: o.side(),
571
+ align: o.align(),
572
+ offset: o.offset(),
573
+ flip: o.flip(),
574
+ shift: o.shift(),
575
+ constrain: true
576
+ });
577
+ applyPopupPlacement(panel, placement, true);
578
+ this._resolvedSide = placement.side;
579
+ this._applySideClass();
580
+ }
581
+ /** The shadow build's in-place placement of the "+N more" panel — see `_positionPanel`. */
582
+ _positionMorePanel() {
583
+ if (isServer || !this._isShadowHost) return;
584
+ if (!this._moreOpen) return;
585
+ const root = this.renderRoot;
586
+ const panel = root.querySelector(".mono-dropdown-table-more");
587
+ const anchor = root.querySelector(".mono-dropdown-table-more-chip");
588
+ if (!panel || !anchor) return;
589
+ const o = this._morePlacementOpts();
590
+ applyPopupPlacement(panel, computePopupPlacement(anchor, panel, {
591
+ side: o.side(),
592
+ align: o.align(),
593
+ offset: o.offset(),
594
+ flip: o.flip(),
595
+ shift: o.shift(),
596
+ constrain: true
597
+ }), true);
598
+ }
599
+ updated(changed) {
600
+ super.updated(changed);
601
+ if (isServer) return;
602
+ if (this._isOpen) {
603
+ this._observePanel();
604
+ this._reflectSelection();
605
+ this._positionPanel();
606
+ } else {
607
+ this._panelObserver?.disconnect();
608
+ this._panelObserver = void 0;
609
+ }
610
+ if (this._moreOpen) if (!this._overflowItems(this._dd?.selectedItems() ?? []).length) {
611
+ this._moreOpen = false;
612
+ this.requestUpdate();
613
+ } else this._positionMorePanel();
614
+ const selectedCount = this._dd?.selectedItems?.()?.length ?? 0;
615
+ const capChanged = changed.has("maxVisible") || changed.has("minVisible") || changed.has("chip");
616
+ if (selectedCount !== this._lastSelectedCount) if (this._isOpen && selectedCount > this._lastSelectedCount && this._inlineChips) this._chipStrip.scrollToEnd();
617
+ else this._chipStrip.invalidate();
618
+ else if (capChanged) this._chipStrip.invalidate();
619
+ this._lastSelectedCount = selectedCount;
620
+ if (this._isOpen !== this._wasOpen) {
621
+ this._wasOpen = this._isOpen;
622
+ if (this._isOpen) this._initPanelFocus();
623
+ else {
624
+ this._activeRowKey = null;
625
+ this._focusZone = "search";
626
+ this._panelTabHeld = false;
627
+ this._restoreTriggerFocus();
628
+ }
629
+ }
630
+ }
631
+ /** The focusable trigger (`tabindex=0`), in both builds. */
632
+ _triggerElement() {
633
+ return this.renderRoot.querySelector(".mono-dropdown-table-trigger");
634
+ }
635
+ /**
636
+ * Delegate focus to the trigger — the host itself isn't focusable. Needed by
637
+ * anything that focuses the component from outside, e.g. the data grid
638
+ * focusing the editor in a clicked cell (`focusRowCell`), which looks for an
639
+ * inner `input/textarea/select/button` and otherwise falls back to calling
640
+ * `focus()` on the element itself.
641
+ */
642
+ focus(options) {
643
+ this._triggerElement()?.focus(options);
644
+ }
645
+ blur() {
646
+ this._triggerElement()?.blur();
647
+ }
648
+ /** The search region's slotted content — light: captured nodes; shadow: `<slot>`. */
649
+ _searchRegionElements() {
650
+ if (this._isShadowHost) {
651
+ const slot = this.renderRoot.querySelector("slot[name=\"search\"]");
652
+ return slot ? slot.assignedElements({ flatten: true }) : [];
653
+ }
654
+ const sel = "[data-mono-slot=\"search\"]";
655
+ const region = this.querySelector(sel) ?? this._popup.panelRoot?.querySelector?.(sel);
656
+ return region ? Array.from(region.children) : [];
657
+ }
658
+ /**
659
+ * Focus the panel's search box once the panel is rendered, placed and (light
660
+ * build) portaled. Deferred a microtask so a slotted element that hasn't
661
+ * rendered its input yet gets a chance to — `updateComplete` on the search
662
+ * element itself, since it updates independently of this host.
663
+ */
664
+ /**
665
+ * The element to focus for "the search box", or null when the panel has no
666
+ * search region. `mono-table-search` / `mono-shadow-table-search` expose
667
+ * `focus()` and delegate to their own input, so neither build needs a DOM
668
+ * reach-in; anything else slotted in its place falls back to its first field.
669
+ */
670
+ _searchEl() {
671
+ for (const el of this._searchRegionElements()) {
672
+ if (el.matches("mono-table-search, mono-shadow-table-search")) return el;
673
+ const sel = "input:not([type=\"hidden\"]), textarea, select";
674
+ const field = el.matches(sel) ? el : el.querySelector(sel) ?? el.shadowRoot?.querySelector(sel);
675
+ if (field) return field;
676
+ }
677
+ return null;
678
+ }
679
+ async _focusSearch() {
680
+ await this.updateComplete;
681
+ if (!this._isOpen) return;
682
+ const el = this._searchEl();
683
+ if (!el) return;
684
+ const pending = el.updateComplete;
685
+ if (pending) await pending;
686
+ if (!this._isOpen) return;
687
+ el.focus({ preventScroll: true });
688
+ this._focusZone = "search";
689
+ this._searchFocused = true;
690
+ }
691
+ _rowEls() {
692
+ const root = this._rowScope;
693
+ if (!root?.querySelectorAll) return [];
694
+ return Array.from(root.querySelectorAll("[data-row-key]"));
695
+ }
696
+ _panelEl() {
697
+ return (this._popup.panelRoot ?? this.renderRoot)?.querySelector?.(".mono-dropdown-table-panel") ?? null;
698
+ }
699
+ _setActiveRow(key, reveal = false) {
700
+ this._activeRowKey = key;
701
+ this._reflectSelection();
702
+ if (!reveal || key == null) return;
703
+ this._rowEls().find((r) => r.getAttribute("data-row-key") === key)?.scrollIntoView?.({ block: "nearest" });
704
+ }
705
+ _moveActiveRow(delta) {
706
+ const keys = this._rowEls().map((r) => r.getAttribute("data-row-key") ?? "");
707
+ if (!keys.length) return;
708
+ const i = this._activeRowKey == null ? -1 : keys.indexOf(this._activeRowKey);
709
+ const next = i < 0 ? delta > 0 ? 0 : keys.length - 1 : Math.min(Math.max(i + delta, 0), keys.length - 1);
710
+ this._setActiveRow(keys[next], true);
711
+ }
712
+ /** Move the keyboard into the row list, highlighting the first row. */
713
+ _enterList() {
714
+ this._focusZone = "list";
715
+ if (this._activeRowKey == null) this._setActiveRow(this._rowEls()[0]?.getAttribute("data-row-key") ?? null, true);
716
+ this._panelEl()?.focus({ preventScroll: true });
717
+ }
718
+ /** Move the keyboard back to the search box (no-op when there isn't one). */
719
+ _enterSearch() {
720
+ const el = this._searchEl();
721
+ if (!el) return;
722
+ this._focusZone = "search";
723
+ el.focus({ preventScroll: true });
724
+ }
725
+ _selectActiveRow() {
726
+ if (this._activeRowKey == null) return;
727
+ this._dd?.toggleRow(this._activeRowKey);
728
+ this._reflectSelection();
729
+ }
730
+ /**
731
+ * Where the keyboard starts when the panel opens: the search box if there is
732
+ * one, otherwise straight into the list with the first row highlighted.
733
+ */
734
+ async _initPanelFocus() {
735
+ await this.updateComplete;
736
+ if (!this._isOpen) return;
737
+ const selected = this._dd?.selectedItems?.() ?? [];
738
+ if (selected.length) this._setActiveRow(String(selected[selected.length - 1].key), true);
739
+ if (this._searchEl()) {
740
+ this._focusZone = "search";
741
+ if (this.autoFocusSearch) this._focusSearch();
742
+ return;
743
+ }
744
+ this._enterList();
745
+ }
746
+ /**
747
+ * Hand focus back to the trigger when a panel that HAD focus closes — hiding
748
+ * the panel blurs its input to `<body>`, which would otherwise strand the
749
+ * keyboard. Covers every close path (Escape, outside pointerdown, a
750
+ * controller-driven auto-close after a single-select pick) because it hangs
751
+ * off the state edge rather than off `close()`.
752
+ */
753
+ _restoreTriggerFocus() {
754
+ if (!this._searchFocused) return;
755
+ this._searchFocused = false;
756
+ const active = document.activeElement;
757
+ const panel = this._popup.panelRoot?.querySelector?.(".mono-dropdown-table-panel");
758
+ if (!(!active || active === document.body || this.contains(active) || !!panel?.contains(active))) return;
759
+ this.focus({ preventScroll: true });
760
+ }
761
+ /** A panel region — light: a `data-mono-slot` capture target; shadow overrides with `<slot>`. */
762
+ _renderRegion(cls, name) {
763
+ return html`<div class="mono-dropdown-table-region ${cls}" mono-dd-region=${cls} data-mono-slot="${name}"></div>`;
764
+ }
765
+ _caretIcon() {
766
+ return caretIcon();
767
+ }
768
+ _chevronIcon(dir) {
769
+ return chevronIcon(dir);
770
+ }
771
+ /**
772
+ * One scroll button. `active` false keeps the box — and therefore the row's
773
+ * width — but hides it (`is-idle` → `visibility: hidden`), so reaching an end
774
+ * of the strip costs no layout. `aria-hidden` keeps the hidden one out of
775
+ * reach of assistive tech; `pointer-events: none` handles the pointer.
776
+ */
777
+ _renderScrollButton(dir, active) {
778
+ const back = dir === -1;
779
+ const base = `mono-dropdown-table-scroll mono-dropdown-table-scroll-${back ? "prev" : "next"}${active ? "" : " is-idle"}`;
780
+ return html`<span
781
+ role="button"
782
+ tabindex="-1"
783
+ class=${this._cls(base, back ? "scrollPrev" : "scrollNext")}
784
+ mono-dd-scroll=${back ? "prev" : "next"}
785
+ ?mono-idle=${!active}
786
+ aria-label=${back ? "Scroll selection backward" : "Scroll selection forward"}
787
+ aria-hidden=${active ? "false" : "true"}
788
+ @mousedown=${(e) => e.preventDefault()}
789
+ @click=${(e) => {
790
+ e.stopPropagation();
791
+ this._chipStrip.page(dir);
792
+ }}
793
+ >${this._chevronIcon(dir)}</span
794
+ >`;
795
+ }
796
+ /** The `chip` prop, always an object (it can be assigned null from a binding). */
797
+ get _chipProps() {
798
+ return this.chip ?? {};
799
+ }
800
+ /** Chip layout: `inline` = one scrolling line, anything else = today's wrap. */
801
+ get _chipBehaviour() {
802
+ return this._chipProps.behaviour === "inline" ? "inline" : "flex";
803
+ }
804
+ /** True where a scrolling strip actually renders: multi, inline, with chips. */
805
+ get _inlineChips() {
806
+ return this._multi && this._hasValue && this._chipBehaviour === "inline";
807
+ }
808
+ /**
809
+ * How many chips to draw for `total` selected rows before the rest collapse
810
+ * into "+N more" — Infinity when uncapped or under the collapse floor.
811
+ * `chip.maxVisible` / `chip.minVisible` pin, the element props are the
812
+ * fallback (`resolveChipLimit`). Applies to `inline` as well: the "+N more"
813
+ * chip then sits in the strip after the visible ones and its panel lists the
814
+ * rest, exactly as in `flex`.
815
+ */
816
+ _visibleCap(total) {
817
+ const chip = this._chipProps;
818
+ return visibleChipCap(total, resolveChipLimit(chip, "maxVisible", this.maxVisible), resolveChipLimit(chip, "minVisible", this.minVisible));
819
+ }
820
+ /** The selection floor in force (element / chip / controller), 0 when none. */
821
+ get _minSelected() {
822
+ return this._dd?.limits().min ?? 0;
823
+ }
824
+ /** A chip can be removed while the selection sits above its floor. */
825
+ get _canRemove() {
826
+ return (this._dd?.selectedItems?.()?.length ?? 0) > this._minSelected;
827
+ }
828
+ /**
829
+ * Chip skin matching the field skin: a `filled` field already tints its own
830
+ * surface, so a soft chip would vanish into it — go solid; `underlined` is
831
+ * minimal, so the chip stays outline. `chip.variant` pins one instead.
832
+ */
833
+ get _chipVariantClass() {
834
+ const pinned = this._chipProps.variant;
835
+ if (pinned) return pinned;
836
+ if (this.variant === "filled") return "solid";
837
+ if (this.variant === "underlined") return "outline";
838
+ return "soft";
839
+ }
840
+ /** Chips wear the control's color unless `chip.color` pins another. */
841
+ get _chipColorClass() {
842
+ return this._chipProps.color ?? this.color;
843
+ }
844
+ /**
845
+ * Classes shared by the selection chips and the "+N more" chip, in
846
+ * `mono-chip`'s own order (`mono-chip <size> <variant>-<color> <shape>`), so
847
+ * chip.css paints them exactly as it paints a real `<mono-chip>`.
848
+ *
849
+ * `mono-dropdown-table-chip` is a marker only — it scopes the `--mono-chip-*`
850
+ * bridge in dropdown-table.css so the bridge never reaches a `<mono-chip>` a
851
+ * consumer slots into the panel. `chip.color` deliberately picks a hue OTHER
852
+ * than the control accent, so it adds the `-pinned` marker that switches the
853
+ * bridge back off.
854
+ */
855
+ get _chipBaseClasses() {
856
+ const chip = this._chipProps;
857
+ return [
858
+ "mono-dropdown-table-chip",
859
+ chip.color ? "mono-dropdown-table-chip-pinned" : "",
860
+ chip.size ?? (this.size === "xs" || this.size === "sm" ? "xs" : "sm"),
861
+ `${this._chipVariantClass}-${this._chipColorClass}`,
862
+ "",
863
+ chip.dot ? "has-dot" : ""
864
+ ].filter(Boolean).join(" ");
865
+ }
866
+ /**
867
+ * Class for one chip part. Both class APIs append: the field-level key
868
+ * (`cssClass.chip` / `.chipLabel` / `.chipRemove`) and the chip-level one
869
+ * (`chip.cssClass.*`, which additionally reaches the parts the field has no
870
+ * key for — `main`, `content`, `dot`).
871
+ */
872
+ _chipCls(base, chipKey, key) {
873
+ return [
874
+ base,
875
+ key ? this.cssClass?.[key] : void 0,
876
+ this._chipProps.cssClass?.[chipKey]
877
+ ].filter(Boolean).join(" ");
878
+ }
879
+ _renderChip(it) {
880
+ const chip = this._chipProps;
881
+ const removable = !this.disabled && !this.readonly && this._canRemove;
882
+ return html`
883
+ <div
884
+ class=${this._chipCls(`${this._chipBaseClasses}${removable ? " removable" : ""}`, "root", "chip")}
885
+ mono-dd-chip
886
+ ?mono-dd-removable=${removable}
887
+ mono-dd-chip-color=${chip.color ?? nothing}
888
+ mono-dd-chip-rounded=${chip.rounded ?? nothing}
889
+ >
890
+ <span class=${ifDefined(chip.cssClass?.main)} mono-dd-chip-main>
891
+ <span class=${this._chipCls("chip-content", "content")} mono-dd-chip-content>
892
+ ${chip.dot ? html`<span class=${this._chipCls("chip-dot", "dot")} mono-dd-chip-dot aria-hidden="true"></span>` : nothing}
893
+ <span class=${this._chipCls("chip-label", "label", "chipLabel")} mono-dd-chip-label>${it.text}</span>
894
+ ${removable ? html`<button
895
+ type="button"
896
+ class=${this._chipCls("chip-close", "close", "chipRemove")}
897
+ mono-dd-chip-close
898
+ aria-label=${chip.closeLabel ?? `Remove ${it.text}`}
899
+ @click=${(e) => {
900
+ e.stopPropagation();
901
+ this._dd?.removeKey(it.key);
902
+ }}
903
+ >
904
+ ${closeIcon()}
905
+ </button>` : nothing}
906
+ </span>
907
+ </span>
908
+ </div>
909
+ `;
910
+ }
911
+ /**
912
+ * The chip region. `flex` returns the chips as bare children of the value
913
+ * span, so they wrap — the historical markup, unchanged. `inline` nests them
914
+ * in one `overflow-x: hidden` strip instead, which is what makes the row
915
+ * scroll as a unit.
916
+ */
917
+ _renderChipRegion(items) {
918
+ const chips = this._renderChips(items);
919
+ if (this._chipBehaviour !== "inline") return chips;
920
+ return html`
921
+ <span class=${this._cls("mono-dropdown-table-chip-strip", "chipStrip")} mono-dd-chip-strip>${chips}</span>
922
+ `;
923
+ }
924
+ _renderChips(items) {
925
+ const max = this._visibleCap(items.length);
926
+ const visible = max === Infinity ? items : items.slice(0, max);
927
+ const overflow = this._overflowItems(items);
928
+ const chips = visible.map((it) => this._renderChip(it));
929
+ if (overflow.length) chips.push(html`
930
+ <div
931
+ class=${this._cls(`${this._chipBaseClasses.replace(" has-dot", "")} clickable mono-dropdown-table-more-chip`, "moreChip")}
932
+ mono-dd-chip
933
+ mono-dd-more
934
+ mono-dd-chip-color=${this._chipProps.color ?? nothing}
935
+ mono-dd-chip-rounded=${this._chipProps.rounded ?? nothing}
936
+ >
937
+ <span
938
+ class=${ifDefined(this._chipProps.cssClass?.main)}
939
+ mono-dd-chip-main
940
+ role="button"
941
+ tabindex="0"
942
+ @mousedown=${(e) => e.preventDefault()}
943
+ @click=${(e) => {
944
+ e.stopPropagation();
945
+ const next = !this._moreOpen;
946
+ this._dd?.setOpen(false);
947
+ this._moreOpen = next;
948
+ this.requestUpdate();
949
+ }}
950
+ >
951
+ <span class=${this._chipCls("chip-content", "content")} mono-dd-chip-content
952
+ ><span class=${this._chipCls("chip-label", "label")} mono-dd-chip-label
953
+ >+${overflow.length} more</span
954
+ ></span
955
+ >
956
+ </span>
957
+ </div>
958
+ `);
959
+ return chips;
960
+ }
961
+ /** Selected rows past the visible cap — empty when uncapped or under the collapse floor. */
962
+ _overflowItems(items) {
963
+ const max = this._visibleCap(items.length);
964
+ return max === Infinity ? [] : items.slice(max);
965
+ }
966
+ /**
967
+ * Always rendered, shown by the root's `more-open` class: the panel lives in
968
+ * a body portal while open and a portaled node cannot be removed by a
969
+ * conditional render (Lit's ChildPart no longer contains it).
970
+ */
971
+ _renderMore(items) {
972
+ return html`<div class="mono-dropdown-table-more" mono-dd-more>${(this._moreOpen ? this._overflowItems(items) : []).map((it) => this._renderChip(it))}</div>`;
973
+ }
974
+ _renderLabel() {
975
+ if (!this.label) return nothing;
976
+ return html`<label class=${this._cls("mono-dropdown-table-label", "label")} mono-dd-label
977
+ >${this.label}${this.required ? html`<span class=${this._cls("mono-dropdown-table-required", "required")} mono-dd-required-mark>*</span>` : nothing}</label
978
+ >`;
979
+ }
980
+ _renderMessage() {
981
+ const base = this._cls("mono-dropdown-table-message", "message");
982
+ if (this.validationMessage) {
983
+ const state = this._validationState;
984
+ return html`<div class="${base} ${state}" mono-dd-message=${state} role=${state === "invalid" ? "alert" : nothing}>
985
+ ${this.validationMessage}
986
+ </div>`;
987
+ }
988
+ if (this.errorMessage) return html`<div class="${base} invalid" mono-dd-message="invalid" role="alert">${this.errorMessage}</div>`;
989
+ if (this.successMessage) return html`<div class="${base} valid" mono-dd-message="valid">${this.successMessage}</div>`;
990
+ if (this.helperText) return html`<div class="${base} helper" mono-dd-message="helper">${this.helperText}</div>`;
991
+ return nothing;
992
+ }
993
+ _renderTrigger(items) {
994
+ const dd = this._dd;
995
+ const hasValue = this._hasValue;
996
+ const inert = this.disabled || this.readonly;
997
+ const canClear = this.clearable && hasValue && !inert && !(this._multi && this._minSelected > 0);
998
+ const inlineChips = this._inlineChips;
999
+ return html`
1000
+ <div
1001
+ class=${this._triggerClasses}
1002
+ mono-dd-trigger
1003
+ role="combobox"
1004
+ tabindex=${this.disabled ? -1 : 0}
1005
+ aria-expanded=${this._isOpen ? "true" : "false"}
1006
+ @click=${() => this.toggle()}
1007
+ @keydown=${this._onTriggerKeydown}
1008
+ >
1009
+ <span
1010
+ class="${this._cls("mono-dropdown-table-value", "value")}${hasValue ? "" : ` mono-dropdown-table-placeholder${this.cssClass?.placeholder ? ` ${this.cssClass.placeholder}` : ""}`}${inlineChips ? " is-inline" : ""}"
1011
+ mono-dd-value
1012
+ ?mono-dd-placeholder=${!hasValue}
1013
+ ?mono-inline=${inlineChips}
1014
+ >
1015
+ ${this._multi ? hasValue ? this._renderChipRegion(items) : this.placeholder : hasValue ? html`<span>${dd?.displayText()}</span>` : this.placeholder}
1016
+ </span>
1017
+ <span class=${this._cls("mono-dropdown-table-actions", "actions")} mono-dd-actions>
1018
+ ${inlineChips && this._chipStrip.overflowing ? html`${this._renderScrollButton(-1, this._chipStrip.canScrollStart)}
1019
+ ${this._renderScrollButton(1, this._chipStrip.canScrollEnd)}` : nothing}
1020
+ ${canClear ? html`<span
1021
+ role="button"
1022
+ tabindex="-1"
1023
+ class=${this._cls("mono-dropdown-table-clear", "clear")}
1024
+ mono-dd-clear
1025
+ aria-label="Clear"
1026
+ @mousedown=${(e) => e.preventDefault()}
1027
+ @click=${(e) => {
1028
+ e.stopPropagation();
1029
+ this._dd?.clear();
1030
+ this.close();
1031
+ }}
1032
+ >${closeIcon()}</span
1033
+ >` : nothing}
1034
+ ${!inert && !canClear ? html`<span
1035
+ role="button"
1036
+ tabindex="-1"
1037
+ class=${this._cls("mono-dropdown-table-arrow", "arrow")}
1038
+ mono-dd-arrow
1039
+ aria-label="Toggle"
1040
+ aria-expanded=${this._isOpen ? "true" : "false"}
1041
+ @mousedown=${(e) => e.preventDefault()}
1042
+ @click=${(e) => {
1043
+ e.stopPropagation();
1044
+ this.toggle();
1045
+ }}
1046
+ >${this._caretIcon()}</span
1047
+ >` : nothing}
1048
+ </span>
1049
+ </div>
1050
+ `;
1051
+ }
1052
+ /**
1053
+ * Panel-only sizing from the `dropdown` object.
1054
+ *
1055
+ * `maxHeight` is published as the custom property `--_mono-dropdown-table-panel-max-h` rather than a direct
1056
+ * `max-height`: the popup controller also constrains the panel (via `--mono-popup-avail-h`),
1057
+ * and two writers on the same declaration would clobber each other across renders. The CSS
1058
+ * combines both with `min()`. Everything else is a plain declaration.
1059
+ *
1060
+ * `height` is an EXACT height here now. It used to be the cap, because this object had no
1061
+ * `maxHeight`; it does now, and the three popup components share one meaning.
1062
+ */
1063
+ _panelStyle() {
1064
+ const d = this.dropdown;
1065
+ if (!d) return {};
1066
+ const s = {};
1067
+ const w = toCssSize(d.width);
1068
+ const mw = toCssSize(d.minWidth);
1069
+ const xw = toCssSize(d.maxWidth);
1070
+ const h = toCssSize(d.height);
1071
+ const mh = toCssSize(d.minHeight);
1072
+ const xh = toCssSize(d.maxHeight);
1073
+ if (w) s.width = w;
1074
+ if (mw) s["min-width"] = mw;
1075
+ if (xw) s["max-width"] = xw;
1076
+ if (h) s.height = h;
1077
+ if (mh) s["min-height"] = mh;
1078
+ if (xh) s["--_mono-dropdown-table-panel-max-h"] = xh;
1079
+ return s;
1080
+ }
1081
+ render() {
1082
+ const items = this._dd?.selectedItems() ?? [];
1083
+ const state = this._validationState;
1084
+ return html`
1085
+ <div
1086
+ class=${this._wrapperClasses}
1087
+ style=${styleMap(buildSizeStyle(this))}
1088
+ mono-dropdown-table
1089
+ mono-size=${this.size === "md" ? nothing : this.size}
1090
+ mono-color=${this.color === "primary" ? nothing : this.color}
1091
+ mono-variant=${this.variant === "outlined" ? nothing : this.variant}
1092
+ mono-validation-state=${state === "default" ? nothing : state}
1093
+ mono-side=${this._resolvedSide}
1094
+ ?mono-open=${this._isOpen}
1095
+ ?mono-more-open=${this._moreOpen}
1096
+ ?mono-disabled=${this.disabled}
1097
+ ?mono-readonly=${this.readonly}
1098
+ ?mono-required=${this.required}
1099
+ ?mono-clearable=${this.clearable}
1100
+ ?mono-multiple=${this._multi}
1101
+ ?mono-has-value=${this._hasValue}
1102
+ >
1103
+ ${this._renderLabel()}
1104
+ <div
1105
+ class="mono-dropdown-table-control${this._inlineChips ? " is-inline" : ""}"
1106
+ mono-dd-control
1107
+ ?mono-inline=${this._inlineChips}
1108
+ >
1109
+ ${this._renderTrigger(items)} ${this._renderMore(items)}
1110
+ </div>
1111
+ ${this._renderMessage()}
1112
+ <div
1113
+ class="mono-dropdown-table-panel ${this._isOpen ? "open" : ""}"
1114
+ mono-dd-panel
1115
+ role="dialog"
1116
+ tabindex="-1"
1117
+ style=${styleMap(this._panelStyle())}
1118
+ @click=${this._onPanelClick}
1119
+ @keydown=${this._onPanelKeydown}
1120
+ @keyup=${this._onPanelKeyup}
1121
+ >
1122
+ ${this._renderRegion("search", "search")}
1123
+ ${this._renderRegion("body", "body")}
1124
+ ${this._renderRegion("foot", "footer")}
1125
+ </div>
1126
+ </div>
1127
+ `;
1128
+ }
1129
+ }
1130
+ __decorate([property({ attribute: false })], MonoDropdownTableCoreClass.prototype, "dataDropdown", void 0);
1131
+ __decorate([property({ type: String })], MonoDropdownTableCoreClass.prototype, "size", void 0);
1132
+ __decorate([property({ type: String })], MonoDropdownTableCoreClass.prototype, "color", void 0);
1133
+ __decorate([property({ type: String })], MonoDropdownTableCoreClass.prototype, "variant", void 0);
1134
+ __decorate([property({ type: String })], MonoDropdownTableCoreClass.prototype, "label", void 0);
1135
+ __decorate([property({ type: String })], MonoDropdownTableCoreClass.prototype, "placeholder", void 0);
1136
+ __decorate([property({
1137
+ type: String,
1138
+ attribute: "helper-text"
1139
+ })], MonoDropdownTableCoreClass.prototype, "helperText", void 0);
1140
+ __decorate([property({
1141
+ type: String,
1142
+ attribute: "validation-state"
1143
+ })], MonoDropdownTableCoreClass.prototype, "validationState", void 0);
1144
+ __decorate([property({
1145
+ type: String,
1146
+ attribute: "validation-message"
1147
+ })], MonoDropdownTableCoreClass.prototype, "validationMessage", void 0);
1148
+ __decorate([property({
1149
+ type: String,
1150
+ attribute: "error-message"
1151
+ })], MonoDropdownTableCoreClass.prototype, "errorMessage", void 0);
1152
+ __decorate([property({
1153
+ type: String,
1154
+ attribute: "success-message"
1155
+ })], MonoDropdownTableCoreClass.prototype, "successMessage", void 0);
1156
+ __decorate([property({
1157
+ reflect: true,
1158
+ converter: booleanStringConverter
1159
+ })], MonoDropdownTableCoreClass.prototype, "required", void 0);
1160
+ __decorate([property({
1161
+ reflect: true,
1162
+ converter: booleanStringConverter
1163
+ })], MonoDropdownTableCoreClass.prototype, "disabled", void 0);
1164
+ __decorate([property({
1165
+ reflect: true,
1166
+ converter: booleanStringConverter
1167
+ })], MonoDropdownTableCoreClass.prototype, "readonly", void 0);
1168
+ __decorate([property({
1169
+ reflect: true,
1170
+ converter: booleanStringConverter
1171
+ })], MonoDropdownTableCoreClass.prototype, "clearable", void 0);
1172
+ __decorate([property({
1173
+ reflect: true,
1174
+ converter: booleanStringConverter
1175
+ })], MonoDropdownTableCoreClass.prototype, "multiple", void 0);
1176
+ __decorate([property({ converter: optionalNumberConverter })], MonoDropdownTableCoreClass.prototype, "max", void 0);
1177
+ __decorate([property({ converter: optionalNumberConverter })], MonoDropdownTableCoreClass.prototype, "min", void 0);
1178
+ __decorate([property({
1179
+ attribute: "max-visible",
1180
+ converter: optionalNumberConverter
1181
+ })], MonoDropdownTableCoreClass.prototype, "maxVisible", void 0);
1182
+ __decorate([property({
1183
+ attribute: "min-visible",
1184
+ converter: optionalNumberConverter
1185
+ })], MonoDropdownTableCoreClass.prototype, "minVisible", void 0);
1186
+ __decorate([property({ attribute: false })], MonoDropdownTableCoreClass.prototype, "chip", void 0);
1187
+ __decorate([property({ attribute: "model-value" })], MonoDropdownTableCoreClass.prototype, "modelValue", void 0);
1188
+ __decorate([property({ type: String })], MonoDropdownTableCoreClass.prototype, "width", void 0);
1189
+ __decorate([property({ type: String })], MonoDropdownTableCoreClass.prototype, "height", void 0);
1190
+ __decorate([property({
1191
+ type: String,
1192
+ attribute: "min-width"
1193
+ })], MonoDropdownTableCoreClass.prototype, "minWidth", void 0);
1194
+ __decorate([property({
1195
+ type: String,
1196
+ attribute: "max-width"
1197
+ })], MonoDropdownTableCoreClass.prototype, "maxWidth", void 0);
1198
+ __decorate([property({
1199
+ type: String,
1200
+ attribute: "min-height"
1201
+ })], MonoDropdownTableCoreClass.prototype, "minHeight", void 0);
1202
+ __decorate([property({
1203
+ type: String,
1204
+ attribute: "max-height"
1205
+ })], MonoDropdownTableCoreClass.prototype, "maxHeight", void 0);
1206
+ __decorate([property({ attribute: false })], MonoDropdownTableCoreClass.prototype, "dropdown", void 0);
1207
+ __decorate([property({ type: String })], MonoDropdownTableCoreClass.prototype, "placement", void 0);
1208
+ __decorate([property({ converter: booleanStringConverter })], MonoDropdownTableCoreClass.prototype, "flip", void 0);
1209
+ __decorate([property({ converter: booleanStringConverter })], MonoDropdownTableCoreClass.prototype, "shift", void 0);
1210
+ __decorate([property({ converter: numberStringConverter })], MonoDropdownTableCoreClass.prototype, "offset", void 0);
1211
+ __decorate([property({
1212
+ attribute: "auto-focus-search",
1213
+ converter: booleanStringConverter
1214
+ })], MonoDropdownTableCoreClass.prototype, "autoFocusSearch", void 0);
1215
+ __decorate([property({
1216
+ attribute: "stay-open",
1217
+ reflect: true,
1218
+ converter: booleanStringConverter
1219
+ })], MonoDropdownTableCoreClass.prototype, "stayOpen", void 0);
1220
+ __decorate([property({ attribute: false })], MonoDropdownTableCoreClass.prototype, "cssClass", void 0);
1221
+ __decorate([property({ attribute: false })], MonoDropdownTableCoreClass.prototype, "cssClassName", void 0);
1222
+ return MonoDropdownTableCoreClass;
1223
+ };
1224
+ //#endregion
1225
+ //#region src/components/dropdown-table/dropdown-table.css?raw
1226
+ var dropdown_table_default = "/* LEGACY CLASS ALIASES — every `[mono-x]` below is wrapped as `:is([mono-x], .legacy)`\r\n by `scripts/legacy-class-alias.mjs` (`.mono-dropdown-table-region.body`,\r\n `tr.mono-dd-row-selected`, …), so host CSS and hand-written markup on the pre-port\r\n class contract keep painting. Author with the attribute only; re-run the script. */\r\n/* =========================================================================\r\n mono-dropdown-table — a dropdown whose panel is a native `<table>` for\r\n picking row(s). An EXTENSION: Basecoat has no table picker, so the FIELD is\r\n the multi-select combobox's chip box (`.combobox-chips` + `.combobox-chip`,\r\n basecoat-css@1.0.2, vega style) on the `.field` / `.label` chrome, and the\r\n PANEL is the combobox's `[data-popover]` holding a ported `<table mono-table>`\r\n instead of a listbox — so the rows are the table's own rows.\r\n\r\n Styled by ATTRIBUTE, like Basecoat — and the attributes mirror the element's\r\n props one for one, so hand-written markup reads like the Lit / Vue tag:\r\n\r\n <mono-dropdown-table size=\"sm\" color=\"danger\" label=\"Owner\" clearable multiple>\r\n <div mono-dropdown-table mono-size=\"sm\" mono-color=\"danger\" mono-clearable mono-multiple>\r\n <label mono-dd-label>Owner</label>\r\n <div mono-dd-control>\r\n <div mono-dd-trigger role=\"combobox\">\r\n <span mono-dd-value>\r\n <div mono-dd-chip mono-dd-removable><span mono-dd-chip-main><span mono-dd-chip-content>\r\n <span mono-dd-chip-label>Ada</span><button mono-dd-chip-close>…</button></span></span></div>\r\n </span>\r\n <span mono-dd-actions><span mono-dd-arrow>…</span></span>\r\n </div>\r\n </div>\r\n <div mono-dd-panel><div mono-dd-region=\"body\"><table mono-table>…</table></div></div>\r\n </div>\r\n\r\n An absent attribute is the prop's default (`:not([mono-size])` = md,\r\n `:not([mono-color])` = primary, `:not([mono-variant])` = outlined). The element\r\n renders these attributes on its wrapper (both builds) plus the STATES\r\n `mono-open` / `mono-more-open` / `mono-has-value` / `mono-side`; the old\r\n classes (`.mono-dropdown-table.sm.open`) are still emitted as inert hooks until\r\n 2.0 but no rule here reads them. The chips are NOT `.mono-chip`s any more: they\r\n are Basecoat combobox chips painted here, and chip.css never sees them.\r\n\r\n THE PARTS ARE FAMILY-UNIQUE (`mono-dd-*`), never the bare `mono-chip` /\r\n `mono-panel` / `mono-actions` the field components use: the panel holds a whole\r\n `<table mono-table>` whose cells may carry a consumer's `<mono-chip>`, and a\r\n `[mono-dropdown-table] [mono-chip]` rule would repaint it.\r\n\r\n Selector map (ours ≡ upstream):\r\n [mono-dropdown-table] ≡ .field (gap-3, as margins) + .combobox (position: relative)\r\n [mono-dropdown-table] > [mono-dd-label] ≡ .field > label / .label\r\n [mono-dd-trigger] ≡ .combobox-chips (min-h-9 gap-1.5 rounded-md border-input px-1.5 py-1.5 text-sm shadow-xs)\r\n [mono-dd-value] ≡ the chip row; EXTENSION: the single value / placeholder text\r\n [mono-dd-chip] > [mono-dd-chip-main] ≡ .combobox-chip (h-5.5 gap-1 rounded-sm bg-muted px-1.5 text-xs font-medium)\r\n [mono-dd-chip] [mono-dd-chip-close] ≡ .combobox-chip-remove (-ms-1 opacity-50 hover:100, svg size-3.5)\r\n [mono-dd-chip][mono-dd-more] ≡ EXTENSION (the \"+N more\" counter chip, same box)\r\n [mono-dd-actions] > [mono-dd-arrow] > svg ≡ .combobox-trigger-icon (size-4 text-muted-foreground)\r\n [mono-dd-actions] > [mono-dd-clear] ≡ .combobox [data-clear] (size-6, painted as .btn[data-variant='ghost'])\r\n [mono-dd-actions] > [mono-dd-scroll] ≡ EXTENSION (the inline strip's ‹ › pager, same box)\r\n [mono-dd-panel] ≡ .combobox [data-popover] (bg-popover ring-1 rounded-md shadow-md); EXTENSION: a flex column of regions\r\n [mono-dd-region=\"search|body|foot\"] ≡ EXTENSION (search box / the scrolling table / the pager)\r\n [mono-dd-more] ≡ [data-popover] holding the overflow chips\r\n [mono-table] tbody tr[mono-selected] ≡ .table tr data-[state=selected] — the TABLE's own rule paints it\r\n [mono-table] tbody tr[mono-dd-active] ≡ .combobox [role='option'].active (bg-muted) — the keyboard cursor\r\n [mono-dd-message=\"…\"] ≡ .field > p / .field [role='alert']\r\n [mono-validation-state=\"invalid\"] ≡ .combobox-chips:has([aria-invalid=true]) + .field[data-invalid]\r\n [mono-validation-state=\"valid|warning\"] ≡ EXTENSION (the invalid pattern in --success / --warning)\r\n [mono-size=\"xs|sm|lg|xl|xxl\"] ≡ EXTENSION (the --mono-control-height-* ladder)\r\n [mono-variant=\"filled\"] ≡ EXTENSION (luma's .combobox-chips)\r\n [mono-variant=\"underlined\"] ≡ EXTENSION (sera's .combobox-chips: bottom edge only, no ring)\r\n\r\n FLAVORS: the field IS the tag-input's chip box and the panel IS its popover, so\r\n every metric here resolves `--mono-dropdown-table-<k>` → `--mono-tag-input-<k>`\r\n → the base, through the SAME per-size chains tag-input.css uses — a flavour\r\n that retunes the tag-input retunes this field for free, and no flavour file\r\n carries a dropdown-table entry. Every fallback is vega's value.\r\n\r\n THE PANELS ARE PORTALED (light build): [mono-dd-panel] and [mono-dd-more]\r\n move into a `<div data-mono-popup-portal>` under <body> while open, and the\r\n portal mirrors the wrapper's class AND mono-* attributes, so every rule here\r\n is scoped under `[mono-dropdown-table]` and never relies on the panel being\r\n inside the field. The shadow build keeps its panel in the shadow root and\r\n SLOTS the consumer's light-DOM `<table>` into it — the row rules therefore\r\n come in two forms: the portaled table, and the slotted one under the host.\r\n ========================================================================= */\r\n\r\nmono-dropdown-table {\r\n display: block;\r\n width: 100%;\r\n}\r\n\r\n:is([mono-dropdown-table],.mono-dropdown-table) {\r\n /* ── palette: each slot is a public knob over the tag-input's, over a Basecoat token ── */\r\n --_mono-dropdown-table-text: var(--mono-dropdown-table-text, var(--mono-tag-input-text, var(--foreground)));\r\n --_mono-dropdown-table-placeholder: var(--mono-dropdown-table-placeholder, var(--mono-tag-input-placeholder, var(--muted-foreground)));\r\n --_mono-dropdown-table-muted: var(--mono-dropdown-table-muted, var(--mono-tag-input-muted, var(--muted-foreground)));\r\n --_mono-dropdown-table-primary: var(--mono-dropdown-table-primary, var(--mono-tag-input-primary, var(--ring)));\r\n --_mono-dropdown-table-secondary: var(--mono-dropdown-table-secondary, var(--mono-tag-input-secondary, var(--muted-foreground)));\r\n --_mono-dropdown-table-success: var(--mono-dropdown-table-success, var(--mono-tag-input-success, var(--success)));\r\n --_mono-dropdown-table-danger: var(--mono-dropdown-table-danger, var(--mono-tag-input-danger, var(--destructive)));\r\n --_mono-dropdown-table-warning: var(--mono-dropdown-table-warning, var(--mono-tag-input-warning, var(--warning)));\r\n --_mono-dropdown-table-info: var(--mono-dropdown-table-info, var(--mono-tag-input-info, var(--info)));\r\n --_mono-dropdown-table-teal: var(--mono-dropdown-table-teal, var(--mono-tag-input-teal, var(--teal)));\r\n --_mono-dropdown-table-purple: var(--mono-dropdown-table-purple, var(--mono-tag-input-purple, var(--purple)));\r\n --_mono-dropdown-table-neutral: var(--mono-dropdown-table-neutral, var(--mono-tag-input-neutral, var(--neutral)));\r\n --_mono-dropdown-table-dark: var(--mono-dropdown-table-dark, var(--mono-tag-input-dark, var(--dark)));\r\n --_mono-dropdown-table-valid: var(--mono-dropdown-table-valid, var(--mono-tag-input-valid, var(--success)));\r\n --_mono-dropdown-table-invalid: var(--mono-dropdown-table-invalid, var(--mono-tag-input-invalid, var(--destructive)));\r\n\r\n /* ── the painted result — three tiers, base = .combobox-chips (vega) ──── */\r\n --_mono-dropdown-table-ring-color: var(--mono-dropdown-table-ring-color, var(--mono-dropdown-table-focus-color, var(--_mono-dropdown-table-ring-color-preset, var(--_mono-dropdown-table-primary))));\r\n --_mono-dropdown-table-ring-width: var(--mono-dropdown-table-ring-width, var(--mono-tag-input-ring-width, var(--_mono-dropdown-table-ring-width-preset, var(--mono-ring-width))));\r\n --_mono-dropdown-table-ring-alpha: var(--mono-dropdown-table-ring-alpha, var(--mono-tag-input-ring-alpha, var(--mono-ring-alpha)));\r\n --_mono-dropdown-table-border-color: var(--mono-dropdown-table-rest-border, var(--mono-dropdown-table-border-color, var(--mono-dropdown-table-border, var(--mono-tag-input-rest-border, var(--mono-tag-input-border-color, var(--mono-tag-input-border, var(--_mono-dropdown-table-border-color-preset, var(--input))))))));\r\n --_mono-dropdown-table-bg: var(--mono-dropdown-table-bg, var(--mono-dropdown-table-surface, var(--mono-tag-input-bg, var(--mono-tag-input-surface, var(--_mono-dropdown-table-bg-preset, var(--mono-mode-surface))))));\r\n --_mono-dropdown-table-shadow: var(--mono-dropdown-table-shadow, var(--mono-tag-input-shadow, var(--_mono-dropdown-table-shadow-preset, 0 0 #0000)));\r\n --_mono-dropdown-table-icon: var(--mono-dropdown-table-icon-size, var(--mono-tag-input-icon-size, calc(var(--mono-spacing) * 4)));\r\n\r\n /* ── md metrics live on the unqualified root ON PURPOSE: hand-written\r\n `<div mono-dropdown-table>` that names no size renders exactly like\r\n size=\"md\". basecoat@1.0.2 styles/vega.css .combobox-chips — min-h-9\r\n gap-1.5 rounded-md px-1.5 py-1.5 text-sm; .combobox-chip h-5.5 ── */\r\n --_mono-dropdown-table-height: var(--mono-dropdown-table-height-md, var(--mono-tag-input-height-md, var(--mono-control-height-md)));\r\n --_mono-dropdown-table-radius: var(--mono-dropdown-table-radius-md, var(--mono-tag-input-radius-md, var(--_mono-dropdown-table-radius-preset, var(--mono-dropdown-table-radius, var(--mono-tag-input-radius, var(--mono-radius-md))))));\r\n --_mono-dropdown-table-padding-x: var(--mono-dropdown-table-padding-x-md, var(--mono-tag-input-padding-x-md, var(--mono-dropdown-table-padding-x, var(--mono-tag-input-padding-x, var(--_mono-dropdown-table-padding-x-preset, calc(var(--mono-spacing) * 1.5))))));\r\n --_mono-dropdown-table-padding-y: var(--mono-dropdown-table-padding-y-md, var(--mono-tag-input-padding-y-md, var(--mono-dropdown-table-padding-y, var(--mono-tag-input-padding-y, calc(var(--mono-spacing) * 1.5)))));\r\n --_mono-dropdown-table-gap: var(--mono-dropdown-table-chip-gap, var(--mono-tag-input-chip-gap, calc(var(--mono-spacing) * 1.5)));\r\n --_mono-dropdown-table-font-size: var(--mono-dropdown-table-font-md, var(--mono-tag-input-font-md, var(--mono-text-sm)));\r\n --_mono-dropdown-table-line-height: var(--mono-dropdown-table-line-height, var(--mono-tag-input-line-height, var(--mono-dropdown-table-line-height-md, var(--mono-tag-input-line-height-md, var(--mono-text-sm--lh)))));\r\n /* Same cap as tag-input's (see tag-input.css): one row of chips never outgrows the field's height. */\r\n --_mono-dropdown-table-chip-fit: calc(var(--_mono-dropdown-table-height) - 2 * var(--_mono-dropdown-table-padding-y) - 2 * var(--mono-border-width));\r\n --_mono-dropdown-table-chip-height: var(--mono-dropdown-table-chip-height-md, var(--mono-tag-input-chip-height-md, min(calc(var(--mono-spacing) * 5.5), var(--_mono-dropdown-table-chip-fit))));\r\n --_mono-dropdown-table-chip-font-size: var(--mono-dropdown-table-chip-font-size, var(--mono-tag-input-chip-font-size, var(--mono-text-xs)));\r\n --_mono-dropdown-table-chip-line-height: var(--mono-dropdown-table-chip-line-height, var(--mono-tag-input-chip-line-height, var(--mono-text-xs--lh)));\r\n --_mono-dropdown-table-action: calc(var(--mono-spacing) * 6);\r\n --_mono-dropdown-table-clear-glyph: calc(var(--mono-spacing) * 3.5);\r\n\r\n /* basecoat@1.0.2 styles/vega.css .field — flex w-full flex-col gap-3; mono:\r\n BLOCK flow with the gap as margins (see tag-input.css) */\r\n --_mono-dropdown-table-gap-y: var(--mono-dropdown-table-gap, var(--mono-tag-input-gap, calc(var(--mono-spacing) * 3)));\r\n position: relative;\r\n display: block;\r\n width: 100%;\r\n font-family: inherit;\r\n color: var(--_mono-dropdown-table-text);\r\n}\r\n\r\n/* The page's global `* { box-sizing: border-box }` does NOT cross the shadow\r\n boundary; without this the trigger's `min-height` would be its CONTENT height\r\n there (40px → 56px). Rewrites to `:host, :host *` in the shadow sheet. */\r\nmono-dropdown-table,\r\nmono-dropdown-table *,\r\n:is([mono-dropdown-table],.mono-dropdown-table),\r\n:is([mono-dropdown-table],.mono-dropdown-table) *,\r\n:is([mono-dropdown-table],.mono-dropdown-table) *::before,\r\n:is([mono-dropdown-table],.mono-dropdown-table) *::after {\r\n box-sizing: border-box;\r\n}\r\n\r\n:is([mono-dropdown-table],.mono-dropdown-table) :is(:is([mono-dd-label],.mono-dropdown-table-label), :is([mono-dd-message],.mono-dropdown-table-message))[mono-empty] {\r\n display: none;\r\n}\r\n\r\n/* =========================================\r\n Sizes — an EMPTY field's painted height IS the token (tests/perf/field-heights);\r\n a second row of chips grows it. The same chains as tag-input.css, one tier up.\r\n ========================================= */\r\n\r\n:is([mono-dropdown-table],.mono-dropdown-table):is([mono-size=\"xs\"],:where(.mono-dropdown-table.xs)) {\r\n --_mono-dropdown-table-height: var(--mono-dropdown-table-height-xs, var(--mono-tag-input-height-xs, var(--mono-control-height-xs)));\r\n --_mono-dropdown-table-radius: var(--mono-dropdown-table-radius-xs, var(--mono-tag-input-radius-xs, var(--_mono-dropdown-table-radius-preset, var(--mono-dropdown-table-radius, var(--mono-tag-input-radius, var(--mono-radius-md))))));\r\n --_mono-dropdown-table-padding-x: var(--mono-dropdown-table-padding-x-xs, var(--mono-tag-input-padding-x-xs, var(--mono-dropdown-table-padding-x, var(--mono-tag-input-padding-x, var(--_mono-dropdown-table-padding-x-preset, var(--mono-spacing))))));\r\n --_mono-dropdown-table-padding-y: var(--mono-dropdown-table-padding-y-xs, var(--mono-tag-input-padding-y-xs, var(--mono-dropdown-table-padding-y, var(--mono-tag-input-padding-y, calc(var(--mono-spacing) * 0.5)))));\r\n --_mono-dropdown-table-gap: var(--mono-dropdown-table-chip-gap, var(--mono-tag-input-chip-gap, var(--mono-spacing)));\r\n --_mono-dropdown-table-font-size: var(--mono-dropdown-table-font-xs, var(--mono-tag-input-font-xs, var(--mono-text-xs)));\r\n --_mono-dropdown-table-line-height: var(--mono-dropdown-table-line-height, var(--mono-tag-input-line-height, var(--mono-dropdown-table-line-height-xs, var(--mono-tag-input-line-height-xs, var(--mono-text-xs--lh)))));\r\n --_mono-dropdown-table-chip-height: var(--mono-dropdown-table-chip-height-xs, var(--mono-tag-input-chip-height-xs, min(calc(var(--mono-spacing) * 4.5), var(--_mono-dropdown-table-chip-fit))));\r\n --_mono-dropdown-table-icon: var(--mono-dropdown-table-icon-size, var(--mono-tag-input-icon-size, calc(var(--mono-spacing) * 3.5)));\r\n --_mono-dropdown-table-action: calc(var(--mono-spacing) * 4);\r\n --_mono-dropdown-table-clear-glyph: calc(var(--mono-spacing) * 3);\r\n}\r\n\r\n:is([mono-dropdown-table],.mono-dropdown-table):is([mono-size=\"sm\"],:where(.mono-dropdown-table.sm)) {\r\n --_mono-dropdown-table-height: var(--mono-dropdown-table-height-sm, var(--mono-tag-input-height-sm, var(--mono-control-height-sm)));\r\n --_mono-dropdown-table-radius: var(--mono-dropdown-table-radius-sm, var(--mono-tag-input-radius-sm, var(--_mono-dropdown-table-radius-preset, var(--mono-dropdown-table-radius, var(--mono-tag-input-radius, var(--mono-radius-md))))));\r\n --_mono-dropdown-table-padding-x: var(--mono-dropdown-table-padding-x-sm, var(--mono-tag-input-padding-x-sm, var(--mono-dropdown-table-padding-x, var(--mono-tag-input-padding-x, var(--_mono-dropdown-table-padding-x-preset, var(--mono-spacing))))));\r\n --_mono-dropdown-table-padding-y: var(--mono-dropdown-table-padding-y-sm, var(--mono-tag-input-padding-y-sm, var(--mono-dropdown-table-padding-y, var(--mono-tag-input-padding-y, var(--mono-spacing)))));\r\n --_mono-dropdown-table-gap: var(--mono-dropdown-table-chip-gap, var(--mono-tag-input-chip-gap, var(--mono-spacing)));\r\n --_mono-dropdown-table-font-size: var(--mono-dropdown-table-font-sm, var(--mono-tag-input-font-sm, var(--mono-dropdown-table-font-md, var(--mono-tag-input-font-md, var(--mono-text-sm)))));\r\n --_mono-dropdown-table-line-height: var(--mono-dropdown-table-line-height, var(--mono-tag-input-line-height, var(--mono-dropdown-table-line-height-sm, var(--mono-tag-input-line-height-sm, var(--mono-text-sm--lh)))));\r\n --_mono-dropdown-table-chip-height: var(--mono-dropdown-table-chip-height-sm, var(--mono-tag-input-chip-height-sm, min(calc(var(--mono-spacing) * 5), var(--_mono-dropdown-table-chip-fit))));\r\n --_mono-dropdown-table-action: calc(var(--mono-spacing) * 5);\r\n}\r\n\r\n:is([mono-dropdown-table],.mono-dropdown-table):is([mono-size=\"lg\"],:where(.mono-dropdown-table.lg)) {\r\n --_mono-dropdown-table-height: var(--mono-dropdown-table-height-lg, var(--mono-tag-input-height-lg, var(--mono-control-height-lg)));\r\n --_mono-dropdown-table-radius: var(--mono-dropdown-table-radius-lg, var(--mono-tag-input-radius-lg, var(--_mono-dropdown-table-radius-preset, var(--mono-dropdown-table-radius, var(--mono-tag-input-radius, var(--mono-radius-md))))));\r\n --_mono-dropdown-table-padding-x: var(--mono-dropdown-table-padding-x-lg, var(--mono-tag-input-padding-x-lg, var(--mono-dropdown-table-padding-x, var(--mono-tag-input-padding-x, var(--_mono-dropdown-table-padding-x-preset, calc(var(--mono-spacing) * 1.5))))));\r\n --_mono-dropdown-table-padding-y: var(--mono-dropdown-table-padding-y-lg, var(--mono-tag-input-padding-y-lg, var(--mono-dropdown-table-padding-y, var(--mono-tag-input-padding-y, calc(var(--mono-spacing) * 1.5)))));\r\n --_mono-dropdown-table-font-size: var(--mono-dropdown-table-font-lg, var(--mono-tag-input-font-lg, var(--mono-dropdown-table-font-md, var(--mono-tag-input-font-md, var(--mono-text-sm)))));\r\n --_mono-dropdown-table-line-height: var(--mono-dropdown-table-line-height, var(--mono-tag-input-line-height, var(--mono-dropdown-table-line-height-lg, var(--mono-tag-input-line-height-lg, var(--mono-text-sm--lh)))));\r\n --_mono-dropdown-table-chip-height: var(--mono-dropdown-table-chip-height-lg, var(--mono-tag-input-chip-height-lg, min(calc(var(--mono-spacing) * 6), var(--_mono-dropdown-table-chip-fit))));\r\n}\r\n\r\n:is([mono-dropdown-table],.mono-dropdown-table):is([mono-size=\"xl\"],:where(.mono-dropdown-table.xl)) {\r\n --_mono-dropdown-table-height: var(--mono-dropdown-table-height-xl, var(--mono-tag-input-height-xl, var(--mono-control-height-xl)));\r\n --_mono-dropdown-table-radius: var(--mono-dropdown-table-radius-xl, var(--mono-tag-input-radius-xl, var(--_mono-dropdown-table-radius-preset, var(--mono-dropdown-table-radius, var(--mono-tag-input-radius, var(--mono-radius-md))))));\r\n --_mono-dropdown-table-padding-x: var(--mono-dropdown-table-padding-x-xl, var(--mono-tag-input-padding-x-xl, var(--mono-dropdown-table-padding-x, var(--mono-tag-input-padding-x, var(--_mono-dropdown-table-padding-x-preset, calc(var(--mono-spacing) * 2))))));\r\n --_mono-dropdown-table-padding-y: var(--mono-dropdown-table-padding-y-xl, var(--mono-tag-input-padding-y-xl, var(--mono-dropdown-table-padding-y, var(--mono-tag-input-padding-y, calc(var(--mono-spacing) * 2)))));\r\n --_mono-dropdown-table-gap: var(--mono-dropdown-table-chip-gap, var(--mono-tag-input-chip-gap, calc(var(--mono-spacing) * 2)));\r\n --_mono-dropdown-table-font-size: var(--mono-dropdown-table-font-xl, var(--mono-tag-input-font-xl, var(--mono-text-base)));\r\n --_mono-dropdown-table-line-height: var(--mono-dropdown-table-line-height, var(--mono-tag-input-line-height, var(--mono-dropdown-table-line-height-xl, var(--mono-tag-input-line-height-xl, var(--mono-text-base--lh)))));\r\n --_mono-dropdown-table-chip-height: var(--mono-dropdown-table-chip-height-xl, var(--mono-tag-input-chip-height-xl, min(calc(var(--mono-spacing) * 6.5), var(--_mono-dropdown-table-chip-fit))));\r\n --_mono-dropdown-table-chip-font-size: var(--mono-dropdown-table-chip-font-size, var(--mono-tag-input-chip-font-size, var(--mono-text-sm)));\r\n --_mono-dropdown-table-chip-line-height: var(--mono-dropdown-table-chip-line-height, var(--mono-tag-input-chip-line-height, var(--mono-text-sm--lh)));\r\n --_mono-dropdown-table-icon: var(--mono-dropdown-table-icon-size, var(--mono-tag-input-icon-size, calc(var(--mono-spacing) * 5)));\r\n --_mono-dropdown-table-action: calc(var(--mono-spacing) * 7);\r\n --_mono-dropdown-table-clear-glyph: calc(var(--mono-spacing) * 4);\r\n}\r\n\r\n:is([mono-dropdown-table],.mono-dropdown-table):is([mono-size=\"xxl\"],:where(.mono-dropdown-table.xxl)) {\r\n --_mono-dropdown-table-height: var(--mono-dropdown-table-height-xxl, var(--mono-tag-input-height-xxl, var(--mono-control-height-xxl)));\r\n --_mono-dropdown-table-radius: var(--mono-dropdown-table-radius-xxl, var(--mono-tag-input-radius-xxl, var(--_mono-dropdown-table-radius-preset, var(--mono-dropdown-table-radius, var(--mono-tag-input-radius, var(--mono-radius-md))))));\r\n --_mono-dropdown-table-padding-x: var(--mono-dropdown-table-padding-x-xxl, var(--mono-tag-input-padding-x-xxl, var(--mono-dropdown-table-padding-x, var(--mono-tag-input-padding-x, var(--_mono-dropdown-table-padding-x-preset, calc(var(--mono-spacing) * 2.5))))));\r\n --_mono-dropdown-table-padding-y: var(--mono-dropdown-table-padding-y-xxl, var(--mono-tag-input-padding-y-xxl, var(--mono-dropdown-table-padding-y, var(--mono-tag-input-padding-y, calc(var(--mono-spacing) * 2)))));\r\n --_mono-dropdown-table-gap: var(--mono-dropdown-table-chip-gap, var(--mono-tag-input-chip-gap, calc(var(--mono-spacing) * 2)));\r\n --_mono-dropdown-table-font-size: var(--mono-dropdown-table-font-xxl, var(--mono-tag-input-font-xxl, var(--mono-text-lg)));\r\n --_mono-dropdown-table-line-height: var(--mono-dropdown-table-line-height, var(--mono-tag-input-line-height, var(--mono-dropdown-table-line-height-xxl, var(--mono-tag-input-line-height-xxl, var(--mono-text-lg--lh)))));\r\n --_mono-dropdown-table-chip-height: var(--mono-dropdown-table-chip-height-xxl, var(--mono-tag-input-chip-height-xxl, min(calc(var(--mono-spacing) * 7), var(--_mono-dropdown-table-chip-fit))));\r\n --_mono-dropdown-table-chip-font-size: var(--mono-dropdown-table-chip-font-size, var(--mono-tag-input-chip-font-size, var(--mono-text-sm)));\r\n --_mono-dropdown-table-chip-line-height: var(--mono-dropdown-table-chip-line-height, var(--mono-tag-input-chip-line-height, var(--mono-text-sm--lh)));\r\n --_mono-dropdown-table-icon: var(--mono-dropdown-table-icon-size, var(--mono-tag-input-icon-size, calc(var(--mono-spacing) * 5)));\r\n --_mono-dropdown-table-action: calc(var(--mono-spacing) * 8);\r\n --_mono-dropdown-table-clear-glyph: calc(var(--mono-spacing) * 4);\r\n}\r\n\r\n/* =========================================\r\n Variants — each writes only `*-preset` slots, read from the dropdown-table's\r\n knob first and the tag-input's second (a flavour writes the latter)\r\n ========================================= */\r\n\r\n/* basecoat@1.0.2 styles/vega.css .combobox-chips — rounded-md border border-input\r\n bg-transparent shadow-xs (dark:bg-input/30 via --mono-mode-surface) */\r\n:is([mono-dropdown-table],.mono-dropdown-table):is(:not([mono-variant]), :is([mono-variant=\"outlined\"],:where(.mono-dropdown-table.outlined))) {\r\n --_mono-dropdown-table-bg-preset: var(--mono-dropdown-table-outline-bg, var(--mono-tag-input-outline-bg));\r\n --_mono-dropdown-table-border-color-preset: var(--mono-dropdown-table-outline-border-color, var(--mono-tag-input-outline-border-color));\r\n --_mono-dropdown-table-side-border-color-preset: var(--mono-dropdown-table-outline-side-border-color, var(--mono-tag-input-outline-side-border-color));\r\n --_mono-dropdown-table-shadow-preset: var(--mono-dropdown-table-outline-shadow, var(--mono-tag-input-outline-shadow, var(--mono-shadow-xs)));\r\n --_mono-dropdown-table-ring-width-preset: var(--mono-dropdown-table-outline-ring-width, var(--mono-tag-input-outline-ring-width));\r\n --_mono-dropdown-table-radius-preset: var(--mono-dropdown-table-outline-radius, var(--mono-tag-input-outline-radius));\r\n --_mono-dropdown-table-padding-x-preset: var(--mono-dropdown-table-outline-padding-x, var(--mono-tag-input-outline-padding-x));\r\n}\r\n\r\n/* EXTENSION — filled ≡ basecoat@1.0.2 styles/luma.css .combobox-chips */\r\n:is([mono-dropdown-table],.mono-dropdown-table):is([mono-variant=\"filled\"],:where(.mono-dropdown-table.filled)) {\r\n --_mono-dropdown-table-bg-preset: var(--mono-dropdown-table-filled-bg, var(--mono-tag-input-filled-bg, color-mix(in oklab, var(--input) 50%, transparent)));\r\n --_mono-dropdown-table-border-color-preset: transparent;\r\n --_mono-dropdown-table-shadow-preset: 0 0 #0000;\r\n}\r\n\r\n/* EXTENSION — underlined ≡ basecoat@1.0.2 styles/sera.css .combobox-chips */\r\n:is([mono-dropdown-table],.mono-dropdown-table):is([mono-variant=\"underlined\"],:where(.mono-dropdown-table.underlined)) {\r\n --_mono-dropdown-table-bg-preset: transparent;\r\n --_mono-dropdown-table-side-border-color-preset: transparent;\r\n --_mono-dropdown-table-shadow-preset: 0 0 #0000;\r\n --_mono-dropdown-table-ring-width-preset: 0px;\r\n --_mono-dropdown-table-radius-preset: 0;\r\n --_mono-dropdown-table-padding-x-preset: 0;\r\n}\r\n\r\n/* =========================================\r\n Colours — the `color` prop is the FOCUS colour (ring + focused border)\r\n ========================================= */\r\n\r\n:is([mono-dropdown-table],.mono-dropdown-table):is(:not([mono-color]), :is([mono-color=\"primary\"],:where(.mono-dropdown-table.primary))) {\r\n --_mono-dropdown-table-ring-color-preset: var(--_mono-dropdown-table-primary);\r\n}\r\n:is([mono-dropdown-table],.mono-dropdown-table):is([mono-color=\"secondary\"],:where(.mono-dropdown-table.secondary)) {\r\n --_mono-dropdown-table-ring-color-preset: var(--_mono-dropdown-table-secondary);\r\n}\r\n:is([mono-dropdown-table],.mono-dropdown-table):is([mono-color=\"success\"],:where(.mono-dropdown-table.success)) {\r\n --_mono-dropdown-table-ring-color-preset: var(--_mono-dropdown-table-success);\r\n}\r\n:is([mono-dropdown-table],.mono-dropdown-table):is([mono-color=\"danger\"],:where(.mono-dropdown-table.danger)) {\r\n --_mono-dropdown-table-ring-color-preset: var(--_mono-dropdown-table-danger);\r\n}\r\n:is([mono-dropdown-table],.mono-dropdown-table):is([mono-color=\"warning\"],:where(.mono-dropdown-table.warning)) {\r\n --_mono-dropdown-table-ring-color-preset: var(--_mono-dropdown-table-warning);\r\n}\r\n:is([mono-dropdown-table],.mono-dropdown-table):is([mono-color=\"info\"],:where(.mono-dropdown-table.info)) {\r\n --_mono-dropdown-table-ring-color-preset: var(--_mono-dropdown-table-info);\r\n}\r\n:is([mono-dropdown-table],.mono-dropdown-table):is([mono-color=\"teal\"],:where(.mono-dropdown-table.teal)) {\r\n --_mono-dropdown-table-ring-color-preset: var(--_mono-dropdown-table-teal);\r\n}\r\n:is([mono-dropdown-table],.mono-dropdown-table):is([mono-color=\"purple\"],:where(.mono-dropdown-table.purple)) {\r\n --_mono-dropdown-table-ring-color-preset: var(--_mono-dropdown-table-purple);\r\n}\r\n:is([mono-dropdown-table],.mono-dropdown-table):is([mono-color=\"neutral\"],:where(.mono-dropdown-table.neutral)) {\r\n --_mono-dropdown-table-ring-color-preset: var(--_mono-dropdown-table-neutral);\r\n}\r\n:is([mono-dropdown-table],.mono-dropdown-table):is([mono-color=\"dark\"],:where(.mono-dropdown-table.dark)) {\r\n --_mono-dropdown-table-ring-color-preset: var(--_mono-dropdown-table-dark);\r\n}\r\n\r\n/* =========================================\r\n Label\r\n ========================================= */\r\n\r\n/* basecoat@1.0.2 styles/vega.css .field > label, .label — flex items-center\r\n gap-2 text-sm leading-none font-medium select-none w-fit */\r\n:is([mono-dropdown-table],.mono-dropdown-table) > :is([mono-dd-label],.mono-dropdown-table-label) {\r\n display: flex;\r\n align-items: center;\r\n width: fit-content;\r\n margin: 0 0 var(--_mono-dropdown-table-gap-y);\r\n gap: var(--mono-dropdown-table-label-gap, var(--mono-tag-input-label-gap, calc(var(--mono-spacing) * 2)));\r\n font-size: var(--mono-dropdown-table-label-font-size, var(--mono-tag-input-label-font-size, var(--mono-text-sm)));\r\n line-height: var(--mono-dropdown-table-label-line-height, var(--mono-tag-input-label-line-height, 1));\r\n font-weight: var(--mono-dropdown-table-label-font-weight, var(--mono-tag-input-label-font-weight, var(--mono-label-font-weight, var(--mono-font-weight-medium))));\r\n text-transform: var(--mono-dropdown-table-label-text-transform, var(--mono-tag-input-label-text-transform, none));\r\n letter-spacing: var(--mono-dropdown-table-label-letter-spacing, var(--mono-tag-input-label-letter-spacing, normal));\r\n color: var(--_mono-dropdown-table-text);\r\n user-select: none;\r\n}\r\n\r\n:is([mono-dropdown-table],.mono-dropdown-table):is([mono-disabled],.disabled) > :is([mono-dd-label],.mono-dropdown-table-label) {\r\n opacity: 0.5;\r\n pointer-events: none;\r\n}\r\n\r\n/* basecoat@1.0.2 styles/vega.css .field — data-invalid:text-destructive */\r\n:is([mono-dropdown-table],.mono-dropdown-table):is([mono-validation-state=\"invalid\"],:where(.mono-dropdown-table.is-invalid)) > :is([mono-dd-label],.mono-dropdown-table-label) {\r\n color: var(--_mono-dropdown-table-invalid);\r\n}\r\n\r\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-required-mark],.mono-dropdown-table-required) {\r\n color: var(--_mono-dropdown-table-danger);\r\n}\r\n\r\n/* =========================================\r\n The field — the chip box (role=\"combobox\"; the search box lives in the panel)\r\n ========================================= */\r\n\r\n:is([mono-dropdown-table],.mono-dropdown-table) > :is([mono-dd-control],.mono-dropdown-table-control) {\r\n position: relative;\r\n}\r\n\r\n/* The control is a grid/flex item in a host layout; once the value stops\r\n wrapping (inline strip) its automatic minimum is the full strip — pin it. */\r\n:is([mono-dropdown-table],.mono-dropdown-table) > :is([mono-dd-control],.mono-dropdown-table-control):is([mono-inline],.is-inline) {\r\n min-width: 0;\r\n}\r\n\r\n/* basecoat@1.0.2 components/combobox.css .combobox-chips — flex w-full min-w-0\r\n flex-wrap items-center */\r\n/* basecoat@1.0.2 styles/vega.css .combobox-chips — min-h-9 gap-1.5 rounded-md\r\n border border-input bg-transparent bg-clip-padding px-1.5 py-1.5 text-sm\r\n shadow-xs transition-[color,box-shadow] focus-within:border-ring\r\n focus-within:ring-3 focus-within:ring-ring/50 has-[[aria-invalid=true]]:…;\r\n mono: one row — the value area wraps INSIDE it and the actions stay centred */\r\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-trigger],.mono-dropdown-table-trigger) {\r\n --_mono-dropdown-table-bc: var(--_mono-dropdown-table-border-color);\r\n --_mono-dropdown-table-side-bc: var(--mono-dropdown-table-side-border-color, var(--mono-tag-input-side-border-color, var(--_mono-dropdown-table-side-border-color-preset, var(--_mono-dropdown-table-bc))));\r\n --_mono-dropdown-table-ring: 0 0 #0000;\r\n\r\n position: relative;\r\n display: flex;\r\n align-items: center;\r\n gap: var(--_mono-dropdown-table-gap);\r\n width: 100%;\r\n min-width: 0;\r\n min-height: var(--_mono-dropdown-table-height);\r\n padding-block: var(--_mono-dropdown-table-padding-y);\r\n padding-inline: var(--_mono-dropdown-table-padding-x);\r\n outline-style: none;\r\n border: var(--mono-border-width) solid var(--_mono-dropdown-table-bc);\r\n border-top-color: var(--_mono-dropdown-table-side-bc);\r\n border-inline-color: var(--_mono-dropdown-table-side-bc);\r\n border-radius: var(--_mono-dropdown-table-radius);\r\n background: var(--_mono-dropdown-table-bg);\r\n background-clip: padding-box;\r\n color: var(--_mono-dropdown-table-text);\r\n box-shadow: var(--_mono-dropdown-table-ring), var(--_mono-dropdown-table-shadow);\r\n font-family: inherit;\r\n font-size: var(--_mono-dropdown-table-font-size);\r\n line-height: var(--_mono-dropdown-table-line-height);\r\n cursor: pointer;\r\n transition-property: color, box-shadow, border-color, background-color;\r\n transition-timing-function: var(--mono-ease);\r\n transition-duration: var(--mono-duration);\r\n}\r\n\r\n/* focus-within:border-ring focus-within:ring-3 focus-within:ring-ring/50 — and\r\n the OPEN state, which keeps the ring while the keyboard is in the panel */\r\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-trigger],.mono-dropdown-table-trigger):focus-visible,\r\n:is([mono-dropdown-table],.mono-dropdown-table):is([mono-open],.open) :is([mono-dd-trigger],.mono-dropdown-table-trigger) {\r\n --_mono-dropdown-table-bc: var(--_mono-dropdown-table-ring-color);\r\n --_mono-dropdown-table-ring: 0 0 0 var(--_mono-dropdown-table-ring-width) color-mix(in oklab, var(--_mono-dropdown-table-ring-color) var(--_mono-dropdown-table-ring-alpha), transparent);\r\n}\r\n\r\n/* basecoat@1.0.2 styles/vega.css .combobox-chips — has-[[aria-invalid=true]]:border-destructive\r\n has-[[aria-invalid=true]]:ring-3 has-[[aria-invalid=true]]:ring-destructive/20 */\r\n:is([mono-dropdown-table],.mono-dropdown-table):is([mono-validation-state=\"invalid\"],:where(.mono-dropdown-table.is-invalid)) :is([mono-dd-trigger],.mono-dropdown-table-trigger) {\r\n --_mono-dropdown-table-bc: var(--mono-mode-invalid-border);\r\n --_mono-dropdown-table-ring: 0 0 0 var(--_mono-dropdown-table-ring-width) var(--mono-mode-invalid-ring);\r\n}\r\n\r\n/* EXTENSION — valid / warning are the invalid pattern in the role's colour */\r\n:is([mono-dropdown-table],.mono-dropdown-table):is([mono-validation-state=\"valid\"],:where(.mono-dropdown-table.is-valid)) :is([mono-dd-trigger],.mono-dropdown-table-trigger) {\r\n --_mono-dropdown-table-bc: color-mix(in oklab, var(--_mono-dropdown-table-valid) var(--mono-mode-state-border-alpha), transparent);\r\n --_mono-dropdown-table-ring: 0 0 0 var(--_mono-dropdown-table-ring-width) color-mix(in oklab, var(--_mono-dropdown-table-valid) var(--mono-mode-state-ring-alpha), transparent);\r\n}\r\n:is([mono-dropdown-table],.mono-dropdown-table):is([mono-validation-state=\"warning\"],:where(.mono-dropdown-table.is-warning)) :is([mono-dd-trigger],.mono-dropdown-table-trigger) {\r\n --_mono-dropdown-table-bc: color-mix(in oklab, var(--_mono-dropdown-table-warning) var(--mono-mode-state-border-alpha), transparent);\r\n --_mono-dropdown-table-ring: 0 0 0 var(--_mono-dropdown-table-ring-width) color-mix(in oklab, var(--_mono-dropdown-table-warning) var(--mono-mode-state-ring-alpha), transparent);\r\n}\r\n\r\n/* EXTENSION — readonly: a muted surface */\r\n:is([mono-dropdown-table],.mono-dropdown-table):is([mono-readonly],.readonly) :is([mono-dd-trigger],.mono-dropdown-table-trigger) {\r\n background: var(--mono-dropdown-table-readonly-bg, var(--mono-tag-input-readonly-bg, var(--muted)));\r\n cursor: default;\r\n}\r\n\r\n/* .combobox-chips > input:disabled — opacity-50 (on the box, so the chips fade\r\n with it). The strip's ‹ › pager opts back in so the chips can still be read. */\r\n:is([mono-dropdown-table],.mono-dropdown-table):is([mono-disabled],.disabled) :is([mono-dd-trigger],.mono-dropdown-table-trigger) {\r\n opacity: 0.5;\r\n pointer-events: none;\r\n cursor: not-allowed;\r\n background: var(--mono-dropdown-table-disabled-bg, var(--mono-tag-input-disabled-bg, var(--_mono-dropdown-table-bg)));\r\n}\r\n\r\n:is([mono-dropdown-table],.mono-dropdown-table):is([mono-disabled],.disabled) :is([mono-dd-scroll],.mono-dropdown-table-scroll):not(:is([mono-idle],.is-idle)) {\r\n pointer-events: auto;\r\n cursor: pointer;\r\n}\r\n\r\n/* ── the value area: chips (multi) or one line of text ────────────────── */\r\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-value],.mono-dropdown-table-value) {\r\n flex: 1 1 auto;\r\n display: flex;\r\n flex-wrap: wrap;\r\n align-items: center;\r\n gap: var(--_mono-dropdown-table-gap);\r\n min-width: 0;\r\n /* the chip row is the box's height; an empty value never exceeds it */\r\n min-height: var(--_mono-dropdown-table-chip-height);\r\n overflow: hidden;\r\n color: var(--_mono-dropdown-table-text);\r\n}\r\n\r\n/* EXTENSION — a text value (single select, or the placeholder) sits where a\r\n `.select` puts its text (px-3), not where a chip does (px-1.5): the inset is\r\n what keeps this field's text in line with a `<mono-select>` beside it. */\r\n:is([mono-dropdown-table],.mono-dropdown-table):not([mono-multiple][mono-has-value]) :is([mono-dd-value],.mono-dropdown-table-value) {\r\n padding-inline-start: var(--mono-dropdown-table-text-inset, calc(var(--mono-spacing) * 1.5));\r\n}\r\n\r\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-value],.mono-dropdown-table-value):is([mono-dd-placeholder],.mono-dropdown-table-placeholder) {\r\n color: var(--_mono-dropdown-table-placeholder);\r\n white-space: nowrap;\r\n}\r\n\r\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-value],.mono-dropdown-table-value) > span {\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n white-space: nowrap;\r\n}\r\n\r\n/* =========================================\r\n Chips\r\n ========================================= */\r\n\r\n/* basecoat@1.0.2 components/combobox.css .combobox-chip — inline-flex w-fit\r\n shrink-0 items-center whitespace-nowrap */\r\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-chip],.mono-dropdown-table-chip) {\r\n display: inline-flex;\r\n width: fit-content;\r\n max-width: 100%;\r\n flex-shrink: 0;\r\n align-items: center;\r\n white-space: nowrap;\r\n vertical-align: middle;\r\n line-height: 1;\r\n}\r\n\r\n/* basecoat@1.0.2 styles/vega.css .combobox-chip — h-5.5 gap-1 rounded-sm bg-muted\r\n px-1.5 text-xs font-medium text-foreground, has-[>.combobox-chip-remove]:pe-0 */\r\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-chip],.mono-dropdown-table-chip) > [mono-dd-chip-main] {\r\n display: inline-flex;\r\n align-items: center;\r\n height: var(--_mono-dropdown-table-chip-height);\r\n max-width: 100%;\r\n gap: var(--mono-dropdown-table-chip-content-gap, var(--mono-tag-input-chip-content-gap, var(--mono-spacing)));\r\n margin: 0;\r\n padding-inline: var(--mono-dropdown-table-chip-padding-x, var(--mono-tag-input-chip-padding-x, calc(var(--mono-spacing) * 1.5)));\r\n border: 0;\r\n border-radius: var(--mono-dropdown-table-chip-radius, var(--mono-tag-input-chip-radius, var(--mono-radius-sm)));\r\n background: var(--mono-dropdown-table-chip-bg, var(--mono-tag-input-chip-bg, var(--muted)));\r\n color: var(--mono-dropdown-table-chip-color, var(--mono-tag-input-chip-color, var(--_mono-dropdown-table-text)));\r\n font-family: inherit;\r\n font-size: var(--_mono-dropdown-table-chip-font-size);\r\n line-height: var(--_mono-dropdown-table-chip-line-height);\r\n font-weight: var(--mono-dropdown-table-chip-font-weight, var(--mono-tag-input-chip-font-weight, var(--mono-font-weight-medium)));\r\n text-decoration: none;\r\n cursor: default;\r\n}\r\n\r\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-chip],.mono-dropdown-table-chip)[mono-dd-removable] > [mono-dd-chip-main] {\r\n padding-inline-end: 0;\r\n}\r\n\r\n/* EXTENSION — `chip.rounded`: the chip's own corner scale over the combobox\r\n chip's rounded-sm (the same words `<mono-chip rounded>` takes) */\r\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-chip],.mono-dropdown-table-chip)[mono-dd-chip-rounded=\"none\"] > [mono-dd-chip-main] { border-radius: 0; }\r\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-chip],.mono-dropdown-table-chip)[mono-dd-chip-rounded=\"xs\"] > [mono-dd-chip-main] { border-radius: var(--mono-radius-xs); }\r\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-chip],.mono-dropdown-table-chip)[mono-dd-chip-rounded=\"sm\"] > [mono-dd-chip-main] { border-radius: var(--mono-radius-sm); }\r\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-chip],.mono-dropdown-table-chip)[mono-dd-chip-rounded=\"md\"] > [mono-dd-chip-main] { border-radius: var(--mono-radius-md); }\r\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-chip],.mono-dropdown-table-chip)[mono-dd-chip-rounded=\"lg\"] > [mono-dd-chip-main] { border-radius: var(--mono-radius-lg); }\r\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-chip],.mono-dropdown-table-chip)[mono-dd-chip-rounded=\"xl\"] > [mono-dd-chip-main] { border-radius: var(--mono-radius-xl); }\r\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-chip],.mono-dropdown-table-chip)[mono-dd-chip-rounded=\"xxl\"] > [mono-dd-chip-main] { border-radius: var(--mono-radius-2xl); }\r\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-chip],.mono-dropdown-table-chip)[mono-dd-chip-rounded=\"full\"] > [mono-dd-chip-main] { border-radius: var(--mono-radius-full); }\r\n\r\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-chip],.mono-dropdown-table-chip) [mono-dd-chip-content] {\r\n display: inline-flex;\r\n align-items: center;\r\n gap: inherit;\r\n min-width: 0;\r\n max-width: 100%;\r\n height: 100%;\r\n}\r\n\r\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-chip],.mono-dropdown-table-chip) [mono-dd-chip-label] {\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n white-space: nowrap;\r\n}\r\n\r\n/* EXTENSION — `chip.dot`: a coloured dot before the label (the badge's dot idiom) */\r\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-chip],.mono-dropdown-table-chip) [mono-dd-chip-dot] {\r\n flex: 0 0 auto;\r\n width: calc(var(--mono-spacing) * 1.5);\r\n height: calc(var(--mono-spacing) * 1.5);\r\n border-radius: var(--mono-radius-full);\r\n background: currentColor;\r\n}\r\n\r\n/* EXTENSION — `chip.color` pins a hue: the tonal pattern (bg-x/10 text-x, dark 20).\r\n Without one the chips follow the field's `color` — the ring colour — the way\r\n they always did here. */\r\n:is([mono-dropdown-table],.mono-dropdown-table):not(:is(:not([mono-color]), :is([mono-color=\"primary\"],:where(.mono-dropdown-table.primary)))) :is([mono-dd-chip],.mono-dropdown-table-chip):not([mono-dd-chip-color]) > [mono-dd-chip-main] {\r\n background: color-mix(in oklab, var(--_mono-dropdown-table-ring-color) var(--mono-mode-tint), transparent);\r\n color: var(--_mono-dropdown-table-ring-color);\r\n}\r\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-chip],.mono-dropdown-table-chip)[mono-dd-chip-color=\"primary\"] > [mono-dd-chip-main] { background: color-mix(in oklab, var(--primary) var(--mono-mode-tint), transparent); color: var(--primary); }\r\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-chip],.mono-dropdown-table-chip)[mono-dd-chip-color=\"secondary\"] > [mono-dd-chip-main] { background: var(--secondary); color: var(--secondary-foreground); }\r\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-chip],.mono-dropdown-table-chip)[mono-dd-chip-color=\"success\"] > [mono-dd-chip-main] { background: color-mix(in oklab, var(--success) var(--mono-mode-tint), transparent); color: var(--success); }\r\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-chip],.mono-dropdown-table-chip)[mono-dd-chip-color=\"danger\"] > [mono-dd-chip-main] { background: color-mix(in oklab, var(--destructive) var(--mono-mode-tint), transparent); color: var(--destructive); }\r\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-chip],.mono-dropdown-table-chip)[mono-dd-chip-color=\"warning\"] > [mono-dd-chip-main] { background: color-mix(in oklab, var(--warning) var(--mono-mode-tint), transparent); color: var(--warning); }\r\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-chip],.mono-dropdown-table-chip)[mono-dd-chip-color=\"info\"] > [mono-dd-chip-main] { background: color-mix(in oklab, var(--info) var(--mono-mode-tint), transparent); color: var(--info); }\r\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-chip],.mono-dropdown-table-chip)[mono-dd-chip-color=\"teal\"] > [mono-dd-chip-main] { background: color-mix(in oklab, var(--teal) var(--mono-mode-tint), transparent); color: var(--teal); }\r\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-chip],.mono-dropdown-table-chip)[mono-dd-chip-color=\"purple\"] > [mono-dd-chip-main] { background: color-mix(in oklab, var(--purple) var(--mono-mode-tint), transparent); color: var(--purple); }\r\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-chip],.mono-dropdown-table-chip)[mono-dd-chip-color=\"neutral\"] > [mono-dd-chip-main] { background: color-mix(in oklab, var(--neutral) var(--mono-mode-tint), transparent); color: var(--neutral); }\r\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-chip],.mono-dropdown-table-chip)[mono-dd-chip-color=\"dark\"] > [mono-dd-chip-main] { background: var(--dark); color: var(--dark-foreground); }\r\n\r\n/* basecoat@1.0.2 components/combobox.css .combobox-chip-remove — inline-flex\r\n shrink-0 items-center justify-center */\r\n/* basecoat@1.0.2 styles/vega.css .combobox-chip-remove — -ms-1 opacity-50\r\n hover:opacity-100, svg size-3.5 */\r\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-chip],.mono-dropdown-table-chip) [mono-dd-chip-close] {\r\n display: inline-flex;\r\n flex-shrink: 0;\r\n align-items: center;\r\n justify-content: center;\r\n /* explicit: the element still carries chip.css's `.chip-close` class as a hook,\r\n which pins a 1rem box — the raw markup has no such class */\r\n width: auto;\r\n height: 100%;\r\n min-width: 0;\r\n margin: 0;\r\n transform: none;\r\n margin-inline-start: calc(var(--mono-spacing) * -1);\r\n padding: 0 var(--mono-spacing);\r\n border: 0;\r\n border-radius: inherit;\r\n background: transparent;\r\n color: inherit;\r\n font: inherit;\r\n line-height: 1;\r\n opacity: 0.5;\r\n cursor: pointer;\r\n outline-style: none;\r\n transition-property: opacity;\r\n transition-timing-function: var(--mono-ease);\r\n transition-duration: var(--mono-duration);\r\n}\r\n\r\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-chip],.mono-dropdown-table-chip) [mono-dd-chip-close]:focus-visible {\r\n opacity: 1;\r\n}\r\n\r\n@media (hover: hover) {\r\n :is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-chip],.mono-dropdown-table-chip) [mono-dd-chip-close]:hover {\r\n opacity: 1;\r\n }\r\n}\r\n\r\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-chip],.mono-dropdown-table-chip) [mono-dd-chip-close] > :is(svg, .mono-icon, :is([mono-icon],.mono-icon)) {\r\n display: block;\r\n width: calc(var(--mono-spacing) * 3.5);\r\n height: calc(var(--mono-spacing) * 3.5);\r\n pointer-events: none;\r\n}\r\n\r\n/* EXTENSION — the \"+N more\" counter chip is a control */\r\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-chip],.mono-dropdown-table-chip):is([mono-dd-more],.mono-dropdown-table-more) > [mono-dd-chip-main] {\r\n cursor: pointer;\r\n outline-style: none;\r\n}\r\n\r\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-chip],.mono-dropdown-table-chip):is([mono-dd-more],.mono-dropdown-table-more) > [mono-dd-chip-main]:focus-visible {\r\n box-shadow: 0 0 0 var(--_mono-dropdown-table-ring-width) color-mix(in oklab, var(--_mono-dropdown-table-ring-color) var(--_mono-dropdown-table-ring-alpha), transparent);\r\n}\r\n\r\n@media (hover: hover) {\r\n :is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-chip],.mono-dropdown-table-chip):is([mono-dd-more],.mono-dropdown-table-more) > [mono-dd-chip-main]:hover {\r\n background: var(--mono-mode-surface-hover);\r\n }\r\n}\r\n\r\n/* ── the inline chip strip (`chip.behaviour: 'inline'`) ──────────────────\r\n One line that never grows: the value stops wrapping, the chips live in their\r\n own strip, and the strip absorbs the overflow instead of the field.\r\n\r\n `overflow-x: hidden` — NOT `auto` — is the whole scroll contract. Hidden still\r\n honours a programmatic `scrollLeft`, so `ChipStripController` can page the\r\n strip while the browser paints no scrollbar and refuses to scroll it from the\r\n wheel, a click-drag or the arrow keys. */\r\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-value],.mono-dropdown-table-value):is([mono-inline],.is-inline) {\r\n flex-wrap: nowrap;\r\n}\r\n\r\n/* Two attributes deliberately: the strip is a direct `span` child of the value\r\n area, so the `[mono-dd-value] > span` ellipsis rule above matches it too. */\r\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-value],.mono-dropdown-table-value) > :is([mono-dd-chip-strip],.mono-dropdown-table-chip-strip) {\r\n display: flex;\r\n flex-wrap: nowrap;\r\n align-items: center;\r\n gap: var(--_mono-dropdown-table-gap);\r\n flex: 0 1 auto;\r\n min-width: 0;\r\n overflow-x: hidden;\r\n overflow-y: hidden;\r\n text-overflow: clip;\r\n /* NO `scroll-behavior: smooth` — see ChipStripController (one scroll event per\r\n frame would reposition every open popup). */\r\n}\r\n\r\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-chip-strip],.mono-dropdown-table-chip-strip) > * {\r\n flex-shrink: 0;\r\n}\r\n\r\n/* =========================================\r\n Actions — ‹ › pager, clear, caret\r\n ========================================= */\r\n\r\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-actions],.mono-dropdown-table-actions) {\r\n display: flex;\r\n align-items: center;\r\n gap: var(--mono-spacing);\r\n flex: 0 0 auto;\r\n line-height: 1;\r\n /* The row's buttons are size-6 — 2px taller than a chip — and they sit IN the\r\n flex row (centred beside a wrapping value, unlike tag-input's pinned corner),\r\n so on their own they would floor the field 2px above the token. A negative\r\n block margin folds that back: the row costs exactly one chip height. */\r\n margin-block: calc((var(--_mono-dropdown-table-chip-height) - var(--_mono-dropdown-table-action)) / 2);\r\n}\r\n\r\n/* basecoat@1.0.2 components/combobox.css .combobox [data-clear] — size-6 border-0\r\n bg-transparent p-0 text-current; the caret ≡ .combobox-trigger-icon (size-4\r\n text-muted-foreground), the pager the same box. Painted as .btn[data-variant='ghost']. */\r\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-clear],.mono-dropdown-table-clear),\r\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-arrow],.mono-dropdown-table-arrow),\r\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-scroll],.mono-dropdown-table-scroll) {\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n flex: 0 0 auto;\r\n width: var(--_mono-dropdown-table-action);\r\n height: var(--_mono-dropdown-table-action);\r\n margin: 0;\r\n padding: 0;\r\n border: 0;\r\n border-radius: var(--mono-dropdown-table-clear-radius, var(--mono-tag-input-clear-radius, calc(var(--radius) - 5px)));\r\n background: transparent;\r\n color: var(--_mono-dropdown-table-muted);\r\n font: inherit;\r\n line-height: 1;\r\n cursor: pointer;\r\n outline-style: none;\r\n transition-property: color, background-color, transform;\r\n transition-timing-function: var(--mono-ease);\r\n transition-duration: var(--mono-duration);\r\n}\r\n\r\n:is([mono-dropdown-table],.mono-dropdown-table) :is(:is([mono-dd-clear],.mono-dropdown-table-clear), :is([mono-dd-arrow],.mono-dropdown-table-arrow), :is([mono-dd-scroll],.mono-dropdown-table-scroll)) > :is(svg, .mono-icon, :is([mono-icon],.mono-icon)) {\r\n display: block;\r\n width: var(--_mono-dropdown-table-icon);\r\n height: var(--_mono-dropdown-table-icon);\r\n pointer-events: none;\r\n transition-property: transform;\r\n transition-timing-function: var(--mono-ease);\r\n transition-duration: var(--mono-duration);\r\n}\r\n\r\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-clear],.mono-dropdown-table-clear) > :is(svg, .mono-icon, :is([mono-icon],.mono-icon)) {\r\n width: var(--_mono-dropdown-table-clear-glyph);\r\n height: var(--_mono-dropdown-table-clear-glyph);\r\n}\r\n\r\n/* basecoat@1.0.2 styles/vega.css .btn[data-variant='ghost'] — hover:bg-muted hover:text-foreground */\r\n@media (hover: hover) {\r\n :is([mono-dropdown-table],.mono-dropdown-table) :is(:is([mono-dd-clear],.mono-dropdown-table-clear), :is([mono-dd-arrow],.mono-dropdown-table-arrow), :is([mono-dd-scroll],.mono-dropdown-table-scroll)):hover {\r\n background: var(--mono-mode-ghost-hover);\r\n color: var(--_mono-dropdown-table-text);\r\n }\r\n}\r\n\r\n/* EXTENSION — the caret turns while the panel is open */\r\n:is([mono-dropdown-table],.mono-dropdown-table):is([mono-open],.open) :is([mono-dd-arrow],.mono-dropdown-table-arrow) > :is(svg, .mono-icon, :is([mono-icon],.mono-icon)) {\r\n transform: rotate(180deg);\r\n}\r\n\r\n/* At an end of the strip the pager keeps its box but disappears — hiding it with\r\n `display: none` would shrink the row and shove the strip sideways mid-click. */\r\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-scroll],.mono-dropdown-table-scroll):is([mono-idle],.is-idle) {\r\n visibility: hidden;\r\n pointer-events: none;\r\n}\r\n\r\n/* =========================================\r\n The \"+N more\" overflow panel — a popover holding the overflow chips\r\n ========================================= */\r\n\r\n/* basecoat@1.0.2 styles/vega.css .combobox [data-popover] — bg-popover ring-1\r\n ring-foreground/10 rounded-md shadow-md; EXTENSION: p-1.5 gap-1.5 flex-wrap.\r\n Portaled to <body> and placed `fixed` from the \"+N more\" chip by its own\r\n popup controller in the light build; in the shadow build `_positionMorePanel`\r\n runs the same math in place — the absolute rule is the pre-placement fallback. */\r\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-more],.mono-dropdown-table-more) {\r\n position: absolute;\r\n top: calc(100% + calc(var(--mono-spacing) * 1.5));\r\n left: 0;\r\n z-index: var(--mono-popup-z, 1000);\r\n display: none;\r\n flex-wrap: wrap;\r\n align-items: flex-start;\r\n gap: var(--_mono-dropdown-table-gap);\r\n max-width: 20rem;\r\n /* `--mono-popup-avail-h` = the room left on the side the panel opened on. */\r\n max-height: min(14rem, var(--mono-popup-avail-h, 100vh));\r\n overflow: auto;\r\n /* Portaled + anchored: a chained scroll would drag this panel off-screen. */\r\n overscroll-behavior: contain;\r\n padding: calc(var(--mono-spacing) * 1.5);\r\n border-radius: var(--mono-dropdown-table-dropdown-radius, var(--mono-tag-input-dropdown-radius, var(--mono-radius-md)));\r\n background: var(--mono-dropdown-table-dropdown-bg, var(--mono-tag-input-dropdown-bg, var(--popover)));\r\n color: var(--mono-dropdown-table-dropdown-color, var(--mono-tag-input-dropdown-color, var(--popover-foreground)));\r\n box-shadow: var(--mono-dropdown-table-dropdown-ring, var(--mono-tag-input-dropdown-ring, 0 0 0 1px color-mix(in oklab, var(--foreground) 10%, transparent))), var(--mono-dropdown-table-dropdown-shadow, var(--mono-tag-input-dropdown-shadow, var(--mono-shadow-md)));\r\n}\r\n\r\n:is([mono-dropdown-table],.mono-dropdown-table):is([mono-more-open],.more-open) :is([mono-dd-more],.mono-dropdown-table-more) {\r\n display: flex;\r\n}\r\n\r\n/* =========================================\r\n The panel — sized by the `dropdown` prop, NOT the field\r\n ========================================= */\r\n\r\n/* basecoat@1.0.2 components/popover.css [data-popover] — absolute z-50 overflow;\r\n mono: `display: none` while closed, `position: fixed` (the popup controller\r\n sets top/left), `--mono-popup-z` from the shared stack */\r\n/* basecoat@1.0.2 styles/vega.css .combobox [data-popover] — bg-popover\r\n text-popover-foreground ring-foreground/10 rounded-md p-0 shadow-md ring-1;\r\n EXTENSION: a flex column of three regions, the middle one scrolling */\r\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-panel],.mono-dropdown-table-panel) {\r\n display: none;\r\n position: fixed;\r\n z-index: var(--mono-popup-z, 1000);\r\n flex-direction: column;\r\n width: max-content;\r\n min-width: var(--mono-dropdown-table-dropdown-min-width, 18rem);\r\n max-width: min(90vw, 60rem);\r\n /* Two independent caps, combined so neither can clobber the other:\r\n --_mono-dropdown-table-panel-max-h the consumer's `:dropdown.prop=\"{ maxHeight }\"` (else 60vh)\r\n --mono-popup-avail-h the room actually left between the field and the\r\n viewport edge on the side the panel opened on */\r\n max-height: min(var(--_mono-dropdown-table-panel-max-h, 60vh), var(--mono-popup-avail-h, 100vh));\r\n overflow: hidden;\r\n isolation: isolate;\r\n border-radius: var(--mono-dropdown-table-dropdown-radius, var(--mono-tag-input-dropdown-radius, var(--mono-radius-md)));\r\n background: var(--mono-dropdown-table-dropdown-bg, var(--mono-tag-input-dropdown-bg, var(--popover)));\r\n color: var(--mono-dropdown-table-dropdown-color, var(--mono-tag-input-dropdown-color, var(--popover-foreground)));\r\n box-shadow: var(--mono-dropdown-table-dropdown-ring, var(--mono-tag-input-dropdown-ring, 0 0 0 1px color-mix(in oklab, var(--foreground) 10%, transparent))), var(--mono-dropdown-table-dropdown-shadow, var(--mono-tag-input-dropdown-shadow, var(--mono-shadow-md)));\r\n font-size: var(--_mono-dropdown-table-font-size);\r\n line-height: var(--_mono-dropdown-table-line-height);\r\n outline-style: none;\r\n}\r\n\r\n:is([mono-dropdown-table],.mono-dropdown-table):is([mono-open],.open) :is([mono-dd-panel],.mono-dropdown-table-panel) {\r\n display: flex;\r\n}\r\n\r\n/* The panel is a container; its own ring would just outline the whole popup. */\r\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-panel],.mono-dropdown-table-panel):focus,\r\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-panel],.mono-dropdown-table-panel):focus-visible {\r\n outline: none;\r\n}\r\n\r\n/* EXTENSION — the search box above the rows, the pager below, on hairlines */\r\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-region=\"search\"],:where(.mono-dropdown-table-region.search)) {\r\n flex: 0 0 auto;\r\n padding: var(--mono-dropdown-table-region-padding, calc(var(--mono-spacing) * 2));\r\n border-bottom: var(--mono-border-width) solid var(--border);\r\n}\r\n\r\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-region=\"body\"],:where(.mono-dropdown-table-region.body)) {\r\n flex: 1 1 auto;\r\n /* `min-height: 0` lets the body shrink below its content height inside the flex\r\n column — without it the region floors at its intrinsic size and the panel\r\n overflows its own max-height instead of scrolling the table. */\r\n min-height: 0;\r\n overflow: auto;\r\n overscroll-behavior: contain;\r\n}\r\n\r\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-region=\"foot\"],:where(.mono-dropdown-table-region.foot)) {\r\n flex: 0 0 auto;\r\n padding: var(--mono-dropdown-table-region-padding, calc(var(--mono-spacing) * 2));\r\n border-top: var(--mono-border-width) solid var(--border);\r\n}\r\n\r\n/* light: a region with nothing captured is `:empty`; shadow: regions wrap a\r\n `<slot>` (never `:empty`), so the element marks an unassigned one `mono-empty` */\r\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-region],.mono-dropdown-table-region):empty,\r\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-region],.mono-dropdown-table-region)[mono-empty] {\r\n display: none;\r\n}\r\n\r\n/* =========================================\r\n The rows — the ported table's own rows, in TWO contexts\r\n -----------------------------------------\r\n light: the captured `<table mono-table>` inside the (portaled) body region;\r\n shadow: the SLOTTED table — a light-DOM child of the host, so the host tag is\r\n the scope (these rules reach it from the page sheet, not the shadow one).\r\n\r\n A picked row is the TABLE's `mono-selected` row (the element sets it, the same\r\n attribute `<mono-table-checkbox>` sets), so the table's own wash + rail paint\r\n it and a flavour that retunes `--mono-table-selected-bg` retunes it here. The\r\n keyboard cursor is Basecoat's `.active` option — the `--muted` row, like hover.\r\n ========================================= */\r\n\r\n/* basecoat@1.0.2 styles/vega.css .table tr — hover:bg-muted/50; the table ships\r\n with hover off, the picker turns it on through the table's PUBLIC knob */\r\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-region=\"body\"],:where(.mono-dropdown-table-region.body)),\r\nmono-shadow-dropdown-table {\r\n --mono-table-hover-bg: var(--mono-dropdown-table-row-hover-bg, color-mix(in oklab, var(--muted) 50%, var(--mono-table-surface, var(--background))));\r\n}\r\n\r\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-region=\"body\"],:where(.mono-dropdown-table-region.body)) :is([mono-table],.mono-table) tbody tr[data-row-key],\r\nmono-shadow-dropdown-table :is([mono-table],.mono-table) tbody tr[data-row-key] {\r\n cursor: pointer;\r\n}\r\n\r\n/* basecoat@1.0.2 styles/vega.css .select:not(select) [role='option'].active, .select:not(select) [role='option']:focus-visible — bg-muted text-foreground\r\n Written the way table.css asks a row state to be written:\r\n the row-colour variable AND the paint, so a pinned cell follows. */\r\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-region=\"body\"],:where(.mono-dropdown-table-region.body)) :is([mono-table],.mono-table) tbody tr:is([mono-dd-active],.mono-dd-row-active),\r\nmono-shadow-dropdown-table :is([mono-table],.mono-table) tbody tr:is([mono-dd-active],.mono-dd-row-active) {\r\n --_mono-table-row-bg: var(--mono-dropdown-table-row-active-bg, var(--mono-tag-input-option-active-bg, var(--muted)));\r\n background: var(--_mono-table-row-bg);\r\n}\r\n\r\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-region=\"body\"],:where(.mono-dropdown-table-region.body)) :is([mono-table],.mono-table) tbody tr:is([mono-selected],.mono-dd-row-selected) > td,\r\nmono-shadow-dropdown-table :is([mono-table],.mono-table) tbody tr:is([mono-selected],.mono-dd-row-selected) > td {\r\n font-weight: var(--mono-font-weight-medium);\r\n}\r\n\r\n/* =========================================\r\n Message\r\n ========================================= */\r\n\r\n/* basecoat@1.0.2 styles/vega.css .fieldset legend + p, .field > p, .field section > p */\r\n:is([mono-dropdown-table],.mono-dropdown-table) > :is([mono-dd-message],.mono-dropdown-table-message) {\r\n display: block;\r\n margin-top: var(--_mono-dropdown-table-gap-y);\r\n font-size: var(--mono-dropdown-table-message-font-size, var(--mono-tag-input-message-font-size, var(--mono-text-sm)));\r\n line-height: var(--mono-dropdown-table-message-line-height, var(--mono-tag-input-message-line-height, var(--mono-leading-normal)));\r\n font-weight: var(--mono-font-weight-normal);\r\n text-align: start;\r\n color: var(--_mono-dropdown-table-muted);\r\n}\r\n\r\n/* basecoat@1.0.2 styles/vega.css .field [role=\"alert\"] — text-destructive text-sm */\r\n:is([mono-dropdown-table],.mono-dropdown-table) > :is([mono-dd-message=\"invalid\"],:where(.mono-dropdown-table-message.invalid)) {\r\n color: var(--_mono-dropdown-table-invalid);\r\n}\r\n\r\n:is([mono-dropdown-table],.mono-dropdown-table) > :is([mono-dd-message=\"valid\"],:where(.mono-dropdown-table-message.valid)) {\r\n color: var(--_mono-dropdown-table-valid);\r\n}\r\n\r\n:is([mono-dropdown-table],.mono-dropdown-table) > :is([mono-dd-message=\"warning\"],:where(.mono-dropdown-table-message.warning)) {\r\n color: var(--_mono-dropdown-table-warning);\r\n}\r\n\r\n@media (prefers-reduced-motion: reduce) {\r\n :is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-trigger],.mono-dropdown-table-trigger),\r\n :is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-clear],.mono-dropdown-table-clear),\r\n :is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-arrow],.mono-dropdown-table-arrow),\r\n :is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-scroll],.mono-dropdown-table-scroll),\r\n :is([mono-dropdown-table],.mono-dropdown-table) [mono-dd-chip-close] {\r\n transition: none;\r\n }\r\n}\r\n";
1227
+ //#endregion
1228
+ //#region src/components/dropdown-table/mono-dropdown-table.ts
1229
+ var MonoDropdownTable = class MonoDropdownTable extends MonoDropdownTableCore(LitElement) {
1230
+ constructor(..._args) {
1231
+ super(..._args);
1232
+ this._slotsCaptured = false;
1233
+ this._slotSearch = [];
1234
+ this._slotBody = [];
1235
+ this._slotFooter = [];
1236
+ }
1237
+ static {
1238
+ this.styles = [unsafeCSS(dropdown_table_default)];
1239
+ }
1240
+ createRenderRoot() {
1241
+ return this;
1242
+ }
1243
+ connectedCallback() {
1244
+ super.connectedCallback();
1245
+ this._captureSlots();
1246
+ if (this.isConnected) this.performUpdate();
1247
+ }
1248
+ updated(changed) {
1249
+ this._placeSlot("search", this._slotSearch);
1250
+ this._placeSlot("body", this._slotBody);
1251
+ this._placeSlot("footer", this._slotFooter);
1252
+ super.updated(changed);
1253
+ }
1254
+ _captureSlots() {
1255
+ if (this._slotsCaptured) return;
1256
+ this._slotsCaptured = true;
1257
+ const captured = monoHostChildNodes(this);
1258
+ const taken = /* @__PURE__ */ new Set();
1259
+ for (const node of captured) {
1260
+ if (!(node instanceof Element)) continue;
1261
+ const slotName = node.getAttribute("slot");
1262
+ if (slotName === "search") {
1263
+ node.removeAttribute("slot");
1264
+ this._slotSearch.push(node);
1265
+ } else if (slotName === "footer") {
1266
+ node.removeAttribute("slot");
1267
+ this._slotFooter.push(node);
1268
+ } else this._slotBody.push(node);
1269
+ taken.add(node);
1270
+ }
1271
+ for (const node of taken) if (node.parentNode === this) this.removeChild(node);
1272
+ guardHostTextContent(this, new Map([
1273
+ ["search", this._slotSearch],
1274
+ ["body", this._slotBody],
1275
+ ["footer", this._slotFooter]
1276
+ ]), {
1277
+ fallback: "body",
1278
+ onWrite: () => this.requestUpdate()
1279
+ });
1280
+ }
1281
+ _placeSlot(name, nodes) {
1282
+ if (!nodes.length) return;
1283
+ const sel = `[data-mono-slot="${name}"]`;
1284
+ const target = this.querySelector(sel) ?? this._popup.panelRoot?.querySelector?.(sel);
1285
+ if (!target) return;
1286
+ for (const node of nodes) placeSlotNode(target, node);
1287
+ }
1288
+ };
1289
+ MonoDropdownTable = __decorate([customElement("mono-dropdown-table")], MonoDropdownTable);
1290
+ //#endregion
1291
+ export { MonoDropdownTable, monoDataDropdown as controlMonoDataDropdown, monoDataDropdown };