houseaccount 0.13.3 → 0.14.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 (29) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +50 -0
  3. data/README.md +8 -8
  4. data/art/index.html.erb +21 -39
  5. data/lib/houseaccount/helpers/chats/asks.rb +2 -1
  6. data/lib/houseaccount/version.rb +1 -1
  7. data/public/css/houseaccount.css +1 -1
  8. data/public/index.html +23 -41
  9. data/public/js/houseaccount.js +32 -24
  10. data/public/{v0.13.3 → v0.14.2}/css/houseaccount.css +1 -1
  11. data/public/v0.14.2/js/houseaccount.js +152 -0
  12. metadata +19 -19
  13. data/public/v0.13.3/js/houseaccount.js +0 -144
  14. /data/public/{v0.13.3 → v0.14.2}/font/bootstrap-icons-FRBPO3H7.woff2 +0 -0
  15. /data/public/{v0.13.3 → v0.14.2}/font/quicksand-500-latin-QHYSRFVK.woff2 +0 -0
  16. /data/public/{v0.13.3 → v0.14.2}/font/quicksand-500-latin-ext-QZ4PXVHB.woff2 +0 -0
  17. /data/public/{v0.13.3 → v0.14.2}/font/quicksand-500-latin-ext.woff2 +0 -0
  18. /data/public/{v0.13.3 → v0.14.2}/font/quicksand-500-latin.woff2 +0 -0
  19. /data/public/{v0.13.3 → v0.14.2}/font/quicksand-500-vietnamese-RRA5CUQB.woff2 +0 -0
  20. /data/public/{v0.13.3 → v0.14.2}/font/quicksand-500-vietnamese.woff2 +0 -0
  21. /data/public/{v0.13.3 → v0.14.2}/theme/bootstrap.css +0 -0
  22. /data/public/{v0.13.3 → v0.14.2}/theme/dawn.css +0 -0
  23. /data/public/{v0.13.3 → v0.14.2}/theme/dracula.css +0 -0
  24. /data/public/{v0.13.3 → v0.14.2}/theme/gruvbox.css +0 -0
  25. /data/public/{v0.13.3 → v0.14.2}/theme/monokai.css +0 -0
  26. /data/public/{v0.13.3 → v0.14.2}/theme/nord.css +0 -0
  27. /data/public/{v0.13.3 → v0.14.2}/theme/one_dark.css +0 -0
  28. /data/public/{v0.13.3 → v0.14.2}/theme/solarized.css +0 -0
  29. /data/public/{v0.13.3 → v0.14.2}/theme/tokyo_night.css +0 -0
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5a717ed17766bb214cc6262e7ccad3ada84c397a35e1e4a38ecb7d363e7e339b
4
- data.tar.gz: '085176f5083b758d53b553bab1667b993002540c0dda1dcc8fa0eebd65ffbed5'
3
+ metadata.gz: 49b64054d4b9cdaa0ce91c59af3b181618aa4f550343e08569d8ae60960c1833
4
+ data.tar.gz: c01b758141861c04ab47f4fe1d63d028782c4e3193ecfdf2bde4668bb4c3661c
5
5
  SHA512:
6
- metadata.gz: e0b43ad2cd7084cb83b2dff232123b8065ed222160d85a4f1228e4de6d3bd461de4305a916b70bd837b6b83bbb5e0c208ae6e2bfeabc00fd8bc18c71de1416ce
7
- data.tar.gz: f1c83dbdda8e5ef260d6382123bdf10687eda91e1aad66ce8ee27c574104cbbd1aeb24a12bc3be77f2d00a9a6d902755fa0c6d47d725e9d2672a98c49334c23e
6
+ metadata.gz: acda012819638ddb27fa6c46d249b97d5bdc1e3547e42e2f06c07d284966fdf590fd70e7c3ca7e3d7bc74bf1c445aa04201b6af291207946744351f37f5b2b01
7
+ data.tar.gz: 82e90aa97570fa13c9f848fd27d581dbc3096be2da07aac3f3afe2a46476dbeda63b569dd9f1c65aafee5f34e96cc627bc2387ebc7f98bf9a19f36836458eacf
data/CHANGELOG.md CHANGED
@@ -7,6 +7,56 @@ For more information about changelogs, check [Keep a Changelog](http://keepachan
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## 0.14.2 - 2026-09-18
11
+
12
+ * [Fix] A conversation reads at the house's own size wherever it is drawn
13
+
14
+ A bubble took its type from the page around it, so a chat on a host that compacts its
15
+ body for tables dense with figures came out smaller than the same chat on a page that
16
+ does not. A sentence somebody typed is prose whatever the table beside it needs, so
17
+ `.chat-bubble` and the field under it say their own size.
18
+
19
+ * [Fix] A bubble is read from its start inside a flow
20
+
21
+ A flow centres a card's words, which suits a heading and a one-line answer and not an
22
+ answer long enough to wrap: a paragraph is read down an edge rather than about a middle.
23
+
24
+ * [Fix] A focus ring is not painted over by the link below it
25
+
26
+ The ring is an outline with an offset, drawn outside the box it rings and taking no room,
27
+ so the next link's own background — the tint an active row wears — covered the half that
28
+ overlapped. The focused link is lifted above its siblings, the way the navbar already is
29
+ over the table under it.
30
+
31
+ ## 0.14.1 - 2026-09-17
32
+
33
+ * [Fix] A confirm asks about the link that was clicked rather than whatever holds the focus
34
+
35
+ * [Change] The showcase demonstrates the confirm without a bare dialog standing beside it
36
+
37
+ ## 0.14.0 - 2026-09-17
38
+
39
+ * [Feature] A table's rows can be dragged into an order
40
+
41
+ The `sortable` controller, which is what a recourse page with a grip beside each row
42
+ names: a row is picked up by its grip and dropped somewhere else in the table, and the
43
+ place it landed in is PATCHed to the URL that row carries. Only the row that moved is
44
+ reported — the server shifts whatever it displaced, being the only one that knows how
45
+ many rows stand behind this page — and nothing is rendered from the answer, since the
46
+ row is already where it was dropped and redrawing the table under the cursor that
47
+ dropped it is the thing to avoid. A move the server refuses reloads the enclosing
48
+ frame, so a row never sits somewhere the database never agreed to, and a refresh
49
+ broadcast arriving mid-drag is sat out the way the search form sits one out.
50
+
51
+ SortableJS does the dragging, bundled like everything else here. Its own two classes
52
+ are styled beside the table's: the space a row will land in wears the tint a kept row
53
+ wears, and the grip is `grab`, then `grabbing` while it is held — the whole of the
54
+ affordance, since the icon already says what it is. `touch-action` is taken off that
55
+ square alone, a phone scrolling a table by dragging anywhere else on it.
56
+
57
+ * [Fix] A question half typed survives an answer landing: the field is Turbo's to leave alone,
58
+ and is emptied once the question it held has gone rather than by the morph
59
+
10
60
  ## 0.13.3 - 2026-09-17
11
61
 
12
62
  * [Change] The showcase leads with the themes, and says less everywhere else
data/README.md CHANGED
@@ -22,10 +22,10 @@ gem install houseaccount
22
22
 
23
23
  ```ruby
24
24
  # Gemfile
25
- gem 'houseaccount', '~> 0.13.0'
25
+ gem 'houseaccount', '~> 0.14.0'
26
26
  ```
27
27
 
28
- `~> 0.13.0` stops short of `0.14`, since below 1.0 a minor release may break whatever it likes.
28
+ `~> 0.14.0` stops short of `0.15`, since below 1.0 a minor release may break whatever it likes.
29
29
  Rails 8.1 and Ruby 3.2 are the minimum.
30
30
 
31
31
  ### From npm
@@ -59,7 +59,7 @@ Stimulus application rather than taking the house's:
59
59
  import WallController from 'houseaccount/controllers/wall_controller.js'
60
60
  ```
61
61
 
62
- Pin as a Gemfile does, and for the same reason: `"houseaccount": "~0.13.0"` stops short of `0.14`.
62
+ Pin as a Gemfile does, and for the same reason: `"houseaccount": "~0.14.0"` stops short of `0.15`.
63
63
 
64
64
  A page takes the gem's layout, and wears the same head:
65
65
 
@@ -95,7 +95,7 @@ which Pages redirects away from.
95
95
 
96
96
  With the gem in the bundle an app serves `/css/houseaccount.css`, `/js/houseaccount.js`,
97
97
  `/theme/*`, `/font/*`, `/logo/*` and `/favicon/*` itself — and its own version's copy under
98
- `/v0.13.3/`, which is what the head helper links, cached for a year — answers a 400, 404, 406, 422 or 500
98
+ `/v0.14.1/`, which is what the head helper links, cached for a year — answers a 400, 404, 406, 422 or 500
99
99
  with the house's own page, and has these helpers in every view:
100
100
 
101
101
  ```erb
@@ -248,16 +248,16 @@ Those follow the latest release. Every release is also kept whole under its own
248
248
  forever and cached for a year, for a page that would rather move on its own terms:
249
249
 
250
250
  ```html
251
- <link rel='stylesheet' href='https://design.houseaccount.com/v0.13.3/css/houseaccount.css'>
252
- <script type='module' src='https://design.houseaccount.com/v0.13.3/js/houseaccount.js'></script>
251
+ <link rel='stylesheet' href='https://design.houseaccount.com/v0.14.1/css/houseaccount.css'>
252
+ <script type='module' src='https://design.houseaccount.com/v0.14.1/js/houseaccount.js'></script>
253
253
  ```
254
254
 
255
255
  The same two files come from any CDN that carries the npm package, for a page that would
256
256
  rather not depend on the site at all:
257
257
 
258
258
  ```html
259
- <link rel='stylesheet' href='https://cdn.jsdelivr.net/npm/houseaccount@0.13.3/public/css/houseaccount.css'>
260
- <script type='module' src='https://cdn.jsdelivr.net/npm/houseaccount@0.13.3/public/js/houseaccount.js'></script>
259
+ <link rel='stylesheet' href='https://cdn.jsdelivr.net/npm/houseaccount@0.14.1/public/css/houseaccount.css'>
260
+ <script type='module' src='https://cdn.jsdelivr.net/npm/houseaccount@0.14.1/public/js/houseaccount.js'></script>
261
261
  ```
262
262
 
263
263
  The palettes are beside them, at `public/theme/nord.css` and the rest. A published version is never
data/art/index.html.erb CHANGED
@@ -10,14 +10,16 @@
10
10
  <link rel='icon' href='favicon/design-96.png' type='image/png' sizes='96x96'>
11
11
  <link rel='apple-touch-icon' href='favicon/design-180.png'>
12
12
  <link rel='manifest' href='site.webmanifest'>
13
- <!-- The same two files every HouseAccount page loads, by relative path so this page
14
- reads the same on staging, on production and from a folder on disk. -->
15
- <link rel='stylesheet' href='css/houseaccount.css'>
16
- <link rel='stylesheet' href='theme/bootstrap.css' data-recourse-theme=''>
17
- <script type='module' src='js/houseaccount.js'></script>
13
+ <!-- The same files every HouseAccount page loads, under the version the head helper
14
+ pins a host to, so the page is drawn by the bytes it hands out rather than by
15
+ whatever was last built. Relative, so it reads the same on staging, on production
16
+ and from a folder on disk. -->
17
+ <link rel='stylesheet' href='v<%= version %>/css/houseaccount.css'>
18
+ <link rel='stylesheet' href='v<%= version %>/theme/bootstrap.css' data-recourse-theme=''>
19
+ <script type='module' src='v<%= version %>/js/houseaccount.js'></script>
18
20
  <style>
19
21
  /* The page's own chrome and nothing else: everything shown below is styled by
20
- css/houseaccount.css alone, which is the point of showing it. */
22
+ the pinned houseaccount.css alone, which is the point of showing it. */
21
23
  .design-section { padding-block: 2rem; border-block-end: var(--bs-border-width) solid var(--bs-border-color); }
22
24
  .design-section > p { max-width: 48rem; margin-inline: auto; }
23
25
  .design-subsection { margin-block-start: 2.5rem; padding-block-start: 1.5rem; border-block-start: var(--bs-border-width) dashed var(--bs-border-color); }
@@ -27,10 +29,6 @@
27
29
  .design-shell { height: 18rem; border: var(--bs-border-width) solid var(--bs-border-color); border-radius: var(--bs-radius-3); overflow: hidden; }
28
30
  .design-shell .recourse-shell { height: 100%; }
29
31
  .chat-thread { max-width: 36rem; margin-inline: auto; }
30
- /* The wall fills a viewport; here it fills a box, so the page can show it beside the rest. */
31
- .design-wall { position: relative; height: 24rem; overflow: hidden; border-radius: var(--bs-radius-3); }
32
- .design-wall .tools { position: absolute; }
33
- .design-wall .flow { height: 100%; justify-content: center; }
34
32
  </style>
35
33
  </head>
36
34
  <body class='text-center'>
@@ -70,9 +68,9 @@
70
68
  <h2>Themes</h2>
71
69
  <button type='button' class='btn btn-outline theme-primary' data-controller='scheme' data-action='scheme#rotate'
72
70
  data-scheme-themes-value='["bootstrap","dawn","dracula","gruvbox","monokai","nord","one_dark","solarized","tokyo_night"]'
73
- data-scheme-path-value='theme' data-scheme-storage-value='recourse-scheme'>
74
- <span class='recourse-scheme-light'><i class='bi bi-moon-fill'></i> Dark</span>
75
- <span class='recourse-scheme-dark'><i class='bi bi-sun-fill'></i> Light</span>
71
+ data-scheme-path-value='v<%= version %>/theme' data-scheme-storage-value='recourse-scheme'>
72
+ <span class='recourse-scheme-light'><i class='bi bi-moon-fill'></i> Switch to dark</span>
73
+ <span class='recourse-scheme-dark'><i class='bi bi-sun-fill'></i> Switch to light</span>
76
74
  </button>
77
75
  </section>
78
76
 
@@ -142,7 +140,9 @@
142
140
  </div>
143
141
 
144
142
  <h3 class='h5 design-subsection'>Confirm</h3>
145
- <a class='btn btn-sm btn-solid theme-danger' href='#confirm-demo' data-turbo-method='delete' data-turbo-confirm='Delete California?&#10;&#10;58 counties and 3 markets will be deleted with it.&#10;12 messages will be kept, without a job.&#10;Anything under those goes too.&#10;&#10;This cannot be undone.'>Delete state</a>
143
+ <turbo-frame id='confirm-demo'>
144
+ <a class='btn btn-sm btn-solid theme-danger' href='#confirm-demo' data-turbo-method='get' data-turbo-frame='confirm-demo' data-turbo-confirm='Delete humanity?'>Delete state</a>
145
+ </turbo-frame>
146
146
 
147
147
  <h3 class='h5 design-subsection'>Tooltip and relative time</h3>
148
148
  <p>Hover the icon and the time: <i class='bi bi-telephone' role='img' data-controller='tooltip' data-bs-placement='top' data-bs-title='Phone'></i> ·
@@ -185,26 +185,6 @@
185
185
  <input type='submit' value='Send' class='btn btn-solid rounded-3 theme-primary ms-3'>
186
186
  </form>
187
187
  </div>
188
-
189
- <h3 class='h5 design-subsection' id='wall'>Wall</h3>
190
- <p class='fg-2'>A page of the signup flow, as <code>flow</code> draws it around a card.</p>
191
- <div class='design-wall'>
192
- <div class='flow' data-controller='wall'>
193
- <header><a class='lockup quicksand' href='#wall'><svg aria-hidden='true' style='width: 0.8117em; height: 0.8117em; top: 0.0358em' viewBox='0 0 512 512'><g fill='none' stroke='#3b8ae8' stroke-width='28' stroke-linecap='round' stroke-linejoin='round'><path d='M256 302Q256 256 295.8 233L406.2 169.3Q446 146.3 446 192.3V319.7Q446 365.7 406.2 388.7L295.8 452.4Q256 475.4 256 429.4Z' fill='#1B5288'/><path d='M216.2 59.6Q256 36.6 295.8 59.6L406.2 123.3Q446 146.3 446 192.3V319.7Q446 365.7 406.2 388.7L295.8 452.4Q256 475.4 216.2 452.4L105.8 388.7Q66 365.7 66 319.7V192.3Q66 146.3 105.8 123.3Z'/><path d='M256 256 95.4 163.3'/><path d='M256 256 416.6 163.3'/><path d='M256 256V441.4'/></g></svg><span class='house'>house</span>account</a></header>
194
- <h1>Welcome to HouseAccount</h1>
195
- <p>Enter the phone number of your business and we’ll text a verification code</p>
196
- <div class='flow-card p-3 md:p-4 mx-auto'>
197
- <form class='p-0' data-controller='require' onsubmit='return false'>
198
- <fieldset class='d-grid'>
199
- <label class='form-label' for='wall-phone'>Your mobile number</label>
200
- <input class='form-control' type='tel' id='wall-phone' required data-controller='phone' data-action='keydown->phone#down input->phone#input'>
201
- </fieldset>
202
- <input type='submit' value='Join' class='btn btn-solid theme-primary mt-3'>
203
- </form>
204
- </div>
205
- <footer><a href='#wall'>Sign out</a><span class='fg-2' aria-hidden='true'>·</span><a href='#wall'>Disconnect Jobber</a></footer>
206
- </div>
207
- </div>
208
188
  </section>
209
189
 
210
190
  <section class='design-section' id='page'>
@@ -236,11 +216,13 @@
236
216
  </section>
237
217
  </main>
238
218
 
239
- <footer class='container-fluid px-3 py-4 small fg-2 d-flex flex-wrap justify-content-center gap-3'>
240
- <span>The <code>houseaccount</code> gem draws all of this in a Rails app.</span>
241
- <a href='https://github.com/HouseAccountEng/design'>Source</a>
242
- <a href='https://rubydoc.info/gems/houseaccount'>Reference</a>
243
- <a href='https://rubygems.org/gems/houseaccount'>RubyGems</a>
219
+ <footer class='container-fluid px-3 py-4 small fg-2 d-flex flex-column align-items-center gap-2'>
220
+ <code>gem install houseaccount</code>
221
+ <div class='d-flex flex-wrap justify-content-center gap-3'>
222
+ <a href='https://github.com/HouseAccountEng/design'>Source</a>
223
+ <a href='https://rubydoc.info/gems/houseaccount'>Reference</a>
224
+ <a href='https://rubygems.org/gems/houseaccount'>RubyGems</a>
225
+ </div>
244
226
  </footer>
245
227
  </body>
246
228
  </html>
@@ -25,7 +25,8 @@ module HouseAccount
25
25
  {
26
26
  id: 'ask', required: true, autofocus: true, autocomplete: 'off',
27
27
  class: 'form-control rounded-4 flex-grow-1 chat-ask', placeholder: hints.first,
28
- data: { thread_target: 'field', **houseaccount_chat_placeholder_data(hints) },
28
+ data: { thread_target: 'field', turbo_permanent: '',
29
+ **houseaccount_chat_placeholder_data(hints), },
29
30
  }
30
31
  end
31
32
 
@@ -1,4 +1,4 @@
1
1
  module HouseAccount
2
2
  # Version of the gem, read by the gemspec and by hosts checking compatibility.
3
- VERSION = '0.13.3'
3
+ VERSION = '0.14.2'
4
4
  end