poetry-core 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 (166) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +3 -0
  3. data/DESIGN.md +145 -0
  4. data/LICENSE.txt +21 -0
  5. data/README.md +30 -0
  6. data/THIRD_PARTY_NOTICES.md +507 -0
  7. data/app/components/poetry/core/box/component.rb +82 -0
  8. data/app/components/poetry/core/component.rb +390 -0
  9. data/app/components/poetry/core/concerns/agent_tools.rb +418 -0
  10. data/app/components/poetry/core/concerns/declared_attributes.rb +267 -0
  11. data/app/components/poetry/core/concerns/introspection.rb +533 -0
  12. data/app/components/poetry/core/concerns/options.rb +262 -0
  13. data/app/components/poetry/core/concerns/parts.rb +148 -0
  14. data/app/components/poetry/core/concerns/stimulus.rb +363 -0
  15. data/app/components/poetry/core/concerns/styles.rb +323 -0
  16. data/app/components/poetry/core/style.rb +150 -0
  17. data/app/components/poetry/core/wrapper/component.rb +90 -0
  18. data/app/javascript/poetry/core/accordion_controller.js +165 -0
  19. data/app/javascript/poetry/core/action_bar_controller.js +109 -0
  20. data/app/javascript/poetry/core/autocomplete_controller.js +220 -0
  21. data/app/javascript/poetry/core/calendar_controller.js +406 -0
  22. data/app/javascript/poetry/core/carousel_controller.js +167 -0
  23. data/app/javascript/poetry/core/checkbox_group_controller.js +97 -0
  24. data/app/javascript/poetry/core/checked_controller.js +208 -0
  25. data/app/javascript/poetry/core/clipboard_text_controller.js +111 -0
  26. data/app/javascript/poetry/core/combobox_controller.js +1095 -0
  27. data/app/javascript/poetry/core/command_controller.js +510 -0
  28. data/app/javascript/poetry/core/context_menu_controller.js +204 -0
  29. data/app/javascript/poetry/core/date_field_controller.js +584 -0
  30. data/app/javascript/poetry/core/date_picker_controller.js +111 -0
  31. data/app/javascript/poetry/core/deferred_controller.js +111 -0
  32. data/app/javascript/poetry/core/dialog_controller.js +206 -0
  33. data/app/javascript/poetry/core/dismissable_controller.js +182 -0
  34. data/app/javascript/poetry/core/drawer_controller.js +365 -0
  35. data/app/javascript/poetry/core/file_input_controller.js +191 -0
  36. data/app/javascript/poetry/core/focus_scope_controller.js +162 -0
  37. data/app/javascript/poetry/core/helpers/announce.js +228 -0
  38. data/app/javascript/poetry/core/helpers/breakpoint.js +28 -0
  39. data/app/javascript/poetry/core/helpers/collection.js +18 -0
  40. data/app/javascript/poetry/core/helpers/direction.js +15 -0
  41. data/app/javascript/poetry/core/helpers/escape.js +38 -0
  42. data/app/javascript/poetry/core/helpers/filter_rank.js +104 -0
  43. data/app/javascript/poetry/core/helpers/focus_guards.js +46 -0
  44. data/app/javascript/poetry/core/helpers/hotkey.js +43 -0
  45. data/app/javascript/poetry/core/helpers/id_integrity.js +65 -0
  46. data/app/javascript/poetry/core/helpers/incomplete_date.js +328 -0
  47. data/app/javascript/poetry/core/helpers/mask.js +283 -0
  48. data/app/javascript/poetry/core/helpers/portal.js +217 -0
  49. data/app/javascript/poetry/core/helpers/presence.js +210 -0
  50. data/app/javascript/poetry/core/helpers/registration_guard.js +76 -0
  51. data/app/javascript/poetry/core/helpers/scroll_lock.js +67 -0
  52. data/app/javascript/poetry/core/helpers/scroller_geometry.js +422 -0
  53. data/app/javascript/poetry/core/helpers/state.js +80 -0
  54. data/app/javascript/poetry/core/helpers/tabbable.js +56 -0
  55. data/app/javascript/poetry/core/helpers/turbo_cache.js +21 -0
  56. data/app/javascript/poetry/core/helpers/typeahead.js +85 -0
  57. data/app/javascript/poetry/core/hotkey_controller.js +55 -0
  58. data/app/javascript/poetry/core/hover_card_controller.js +431 -0
  59. data/app/javascript/poetry/core/index.js +218 -0
  60. data/app/javascript/poetry/core/mask_controller.js +500 -0
  61. data/app/javascript/poetry/core/menu_controller.js +1050 -0
  62. data/app/javascript/poetry/core/menubar_controller.js +329 -0
  63. data/app/javascript/poetry/core/message_scroller_controller.js +930 -0
  64. data/app/javascript/poetry/core/navigation_menu_controller.js +458 -0
  65. data/app/javascript/poetry/core/number_field_controller.js +404 -0
  66. data/app/javascript/poetry/core/optimistic_form_controller.js +56 -0
  67. data/app/javascript/poetry/core/otp_controller.js +219 -0
  68. data/app/javascript/poetry/core/popover_controller.js +300 -0
  69. data/app/javascript/poetry/core/popper_controller.js +439 -0
  70. data/app/javascript/poetry/core/pressed_controller.js +74 -0
  71. data/app/javascript/poetry/core/questionnaire_controller.js +468 -0
  72. data/app/javascript/poetry/core/radio_group_controller.js +197 -0
  73. data/app/javascript/poetry/core/resizable_controller.js +202 -0
  74. data/app/javascript/poetry/core/roving_focus_controller.js +215 -0
  75. data/app/javascript/poetry/core/scroll_spy_controller.js +84 -0
  76. data/app/javascript/poetry/core/search_field_controller.js +95 -0
  77. data/app/javascript/poetry/core/select_controller.js +924 -0
  78. data/app/javascript/poetry/core/sensitive_input_controller.js +195 -0
  79. data/app/javascript/poetry/core/sheet_controller.js +24 -0
  80. data/app/javascript/poetry/core/sidebar_controller.js +272 -0
  81. data/app/javascript/poetry/core/slider_controller.js +419 -0
  82. data/app/javascript/poetry/core/state_controller.js +82 -0
  83. data/app/javascript/poetry/core/table_selection_controller.js +153 -0
  84. data/app/javascript/poetry/core/tabs_controller.js +151 -0
  85. data/app/javascript/poetry/core/tag_group_controller.js +134 -0
  86. data/app/javascript/poetry/core/toast_controller.js +228 -0
  87. data/app/javascript/poetry/core/toast_trigger_controller.js +26 -0
  88. data/app/javascript/poetry/core/toaster_controller.js +197 -0
  89. data/app/javascript/poetry/core/toggle_group_controller.js +206 -0
  90. data/app/javascript/poetry/core/tooltip_controller.js +541 -0
  91. data/app/javascript/poetry/core/tree_controller.js +265 -0
  92. data/app/javascript/poetry/core/vendor/floating_ui_core.js +1043 -0
  93. data/app/javascript/poetry/core/vendor/floating_ui_dom.js +794 -0
  94. data/app/javascript/poetry/core/vendor/floating_ui_utils.js +141 -0
  95. data/app/javascript/poetry/core/vendor/floating_ui_utils_dom.js +170 -0
  96. data/app/views/poetry/core/preview.html.erb +13 -0
  97. data/config/component_registry.yml +20 -0
  98. data/config/controllers_manifest.json +1528 -0
  99. data/config/importmap.rb +11 -0
  100. data/config/state_vocabulary.json +31 -0
  101. data/lib/active_model/type/list.rb +33 -0
  102. data/lib/active_model/type/symbol.rb +36 -0
  103. data/lib/poetry/core/check/stable_identity.rb +104 -0
  104. data/lib/poetry/core/check.rb +1445 -0
  105. data/lib/poetry/core/config.rb +286 -0
  106. data/lib/poetry/core/contrib/wrapped_helper.rb +68 -0
  107. data/lib/poetry/core/css/bem_merger.rb +45 -0
  108. data/lib/poetry/core/css/bem_reference.rb +87 -0
  109. data/lib/poetry/core/css/override_scan.rb +110 -0
  110. data/lib/poetry/core/css/resolver.rb +161 -0
  111. data/lib/poetry/core/css/safelist.rb +41 -0
  112. data/lib/poetry/core/css/tailwind_merger.rb +102 -0
  113. data/lib/poetry/core/css/template_classes.rb +102 -0
  114. data/lib/poetry/core/css/theme_coverage.rb +72 -0
  115. data/lib/poetry/core/css/var_coverage.rb +75 -0
  116. data/lib/poetry/core/css/verifier.rb +106 -0
  117. data/lib/poetry/core/design_lint.rb +720 -0
  118. data/lib/poetry/core/design_md/import.rb +250 -0
  119. data/lib/poetry/core/design_md.rb +461 -0
  120. data/lib/poetry/core/engine.rb +71 -0
  121. data/lib/poetry/core/errors.rb +53 -0
  122. data/lib/poetry/core/html/attributes.rb +667 -0
  123. data/lib/poetry/core/icons.rb +157 -0
  124. data/lib/poetry/core/llms_text.rb +354 -0
  125. data/lib/poetry/core/page_architectures.rb +304 -0
  126. data/lib/poetry/core/part_contract.rb +285 -0
  127. data/lib/poetry/core/preview/abstract.rb +121 -0
  128. data/lib/poetry/core/preview/base.rb +227 -0
  129. data/lib/poetry/core/preview/sidecarable.rb +136 -0
  130. data/lib/poetry/core/preview/template.rb +186 -0
  131. data/lib/poetry/core/recipe_items.rb +82 -0
  132. data/lib/poetry/core/registry.rb +363 -0
  133. data/lib/poetry/core/registry_address.rb +115 -0
  134. data/lib/poetry/core/registry_client.rb +217 -0
  135. data/lib/poetry/core/registry_installer.rb +234 -0
  136. data/lib/poetry/core/registry_items.rb +184 -0
  137. data/lib/poetry/core/skill_text.rb +288 -0
  138. data/lib/poetry/core/stable_id.rb +110 -0
  139. data/lib/poetry/core/stimulus/builder.rb +395 -0
  140. data/lib/poetry/core/stimulus/declarations.rb +444 -0
  141. data/lib/poetry/core/stimulus/manifest.rb +68 -0
  142. data/lib/poetry/core/stimulus/merger.rb +131 -0
  143. data/lib/poetry/core/stimulus_contract.rb +263 -0
  144. data/lib/poetry/core/tag_helper.rb +10 -0
  145. data/lib/poetry/core/template_compile.rb +74 -0
  146. data/lib/poetry/core/token_import.rb +317 -0
  147. data/lib/poetry/core/tokens/color.rb +215 -0
  148. data/lib/poetry/core/tokens/contrast_gate.rb +120 -0
  149. data/lib/poetry/core/tokens/generator.rb +211 -0
  150. data/lib/poetry/core/tokens.rb +117 -0
  151. data/lib/poetry/core/version.rb +9 -0
  152. data/lib/poetry/core.rb +52 -0
  153. data/lib/poetry-core.rb +5 -0
  154. data/tokens/aliases.css +145 -0
  155. data/tokens/tailwind-theme.css +47 -0
  156. data/tokens/tokens.css +78 -0
  157. data/tokens/tokens.dtcg.json +779 -0
  158. data/vendor/floating-ui/LICENSE +20 -0
  159. data/vendor/floating-ui/VENDORED_VERSIONS +15 -0
  160. data/vendor/shadcn-tailwind/LICENSE +21 -0
  161. data/vendor/shadcn-tailwind/VENDORED_COMMIT +1 -0
  162. data/vendor/shadcn-tailwind/tailwind.css +629 -0
  163. data/vendor/tw-animate-css/LICENSE +21 -0
  164. data/vendor/tw-animate-css/VENDORED_VERSION +1 -0
  165. data/vendor/tw-animate-css/tw-animate.css +1 -0
  166. metadata +267 -0
@@ -0,0 +1,218 @@
1
+ // @poetry/controllers - poetry's Stimulus controllers + DOM helpers, one
2
+ // source shipped over two channels: importmap-first (the engine
3
+ // pins this tree; zero build) and this same tree as the npm package for
4
+ // esbuild / Vite / jsbundling hosts. Never requires a bundler.
5
+
6
+ import { registerBridgeEvents } from "@poetry/controllers/helpers/portal"
7
+ import { guardPoetryRegistration } from "@poetry/controllers/helpers/registration_guard"
8
+ import StateController from "@poetry/controllers/state_controller"
9
+ import DialogController from "@poetry/controllers/dialog_controller"
10
+ import MessageScrollerController from "@poetry/controllers/message_scroller_controller"
11
+ import AccordionController from "@poetry/controllers/accordion_controller"
12
+ import AutocompleteController from "@poetry/controllers/autocomplete_controller"
13
+ import SearchFieldController from "@poetry/controllers/search_field_controller"
14
+ import ClipboardTextController from "@poetry/controllers/clipboard_text_controller"
15
+ import SensitiveInputController from "@poetry/controllers/sensitive_input_controller"
16
+ import RovingFocusController from "@poetry/controllers/roving_focus_controller"
17
+ import FocusScopeController from "@poetry/controllers/focus_scope_controller"
18
+ import DismissableController from "@poetry/controllers/dismissable_controller"
19
+ import PopperController from "@poetry/controllers/popper_controller"
20
+ import MenuController from "@poetry/controllers/menu_controller"
21
+ import ContextMenuController from "@poetry/controllers/context_menu_controller"
22
+ import DateFieldController from "@poetry/controllers/date_field_controller"
23
+ import FileInputController from "@poetry/controllers/file_input_controller"
24
+ import MaskController from "@poetry/controllers/mask_controller"
25
+ import MenubarController from "@poetry/controllers/menubar_controller"
26
+ import PopoverController from "@poetry/controllers/popover_controller"
27
+ import TreeController from "@poetry/controllers/tree_controller"
28
+ import TooltipController from "@poetry/controllers/tooltip_controller"
29
+ import HoverCardController from "@poetry/controllers/hover_card_controller"
30
+ import ToastController from "@poetry/controllers/toast_controller"
31
+ import ToastTriggerController from "@poetry/controllers/toast_trigger_controller"
32
+ import ToasterController from "@poetry/controllers/toaster_controller"
33
+ import CheckedController from "@poetry/controllers/checked_controller"
34
+ import CheckboxGroupController from "@poetry/controllers/checkbox_group_controller"
35
+ import PressedController from "@poetry/controllers/pressed_controller"
36
+ import ToggleGroupController from "@poetry/controllers/toggle_group_controller"
37
+ import QuestionnaireController from "@poetry/controllers/questionnaire_controller"
38
+ import RadioGroupController from "@poetry/controllers/radio_group_controller"
39
+ import SliderController from "@poetry/controllers/slider_controller"
40
+ import OtpController from "@poetry/controllers/otp_controller"
41
+ import SelectController from "@poetry/controllers/select_controller"
42
+ import CommandController from "@poetry/controllers/command_controller"
43
+ import ComboboxController from "@poetry/controllers/combobox_controller"
44
+ import TagGroupController from "@poetry/controllers/tag_group_controller"
45
+ import TableSelectionController from "@poetry/controllers/table_selection_controller"
46
+ import ActionBarController from "@poetry/controllers/action_bar_controller"
47
+ import TabsController from "@poetry/controllers/tabs_controller"
48
+ import DrawerController from "@poetry/controllers/drawer_controller"
49
+ import SheetController from "@poetry/controllers/sheet_controller"
50
+ import CarouselController from "@poetry/controllers/carousel_controller"
51
+ import ResizableController from "@poetry/controllers/resizable_controller"
52
+ import NumberFieldController from "@poetry/controllers/number_field_controller"
53
+ import NavigationMenuController from "@poetry/controllers/navigation_menu_controller"
54
+ import SidebarController from "@poetry/controllers/sidebar_controller"
55
+ import CalendarController from "@poetry/controllers/calendar_controller"
56
+ import DatePickerController from "@poetry/controllers/date_picker_controller"
57
+ import DeferredController from "@poetry/controllers/deferred_controller"
58
+ import HotkeyController from "@poetry/controllers/hotkey_controller"
59
+ import OptimisticFormController from "@poetry/controllers/optimistic_form_controller"
60
+
61
+ export { default as StateController } from "@poetry/controllers/state_controller"
62
+ export { default as DialogController } from "@poetry/controllers/dialog_controller"
63
+ export { default as MessageScrollerController } from "@poetry/controllers/message_scroller_controller"
64
+ export { default as AccordionController } from "@poetry/controllers/accordion_controller"
65
+ export { default as AutocompleteController } from "@poetry/controllers/autocomplete_controller"
66
+ export { default as SearchFieldController } from "@poetry/controllers/search_field_controller"
67
+ export { default as ClipboardTextController } from "@poetry/controllers/clipboard_text_controller"
68
+ export { default as SensitiveInputController } from "@poetry/controllers/sensitive_input_controller"
69
+ export { default as RovingFocusController } from "@poetry/controllers/roving_focus_controller"
70
+ export { default as FocusScopeController } from "@poetry/controllers/focus_scope_controller"
71
+ export { default as DismissableController } from "@poetry/controllers/dismissable_controller"
72
+ export { default as PopperController } from "@poetry/controllers/popper_controller"
73
+ export { default as MenuController } from "@poetry/controllers/menu_controller"
74
+ export { default as ContextMenuController } from "@poetry/controllers/context_menu_controller"
75
+ export { default as DateFieldController } from "@poetry/controllers/date_field_controller"
76
+ export { default as FileInputController } from "@poetry/controllers/file_input_controller"
77
+ export { default as MaskController } from "@poetry/controllers/mask_controller"
78
+ export { default as MenubarController } from "@poetry/controllers/menubar_controller"
79
+ export { default as PopoverController } from "@poetry/controllers/popover_controller"
80
+ export { default as TreeController } from "@poetry/controllers/tree_controller"
81
+ export { default as TooltipController } from "@poetry/controllers/tooltip_controller"
82
+ export { default as HoverCardController } from "@poetry/controllers/hover_card_controller"
83
+ export { default as ToastController } from "@poetry/controllers/toast_controller"
84
+ export { default as ToastTriggerController } from "@poetry/controllers/toast_trigger_controller"
85
+ export { default as ToasterController } from "@poetry/controllers/toaster_controller"
86
+ export { default as CheckedController } from "@poetry/controllers/checked_controller"
87
+ export { default as CheckboxGroupController } from "@poetry/controllers/checkbox_group_controller"
88
+ export { default as PressedController } from "@poetry/controllers/pressed_controller"
89
+ export { default as ToggleGroupController } from "@poetry/controllers/toggle_group_controller"
90
+ export { default as QuestionnaireController } from "@poetry/controllers/questionnaire_controller"
91
+ export { default as RadioGroupController } from "@poetry/controllers/radio_group_controller"
92
+ export { default as SliderController } from "@poetry/controllers/slider_controller"
93
+ export { default as OtpController } from "@poetry/controllers/otp_controller"
94
+ export { default as SelectController } from "@poetry/controllers/select_controller"
95
+ export { default as CommandController } from "@poetry/controllers/command_controller"
96
+ export { default as ComboboxController } from "@poetry/controllers/combobox_controller"
97
+ export { default as TagGroupController } from "@poetry/controllers/tag_group_controller"
98
+ export { default as TableSelectionController } from "@poetry/controllers/table_selection_controller"
99
+ export { default as ActionBarController } from "@poetry/controllers/action_bar_controller"
100
+ export { default as TabsController } from "@poetry/controllers/tabs_controller"
101
+ export { default as DrawerController } from "@poetry/controllers/drawer_controller"
102
+ export { default as SheetController } from "@poetry/controllers/sheet_controller"
103
+ export { default as CarouselController } from "@poetry/controllers/carousel_controller"
104
+ export { default as ResizableController } from "@poetry/controllers/resizable_controller"
105
+ export { default as NumberFieldController } from "@poetry/controllers/number_field_controller"
106
+ export { default as NavigationMenuController } from "@poetry/controllers/navigation_menu_controller"
107
+ export { default as SidebarController } from "@poetry/controllers/sidebar_controller"
108
+ export { default as CalendarController } from "@poetry/controllers/calendar_controller"
109
+ export { default as DatePickerController } from "@poetry/controllers/date_picker_controller"
110
+ export { default as DeferredController } from "@poetry/controllers/deferred_controller"
111
+ export { default as HotkeyController } from "@poetry/controllers/hotkey_controller"
112
+ export { default as OptimisticFormController } from "@poetry/controllers/optimistic_form_controller"
113
+ export * from "@poetry/controllers/helpers/state"
114
+ export * from "@poetry/controllers/helpers/collection"
115
+ export * from "@poetry/controllers/helpers/direction"
116
+ export * from "@poetry/controllers/helpers/tabbable"
117
+ export * from "@poetry/controllers/helpers/escape"
118
+ export * from "@poetry/controllers/helpers/focus_guards"
119
+ export * from "@poetry/controllers/helpers/presence"
120
+ export * from "@poetry/controllers/helpers/scroller_geometry"
121
+ export * from "@poetry/controllers/helpers/announce"
122
+ export * from "@poetry/controllers/helpers/typeahead"
123
+ export * from "@poetry/controllers/helpers/filter_rank"
124
+
125
+ /**
126
+ * identifier -> controller class, for every sidecar controller poetry
127
+ * ships. The manifest (config/controllers_manifest.json) is introspected
128
+ * from these classes; {@link registerPoetryControllers} registers them
129
+ * all.
130
+ *
131
+ * @type {Object<string, typeof import("@hotwired/stimulus").Controller>}
132
+ */
133
+ export const controllers = {
134
+ "poetry--core--state": StateController,
135
+ "poetry--core--dialog": DialogController,
136
+ "poetry--core--message-scroller": MessageScrollerController,
137
+ "poetry--core--accordion": AccordionController,
138
+ "poetry--core--autocomplete": AutocompleteController,
139
+ "poetry--core--search-field": SearchFieldController,
140
+ "poetry--core--clipboard-text": ClipboardTextController,
141
+ "poetry--core--sensitive-input": SensitiveInputController,
142
+ "poetry--core--roving-focus": RovingFocusController,
143
+ "poetry--core--focus-scope": FocusScopeController,
144
+ "poetry--core--dismissable": DismissableController,
145
+ "poetry--core--popper": PopperController,
146
+ "poetry--core--menu": MenuController,
147
+ "poetry--core--context-menu": ContextMenuController,
148
+ "poetry--core--date-field": DateFieldController,
149
+ "poetry--core--file-input": FileInputController,
150
+ "poetry--core--mask": MaskController,
151
+ "poetry--core--menubar": MenubarController,
152
+ "poetry--core--popover": PopoverController,
153
+ "poetry--core--tree": TreeController,
154
+ "poetry--core--tooltip": TooltipController,
155
+ "poetry--core--hover-card": HoverCardController,
156
+ "poetry--core--toast": ToastController,
157
+ "poetry--core--toast-trigger": ToastTriggerController,
158
+ "poetry--core--toaster": ToasterController,
159
+ "poetry--core--checked": CheckedController,
160
+ "poetry--core--checkbox-group": CheckboxGroupController,
161
+ "poetry--core--pressed": PressedController,
162
+ "poetry--core--toggle-group": ToggleGroupController,
163
+ "poetry--core--questionnaire": QuestionnaireController,
164
+ "poetry--core--radio-group": RadioGroupController,
165
+ "poetry--core--slider": SliderController,
166
+ "poetry--core--otp": OtpController,
167
+ "poetry--core--select": SelectController,
168
+ "poetry--core--command": CommandController,
169
+ "poetry--core--combobox": ComboboxController,
170
+ "poetry--core--tag-group": TagGroupController,
171
+ "poetry--core--table-selection": TableSelectionController,
172
+ "poetry--core--action-bar": ActionBarController,
173
+ "poetry--core--tabs": TabsController,
174
+ "poetry--core--drawer": DrawerController,
175
+ "poetry--core--sheet": SheetController,
176
+ "poetry--core--carousel": CarouselController,
177
+ "poetry--core--resizable": ResizableController,
178
+ "poetry--core--number-field": NumberFieldController,
179
+ "poetry--core--navigation-menu": NavigationMenuController,
180
+ "poetry--core--sidebar": SidebarController,
181
+ "poetry--core--calendar": CalendarController,
182
+ "poetry--core--date-picker": DatePickerController,
183
+ "poetry--core--deferred": DeferredController,
184
+ "poetry--core--hotkey": HotkeyController,
185
+ "poetry--core--optimistic-form": OptimisticFormController
186
+ }
187
+
188
+ // The portal event bridge stays honest against the manifest surface: the
189
+ // union of every controller's declared `static events` is the bridged
190
+ // list. Registered here so portal.js never
191
+ // imports the controllers (no cycle).
192
+ registerBridgeEvents(Object.values(controllers).flatMap((controller) => controller.events ?? []))
193
+
194
+ /**
195
+ * The bundler-host one-liner: registers every poetry controller on the
196
+ * host's Stimulus application (importmap hosts get the same
197
+ * registrations via the engine's pins + this same call in their
198
+ * controllers/index.js), arms the portal event bridge, and installs the
199
+ * unregistered-controller warning.
200
+ *
201
+ * @param {import("@hotwired/stimulus").Application} application
202
+ * @returns {import("@hotwired/stimulus").Application} the application,
203
+ * for chaining
204
+ */
205
+ export function registerPoetryControllers(application) {
206
+ // Belt and braces with the module-scope registration above: any boot
207
+ // path that reaches this call gets the portal bridge list even if it
208
+ // never evaluated this module's top level (idempotent - a Set).
209
+ registerBridgeEvents(Object.values(controllers).flatMap((controller) => controller.events ?? []))
210
+
211
+ for (const [identifier, controller] of Object.entries(controllers)) {
212
+ application.register(identifier, controller)
213
+ }
214
+ // Warn (once per identifier) about poetry controllers on the page that
215
+ // nothing registered - the silent-inert failure nothing else surfaces.
216
+ guardPoetryRegistration(application)
217
+ return application
218
+ }