poetry-ui 0.1.12 → 0.1.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 8676875c7f97a1dd931abb718a49a3da6877873b20aafec53006b68a022a04ca
4
- data.tar.gz: 40933fec5bc880f597fd5eec6b2eb2485087ce141280d5c05e3e30fc949a7863
3
+ metadata.gz: fd69e4a483a5ff3e4ab764d00853296fb1719e0ccb37d93b576412d578464dbb
4
+ data.tar.gz: 4574dd426ea32bbff47837b78ccdc4a60599f87a007252ec3850387ba1a2535a
5
5
  SHA512:
6
- metadata.gz: b1d773fc597f9d72558ffca7a6ae6f3fade21d73fe06455c6e3fa319107f7bfc741e6d4c9b758b57879fffdf43e61db0a7d88cf2c3211e10999e6486e6882360
7
- data.tar.gz: aaa0f3b9bc18469dec3de18ef48c55f05e508a519b9e1423ce580781fbbcc008d7fd7a750553c387eb06c14d92f5f1414b0900f60e83c7a5d06086f03691ef0e
6
+ metadata.gz: 93efa9fe4b2ac3e533988fd3e499d37d2f7db28c68282723de8f6326716833ac988b3f9934fe84802c2f28203a67353eaa24cecb84384e2f148bad4abb9cd4f3
7
+ data.tar.gz: 1a94d395feea2e02280c6eb3d214b51aeddf6dea6a097e926816a8769f8c9d5d2080fdc3872f1f0a559d81a390ca129f6d74aef3f161f5fc36a65c07f8245c87
data/CHANGELOG.md CHANGED
@@ -1,5 +1,15 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.1.13] - 2026-10-13
4
+
5
+ ### Added
6
+
7
+ - `poetry:add` rewrites `config/controllers_manifest.json` when a registry item installs a Stimulus controller under `app/javascript/controllers`, as `poetry:stimulus:manifest` would. A component that names its controller by Symbol now loads after the install instead of raising until the host ran the task by hand. The generator says to commit the manifest and restart a running server.
8
+
9
+ ### Fixed
10
+
11
+ - `poetry:check` no longer warns about `poetry_native_select_option` and `poetry_native_select_optgroup` inside a loop. They render plain `<option>` and `<optgroup>` tags with no id to keep stable, and the `key:` the warning asked for would only leak into the HTML as an attribute. The registry's helpers section declares both identity-free, like the table parts.
12
+
3
13
  ## [0.1.12] - 2026-10-07
4
14
 
5
15
  ### Fixed
@@ -972,9 +972,11 @@ module Poetry
972
972
  # these literals statically (the crash class: a helper-only literal
973
973
  # like align: :leading that no component contract covers, failing
974
974
  # only at render). Plain wrapper helpers need no entry here;
975
- # registry generation lists them name-only. The table parts declare
976
- # identity false: they mint no id, so the stable-identity rules have
977
- # nothing to ask of them (a keyed row derives its id).
975
+ # registry generation lists them name-only. The table parts and the
976
+ # native select's option and optgroup declare identity false: they
977
+ # mint no id, so the stable-identity rules have nothing to ask of
978
+ # them (a keyed row derives its id; key: on an option would only
979
+ # leak as an HTML attribute).
978
980
  HELPER_CONTRACTS = {
979
981
  "poetry_table_header" => { "identity" => false },
980
982
  "poetry_table_body" => { "identity" => false },
@@ -983,6 +985,8 @@ module Poetry
983
985
  "poetry_table_head" => { "identity" => false },
984
986
  "poetry_table_cell" => { "identity" => false },
985
987
  "poetry_table_caption" => { "identity" => false },
988
+ "poetry_native_select_option" => { "identity" => false },
989
+ "poetry_native_select_optgroup" => { "identity" => false },
986
990
  "poetry_toast_trigger" => {
987
991
  "options" => [
988
992
  { "name" => "template", "type" => "string",
@@ -12160,8 +12160,10 @@ helpers:
12160
12160
  poetry_kbd_group: {}
12161
12161
  poetry_message_group: {}
12162
12162
  poetry_message_scroller_item: {}
12163
- poetry_native_select_optgroup: {}
12164
- poetry_native_select_option: {}
12163
+ poetry_native_select_optgroup:
12164
+ identity: false
12165
+ poetry_native_select_option:
12166
+ identity: false
12165
12167
  poetry_navigation_menu_link: {}
12166
12168
  poetry_optimistic_form:
12167
12169
  yields: the form builder - form.optimistic_template authors the predicted turbo-stream(s);
@@ -35,6 +35,9 @@ module Poetry
35
35
  MANIFEST = "config/poetry_components.yml"
36
36
  # The host's Tailwind entry stylesheet (for @source injection).
37
37
  TAILWIND_ENTRY = "app/assets/tailwind/application.css"
38
+ # Where an item's Stimulus controllers land; a write here refreshes the
39
+ # app's controllers manifest.
40
+ CONTROLLERS_DIR = "app/javascript/controllers/"
38
41
 
39
42
  desc "Copy poetry components/blocks (plus dependencies) into the app, from the gems or any registry address"
40
43
 
@@ -116,10 +119,29 @@ module Poetry
116
119
  plan.writes.each { |write| create_file write.target, write.content, skip: true }
117
120
  plan.block_installs.each { |name| install_block(name) }
118
121
  apply_css(plan)
122
+ refresh_controllers_manifest(plan)
119
123
  report(plan)
120
124
  record_in_manifest(plan.manifest)
121
125
  end
122
126
 
127
+ # An item that brings a Stimulus controller joins the app's controllers
128
+ # manifest straight away (as `bin/rails poetry:stimulus:manifest` would),
129
+ # so the component that names it by Symbol loads, and check validates
130
+ # its wiring. The manifest is read at boot: a running server restarts.
131
+ def refresh_controllers_manifest(plan)
132
+ return if options[:pretend] || behavior == :revoke
133
+ return unless plan.writes.any? { |write| write.target.to_s.start_with?(CONTROLLERS_DIR) }
134
+
135
+ result = Poetry::Core::Stimulus::HostManifest.generate!(root: Pathname(destination_root))
136
+ count = result.definitions.size
137
+ say_status :stimulus, "wrote config/controllers_manifest.json (#{count} controller#{"s" unless count == 1}) - " \
138
+ "commit it, and restart a running server so components that name them load", :green
139
+ result.skipped.each do |skip|
140
+ say_status :stimulus,
141
+ "skipped #{skip.identifier}: #{skip.reason} (unvalidated until written by hand)", :yellow
142
+ end
143
+ end
144
+
123
145
  # The install plan for remote addresses through the registry client.
124
146
  def build_plan(remote)
125
147
  config = manifest_config
@@ -3,6 +3,6 @@
3
3
  module Poetry
4
4
  module Ui
5
5
  # The gem version.
6
- VERSION = "0.1.12"
6
+ VERSION = "0.1.13"
7
7
  end
8
8
  end
@@ -271,6 +271,10 @@ def poetry_design_report(plan, written)
271
271
  out << " contrast (merged set, AA floor):"
272
272
  plan.contrast.each { |result| out << " #{result}" }
273
273
  end
274
+ if plan.edges.any?
275
+ out << " faint edges (shipped; border and input vanish on these surfaces):"
276
+ plan.edges.each { |edge| out << " #{edge}" }
277
+ end
274
278
  if plan.dropped.any?
275
279
  out << " dropped (never guessed):"
276
280
  plan.dropped.each { |drop| out << " #{drop.name}: #{drop.reason}" }
@@ -295,6 +299,10 @@ def poetry_design_report_json(plan, written)
295
299
  { "mode" => r.mode, "pair" => r.label, "ratio" => r.ratio.round(2), "pass" => r.pass,
296
300
  "suggestion" => r.suggestion, "shipped_failing" => r.shipped }.compact
297
301
  end,
302
+ "edges" => plan.edges.map do |e|
303
+ { "mode" => e.mode, "edge" => e.edge, "surface" => e.surface, "ratio" => e.ratio.round(2),
304
+ "suggestion" => e.suggestion }.compact
305
+ end,
298
306
  "dropped" => plan.dropped.map do |d|
299
307
  { "name" => d.name, "value" => d.value, "mode" => d.mode, "reason" => d.reason }.compact
300
308
  end,
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: poetry-ui
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.12
4
+ version: 0.1.13
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matt Solt
8
8
  bindir: exe
9
9
  cert_chain: []
10
- date: 2026-10-07 00:00:00.000000000 Z
10
+ date: 2026-10-13 00:00:00.000000000 Z
11
11
  dependencies:
12
12
  - !ruby/object:Gem::Dependency
13
13
  name: poetry-core
@@ -15,14 +15,14 @@ dependencies:
15
15
  requirements:
16
16
  - - '='
17
17
  - !ruby/object:Gem::Version
18
- version: 0.1.12
18
+ version: 0.1.13
19
19
  type: :runtime
20
20
  prerelease: false
21
21
  version_requirements: !ruby/object:Gem::Requirement
22
22
  requirements:
23
23
  - - '='
24
24
  - !ruby/object:Gem::Version
25
- version: 0.1.12
25
+ version: 0.1.13
26
26
  description: 'The component library of Poetry, the AI-native frontend framework for
27
27
  Rails: accessible, themeable, agent-legible ViewComponents built entirely on poetry-core''s
28
28
  public DSL.'