@zio.dev/zio-blocks 0.0.33 → 0.0.51

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 (150) hide show
  1. package/guides/compile-time-resource-safety-with-scope.md +16 -17
  2. package/guides/getting-started-with-mux.md +1507 -0
  3. package/guides/query-dsl-extending.md +161 -102
  4. package/guides/query-dsl-fluent-builder.md +217 -157
  5. package/guides/query-dsl-reified-optics.md +12 -10
  6. package/guides/query-dsl-sql.md +246 -165
  7. package/guides/telemetry-guide.md +1069 -0
  8. package/guides/zio-schema-migration.md +29 -22
  9. package/index.md +292 -50
  10. package/package.json +1 -1
  11. package/plans/config-follow-up-prs.md +188 -0
  12. package/plans/config-pr-assessment-roadmap.md +310 -0
  13. package/reference/MuxDataFlow.jsx +250 -0
  14. package/reference/async.md +651 -0
  15. package/reference/chunk.md +3533 -308
  16. package/reference/codegen/case-class.md +436 -0
  17. package/reference/codegen/emitter-config.md +383 -0
  18. package/reference/codegen/examples.md +664 -0
  19. package/reference/codegen/field.md +316 -0
  20. package/reference/codegen/index.md +317 -0
  21. package/reference/codegen/scala-emitter.md +392 -0
  22. package/reference/codegen/scala-file.md +276 -0
  23. package/reference/codegen/sealed-trait.md +408 -0
  24. package/reference/codegen/type-definition.md +340 -0
  25. package/reference/codegen/type-ref.md +201 -0
  26. package/reference/combinators.md +347 -117
  27. package/reference/config.md +158 -0
  28. package/reference/context.md +4 -4
  29. package/reference/datastar.md +346 -0
  30. package/reference/docs.md +1461 -345
  31. package/reference/endpoint/auth-type.md +146 -0
  32. package/reference/endpoint/endpoint.md +297 -0
  33. package/reference/endpoint/http-codec.md +249 -0
  34. package/reference/endpoint/index.md +825 -0
  35. package/reference/endpoint/path-codec.md +237 -0
  36. package/reference/endpoint/route-pattern.md +196 -0
  37. package/reference/endpoint/route-tree.md +111 -0
  38. package/reference/endpoint/segment-codec.md +212 -0
  39. package/reference/html.md +1120 -0
  40. package/reference/htmx/attribute-values.md +359 -0
  41. package/reference/htmx/hx-encoding.md +111 -0
  42. package/reference/htmx/hx-params.md +204 -0
  43. package/reference/htmx/hx-swap.md +276 -0
  44. package/reference/htmx/hx-sync.md +251 -0
  45. package/reference/htmx/hx-target.md +314 -0
  46. package/reference/htmx/hx-trigger.md +457 -0
  47. package/reference/htmx/hx-url-update.md +239 -0
  48. package/reference/htmx/index.md +855 -0
  49. package/reference/http-model/index.md +47 -0
  50. package/reference/http-model/model.md +1481 -0
  51. package/reference/http-model/schema.md +747 -0
  52. package/reference/maybe.md +826 -0
  53. package/reference/media-type.md +2 -2
  54. package/reference/mux.mdx +823 -0
  55. package/reference/openapi.md +1351 -0
  56. package/reference/resource-management/defer-handle.md +1 -1
  57. package/reference/resource-management/resource.md +31 -2
  58. package/reference/resource-management/scope.md +28 -12
  59. package/reference/resource-management/wire.md +3 -7
  60. package/reference/ringbuffer/MpmcDiagram.jsx +717 -0
  61. package/reference/ringbuffer/MpscDiagram.jsx +618 -0
  62. package/reference/ringbuffer/SpmcDiagram.jsx +680 -0
  63. package/reference/ringbuffer/SpscDiagram.jsx +677 -0
  64. package/reference/ringbuffer/advanced.mdx +109 -0
  65. package/reference/ringbuffer/index.mdx +145 -0
  66. package/reference/ringbuffer/mpmc.mdx +151 -0
  67. package/reference/ringbuffer/mpsc.mdx +132 -0
  68. package/reference/ringbuffer/spmc.mdx +108 -0
  69. package/reference/ringbuffer/spsc.mdx +344 -0
  70. package/reference/{allows.md → schema/allows.md} +4 -4
  71. package/reference/{binding-resolver.md → schema/binding-resolver.md} +1 -1
  72. package/reference/{binding.md → schema/binding.md} +2 -3
  73. package/reference/schema/built-in-codecs/avro.md +451 -0
  74. package/reference/schema/built-in-codecs/bson.md +480 -0
  75. package/reference/schema/built-in-codecs/csv.md +564 -0
  76. package/reference/schema/built-in-codecs/index.md +77 -0
  77. package/reference/schema/built-in-codecs/json/index.md +295 -0
  78. package/reference/schema/built-in-codecs/json/json-config.md +217 -0
  79. package/reference/{json-patch.md → schema/built-in-codecs/json/json-patch.md} +5 -5
  80. package/reference/{json-schema.md → schema/built-in-codecs/json/json-schema.md} +14 -47
  81. package/reference/schema/built-in-codecs/json/json-selection.md +322 -0
  82. package/reference/{json.md → schema/built-in-codecs/json/json.md} +32 -64
  83. package/reference/schema/built-in-codecs/messagepack.md +508 -0
  84. package/reference/schema/built-in-codecs/thrift.md +433 -0
  85. package/reference/schema/built-in-codecs/toon.md +1078 -0
  86. package/reference/{xml.md → schema/built-in-codecs/xml.md} +13 -9
  87. package/reference/schema/built-in-codecs/yaml.md +552 -0
  88. package/reference/{codec.md → schema/codec.md} +10 -10
  89. package/reference/{dynamic-optic.md → schema/dynamic-optic.md} +151 -5
  90. package/reference/{dynamic-schema.md → schema/dynamic-schema.md} +8 -8
  91. package/reference/schema/format.md +92 -0
  92. package/reference/schema/index.md +50 -0
  93. package/reference/schema/migration.md +297 -0
  94. package/reference/{modifier.md → schema/modifier.md} +58 -7
  95. package/reference/{optics.md → schema/optics.md} +2 -2
  96. package/reference/{patch.md → schema/patch.md} +1 -1
  97. package/{path-interpolator.md → reference/schema/path-interpolator.md} +165 -72
  98. package/reference/{schema-evolution → schema/schema-evolution}/as.md +8 -8
  99. package/reference/{schema-evolution → schema/schema-evolution}/index.md +2 -2
  100. package/reference/{schema-evolution → schema/schema-evolution}/into.md +8 -8
  101. package/reference/{schema-expr.md → schema/schema-expr.md} +110 -175
  102. package/reference/{schema.md → schema/schema.md} +12 -0
  103. package/reference/{structural-types.md → schema/structural-types.md} +1 -1
  104. package/reference/{type-class-derivation.md → schema/type-class-derivation.md} +63 -1
  105. package/reference/smithy.md +533 -0
  106. package/reference/sql/db-codec-deriver.md +71 -0
  107. package/reference/sql/db-codec.md +687 -0
  108. package/reference/sql/db-con.md +271 -0
  109. package/reference/sql/db-connection.md +153 -0
  110. package/reference/sql/db-param-writer.md +77 -0
  111. package/reference/sql/db-param.md +66 -0
  112. package/reference/sql/db-result-reader.md +146 -0
  113. package/reference/sql/db-tx.md +82 -0
  114. package/reference/sql/db-value.md +41 -0
  115. package/reference/sql/ddl.md +85 -0
  116. package/reference/sql/frag.md +254 -0
  117. package/reference/sql/index.md +341 -0
  118. package/reference/sql/repo.md +600 -0
  119. package/reference/sql/sql-dialect.md +73 -0
  120. package/reference/sql/sql-logger.md +62 -0
  121. package/reference/sql/sql-name-mapper.md +70 -0
  122. package/reference/sql/table-metadata.md +134 -0
  123. package/reference/sql/table.md +448 -0
  124. package/reference/sql/transactor-zio.md +399 -0
  125. package/reference/sql/transactor.md +353 -0
  126. package/reference/sql-zio.md +112 -0
  127. package/reference/streams/concurrent-operators.md +106 -0
  128. package/reference/streams/index.md +653 -0
  129. package/reference/streams/pipeline.md +718 -0
  130. package/reference/streams/reader.md +1284 -0
  131. package/reference/streams/scala-2-compatibility.md +55 -0
  132. package/reference/streams/sink.md +1426 -0
  133. package/reference/streams/stream.md +2526 -0
  134. package/reference/streams/writer.md +1045 -0
  135. package/reference/streams/zero-boxing.md +275 -0
  136. package/reference/telemetry.md +693 -0
  137. package/reference/typeid.md +5 -19
  138. package/sidebars.js +238 -43
  139. package/reference/formats.md +0 -694
  140. package/reference/http-model.md +0 -1716
  141. package/reference/streams.md +0 -989
  142. package/ringbuffer.md +0 -249
  143. /package/reference/{json-differ.md → schema/built-in-codecs/json/json-differ.md} +0 -0
  144. /package/reference/{dynamic-value.md → schema/dynamic-value.md} +0 -0
  145. /package/reference/{lazy.md → schema/lazy.md} +0 -0
  146. /package/reference/{reflect.md → schema/reflect.md} +0 -0
  147. /package/reference/{registers.md → schema/registers.md} +0 -0
  148. /package/reference/{schema-error.md → schema/schema-error.md} +0 -0
  149. /package/reference/{syntax.md → schema/syntax.md} +0 -0
  150. /package/reference/{validation.md → schema/validation.md} +0 -0
@@ -0,0 +1,314 @@
1
+ ---
2
+ id: hx-target
3
+ title: HxTarget
4
+ ---
5
+
6
+ `HxTarget` represents the `hx-target` attribute and related selector-based attributes, declaring where HTMX applies the swap. It supports DOM traversal patterns like "closest ancestor," "first descendant," "next sibling," and raw CSS selectors, eliminating stringly mistakes in selector construction.
7
+
8
+ Use `HxTarget.This` for the current element, or call traversal methods like `closest()`, `find()`, `next()`, and `previous()` for common patterns. For arbitrary CSS selectors, use `css()`. Here are the core patterns:
9
+
10
+ ```scala
11
+ import zio.http.htmx._
12
+
13
+ // Current element
14
+ HxTarget.This
15
+
16
+ // Closest ancestor matching selector
17
+ HxTarget.closest("form")
18
+
19
+ // First descendant matching selector
20
+ HxTarget.find(".results")
21
+
22
+ // Next sibling
23
+ HxTarget.next
24
+
25
+ // Next sibling matching selector
26
+ HxTarget.next(".item")
27
+
28
+ // Raw CSS selector
29
+ HxTarget.css("#results")
30
+ ```
31
+
32
+ ## Common Targets
33
+
34
+ **`HxTarget.This`** targets the element itself (the `this` keyword in HTMX). Backtick-friendly and identifier-friendly aliases are available:
35
+
36
+ ```scala
37
+ import zio.blocks.html._
38
+ import zio.http.htmx._
39
+
40
+ button(
41
+ hxPost := "/api/action",
42
+ hxTarget := HxTarget.This,
43
+ "Update Me"
44
+ )
45
+ ```
46
+
47
+ ```scala
48
+ import zio.http.htmx._
49
+
50
+ HxTarget.`this` // backtick-friendly
51
+ HxTarget.this_ // identifier-friendly (underscore avoids Scala keyword)
52
+ ```
53
+
54
+ ## DOM Traversal Patterns
55
+
56
+ **`closest(selector: String)`** traverses up the DOM tree to find the closest ancestor matching the selector:
57
+
58
+ ```scala
59
+ import zio.blocks.html._
60
+ import zio.http.htmx._
61
+
62
+ // Update the closest form ancestor
63
+ input(
64
+ hxPost := "/validate",
65
+ hxTarget := HxTarget.closest("form")
66
+ )
67
+
68
+ // Update the closest .card ancestor
69
+ button(
70
+ hxGet := "/refresh",
71
+ hxTarget := HxTarget.closest(".card")
72
+ )
73
+ ```
74
+
75
+ **`find(selector: String)`** finds the first descendant matching the selector:
76
+
77
+ ```scala
78
+ import zio.blocks.html._
79
+ import zio.http.htmx._
80
+
81
+ // Update the first .results div inside this element
82
+ div(
83
+ hxGet := "/search-results",
84
+ hxTarget := HxTarget.find(".results")
85
+ )
86
+ ```
87
+
88
+ **`next`** targets the next sibling element without filtering:
89
+
90
+ ```scala
91
+ import zio.blocks.html._
92
+ import zio.http.htmx._
93
+
94
+ // Update the next sibling
95
+ button(
96
+ hxPost := "/action",
97
+ hxTarget := HxTarget.next,
98
+ "Go"
99
+ )
100
+ ```
101
+
102
+ **`next(selector: String)`** targets the next sibling matching the selector:
103
+
104
+ ```scala
105
+ import zio.blocks.html._
106
+ import zio.http.htmx._
107
+
108
+ // Update the next .row sibling
109
+ div(
110
+ hxGet := "/row-data",
111
+ hxTarget := HxTarget.next(".row")
112
+ )
113
+ ```
114
+
115
+ **`HxTarget.previous`** targets the previous sibling element:
116
+
117
+ ```scala
118
+ import zio.blocks.html._
119
+ import zio.http.htmx._
120
+
121
+ button(
122
+ hxPost := "/action",
123
+ hxTarget := HxTarget.previous
124
+ )
125
+ ```
126
+
127
+ **`previous(selector: String)`** targets the previous sibling matching the selector:
128
+
129
+ ```scala
130
+ import zio.blocks.html._
131
+ import zio.http.htmx._
132
+
133
+ div(
134
+ hxGet := "/prev-data",
135
+ hxTarget := HxTarget.previous(".section")
136
+ )
137
+ ```
138
+
139
+ ## CSS Selectors
140
+
141
+ **`css(selector: String)`** uses a raw CSS selector string. Validation ensures the selector is non-empty but otherwise accepts any string:
142
+
143
+ ```scala
144
+ import zio.blocks.html._
145
+ import zio.http.htmx._
146
+
147
+ div(
148
+ hxGet := "/data",
149
+ hxTarget := HxTarget.css("#results")
150
+ )
151
+
152
+ // Complex CSS selector
153
+ div(
154
+ hxPost := "/search",
155
+ hxTarget := HxTarget.css("div.container > .results:first-child")
156
+ )
157
+ ```
158
+
159
+ **`css(selector: CssSelector)`** accepts a typed `CssSelector` from `zio.blocks.html`, providing type-safe selector construction:
160
+
161
+ ```scala
162
+ import zio.blocks.html._
163
+ import zio.http.htmx._
164
+
165
+ div(
166
+ hxGet := "/update",
167
+ hxTarget := HxTarget.css(selector".results")
168
+ )
169
+ ```
170
+
171
+ ## Rendering & Parsing
172
+
173
+ **`render: String`** produces the literal HTMX target selector string:
174
+
175
+ ```scala
176
+ import zio.http.htmx._
177
+
178
+ HxTarget.This.render // "this"
179
+ HxTarget.closest("form").render // "closest form"
180
+ HxTarget.find(".results").render // "find .results"
181
+ HxTarget.next.render // "next"
182
+ HxTarget.next(".item").render // "next .item"
183
+ HxTarget.previous(".row").render // "previous .row"
184
+ HxTarget.css("#results").render // "#results"
185
+ ```
186
+
187
+ **`HxTarget.parse(value: String): Either[String, HxTarget]`** parses a rendered selector string back into a typed `HxTarget`:
188
+
189
+ ```scala
190
+ import zio.http.htmx._
191
+
192
+ HxTarget.parse("this") // Right(HxTarget.This)
193
+ HxTarget.parse("closest form") // Right(HxTarget.closest("form"))
194
+ HxTarget.parse("find .results") // Right(HxTarget.find(".results"))
195
+ HxTarget.parse("next") // Right(HxTarget.next)
196
+ HxTarget.parse("next .item") // Right(HxTarget.next(".item"))
197
+ HxTarget.parse("#results") // Right(HxTarget.css("#results"))
198
+ ```
199
+
200
+ Parse failures return a descriptive `Left`:
201
+
202
+ ```scala
203
+ import zio.http.htmx._
204
+
205
+ HxTarget.parse("") // Left("HTMX target selector must be non-empty")
206
+ HxTarget.parse(" ") // Left("HTMX target selector must be non-empty")
207
+ ```
208
+
209
+ ## Common Patterns
210
+
211
+ Selecting the right target element is essential for HTMX interactions. Here are practical patterns for common scenarios:
212
+
213
+ ### Update a Form Container
214
+
215
+ When a button inside a form fires a request, target the form to replace all its content:
216
+
217
+ ```scala
218
+ import zio.blocks.html._
219
+ import zio.http.htmx._
220
+
221
+ form(
222
+ id := "search-form",
223
+ input(placeholder := "Search..."),
224
+ button(
225
+ hxPost := "/search",
226
+ hxTarget := HxTarget.closest("form"),
227
+ "Search"
228
+ )
229
+ )
230
+ ```
231
+
232
+ ### Update a Results Section
233
+
234
+ Target a specific div outside the trigger element:
235
+
236
+ ```scala
237
+ import zio.blocks.html._
238
+ import zio.http.htmx._
239
+
240
+ div(
241
+ input(
242
+ hxPost := "/search",
243
+ hxTarget := HxTarget.find(".results"),
244
+ placeholder := "Search..."
245
+ ),
246
+ div(id := "results", "Results here")
247
+ )
248
+ ```
249
+
250
+ ### Append to a List
251
+
252
+ Use `AfterBegin` or `BeforeEnd` with a target on the list container:
253
+
254
+ ```scala
255
+ import zio.blocks.html._
256
+ import zio.http.htmx._
257
+
258
+ ul(
259
+ id := "items",
260
+ li(
261
+ button(
262
+ hxPost := "/add-item",
263
+ hxTarget := HxTarget.closest("ul"),
264
+ hxSwap := HxSwap.BeforeEnd,
265
+ "Add Item"
266
+ )
267
+ ),
268
+ li("Item 1")
269
+ )
270
+ ```
271
+
272
+ ### Target the Next Row in a Table
273
+
274
+ Each row has an "edit" button that updates the next row:
275
+
276
+ ```scala
277
+ import zio.blocks.html._
278
+ import zio.http.htmx._
279
+
280
+ tr(
281
+ td("Data 1"),
282
+ td(button(
283
+ hxGet := "/edit",
284
+ hxTarget := HxTarget.next("tr"),
285
+ "Edit"
286
+ ))
287
+ )
288
+ ```
289
+
290
+ ## Integration with Other Attributes
291
+
292
+ Multiple HTMX attributes accept `HxTarget` values:
293
+
294
+ - `hxTarget` — Where to apply the swap
295
+ - `hxInclude` — Which elements to include in the request (uses similar selector patterns)
296
+ - `hxSync` — Which element to synchronize with
297
+
298
+ All accept the same `HxTarget` type:
299
+
300
+ ```scala
301
+ import zio.blocks.html._
302
+ import zio.http.htmx._
303
+ import scala.concurrent.duration._
304
+
305
+ form(
306
+ hxPost := "/submit",
307
+ hxTarget := HxTarget.closest("form"),
308
+ hxInclude := HxTarget.closest("form"),
309
+ hxSync := HxSync(HxTarget.This, HxSyncStrategy.Queue),
310
+ button("Submit")
311
+ )
312
+ ```
313
+
314
+ The `ToHtmxValue[HxTarget]` instance handles rendering automatically, so `HxTarget` values work seamlessly with all attribute keys that accept selectors.