houseaccount 0.13.2 → 0.14.1

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 +46 -0
  3. data/README.md +8 -8
  4. data/art/index.html.erb +32 -51
  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 +34 -53
  9. data/public/js/houseaccount.js +32 -24
  10. data/public/{v0.13.2 → v0.14.1}/css/houseaccount.css +1 -1
  11. data/public/v0.14.1/js/houseaccount.js +152 -0
  12. metadata +19 -19
  13. data/public/v0.13.2/js/houseaccount.js +0 -144
  14. /data/public/{v0.13.2 → v0.14.1}/font/bootstrap-icons-FRBPO3H7.woff2 +0 -0
  15. /data/public/{v0.13.2 → v0.14.1}/font/quicksand-500-latin-QHYSRFVK.woff2 +0 -0
  16. /data/public/{v0.13.2 → v0.14.1}/font/quicksand-500-latin-ext-QZ4PXVHB.woff2 +0 -0
  17. /data/public/{v0.13.2 → v0.14.1}/font/quicksand-500-latin-ext.woff2 +0 -0
  18. /data/public/{v0.13.2 → v0.14.1}/font/quicksand-500-latin.woff2 +0 -0
  19. /data/public/{v0.13.2 → v0.14.1}/font/quicksand-500-vietnamese-RRA5CUQB.woff2 +0 -0
  20. /data/public/{v0.13.2 → v0.14.1}/font/quicksand-500-vietnamese.woff2 +0 -0
  21. /data/public/{v0.13.2 → v0.14.1}/theme/bootstrap.css +0 -0
  22. /data/public/{v0.13.2 → v0.14.1}/theme/dawn.css +0 -0
  23. /data/public/{v0.13.2 → v0.14.1}/theme/dracula.css +0 -0
  24. /data/public/{v0.13.2 → v0.14.1}/theme/gruvbox.css +0 -0
  25. /data/public/{v0.13.2 → v0.14.1}/theme/monokai.css +0 -0
  26. /data/public/{v0.13.2 → v0.14.1}/theme/nord.css +0 -0
  27. /data/public/{v0.13.2 → v0.14.1}/theme/one_dark.css +0 -0
  28. /data/public/{v0.13.2 → v0.14.1}/theme/solarized.css +0 -0
  29. /data/public/{v0.13.2 → v0.14.1}/theme/tokyo_night.css +0 -0
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: fdd47bd593acde269b1a8c12cbb1632f218ed4965c14131366a7f9bd5721ff81
4
- data.tar.gz: d78196897da326d2b29aa9985d1ca4a0ed5b7664b2a73db98eb74911396d96ac
3
+ metadata.gz: 5a8e618a87b0698bb0ceec6d3a257045325766ab840ad8672a52148210a3298b
4
+ data.tar.gz: 595a9d0ed9b7b85eaa4dc4581db033a0219eebcdc72cb2ea14a83da9dab81bc8
5
5
  SHA512:
6
- metadata.gz: 1d16bc370f130fe7ed6b2affc1168804f889a9109bf12ffc22383e95d60d2b7c9c9be2a0fd38600094ffc0a8fd62d342f6d3324b1bf5179cc23e4e20a5be85a4
7
- data.tar.gz: e3b3994634a1262c1c0f8e81539fc5d1414a6bed26e3fe61ad7b481357c1738cbb551091f7646c9e5ecebe3cd2147932ffd64933f1f465cc1f5bad90cf46dd3a
6
+ metadata.gz: 2a0649f3153594aa2092c89519926980cd9118c788a4ac87056845c206bc09a908e657bd772db0637f6850b77a5292f765cbe30c1b0f7b52934151c98662a1ec
7
+ data.tar.gz: 4b1da3b9f81e9401ee9f353a73cb5c7f7951bc0b01ea7c629215c1b302b7cd67bdc93ac32c255a4ed27b3a31196f3b4d8b2270ca7468bd42b047abaf78b05869
data/CHANGELOG.md CHANGED
@@ -7,6 +7,52 @@ For more information about changelogs, check [Keep a Changelog](http://keepachan
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## 0.14.1 - 2026-09-17
11
+
12
+ * [Fix] A confirm asks about the link that was clicked rather than whatever holds the focus
13
+
14
+ * [Change] The showcase demonstrates the confirm without a bare dialog standing beside it
15
+
16
+ ## 0.14.0 - 2026-09-17
17
+
18
+ * [Feature] A table's rows can be dragged into an order
19
+
20
+ The `sortable` controller, which is what a recourse page with a grip beside each row
21
+ names: a row is picked up by its grip and dropped somewhere else in the table, and the
22
+ place it landed in is PATCHed to the URL that row carries. Only the row that moved is
23
+ reported — the server shifts whatever it displaced, being the only one that knows how
24
+ many rows stand behind this page — and nothing is rendered from the answer, since the
25
+ row is already where it was dropped and redrawing the table under the cursor that
26
+ dropped it is the thing to avoid. A move the server refuses reloads the enclosing
27
+ frame, so a row never sits somewhere the database never agreed to, and a refresh
28
+ broadcast arriving mid-drag is sat out the way the search form sits one out.
29
+
30
+ SortableJS does the dragging, bundled like everything else here. Its own two classes
31
+ are styled beside the table's: the space a row will land in wears the tint a kept row
32
+ wears, and the grip is `grab`, then `grabbing` while it is held — the whole of the
33
+ affordance, since the icon already says what it is. `touch-action` is taken off that
34
+ square alone, a phone scrolling a table by dragging anywhere else on it.
35
+
36
+ * [Fix] A question half typed survives an answer landing: the field is Turbo's to leave alone,
37
+ and is emptied once the question it held has gone rather than by the morph
38
+
39
+ ## 0.13.3 - 2026-09-17
40
+
41
+ * [Change] The showcase leads with the themes, and says less everywhere else
42
+
43
+ The palette toggle repaints everything under it, so it stands first, and the section is
44
+ Themes — the word the folder, the id and the files have always used. Its button names the
45
+ mode it switches to and nothing else. Icons lost the last paragraph on the page that
46
+ described what the thing under it draws, and on a phone the two card URLs show the path
47
+ without the origin there is no room for.
48
+
49
+ * [Fix] The README pins a version a host can install
50
+
51
+ Three 0.13 releases went out while the README still taught `~> 0.12.0`, which stops short
52
+ of 0.13: a pin that cannot resolve the gem it appears in. It pins `~> 0.13.0` now, every
53
+ example URL names this release, and `package-lock.json`, left at 0.12.0 by the same three
54
+ releases, carries the version its package does.
55
+
10
56
  ## 0.13.2 - 2026-09-17
11
57
 
12
58
  * [Fix] The cell a label wraps is `flow-field`; `form-field` is Bootstrap's, and its rules applied
data/README.md CHANGED
@@ -22,10 +22,10 @@ gem install houseaccount
22
22
 
23
23
  ```ruby
24
24
  # Gemfile
25
- gem 'houseaccount', '~> 0.12.0'
25
+ gem 'houseaccount', '~> 0.14.0'
26
26
  ```
27
27
 
28
- `~> 0.12.0` stops short of `0.13`, 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.12.0"` stops short of `0.13`.
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.12.0/`, 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.12.0/css/houseaccount.css'>
252
- <script type='module' src='https://design.houseaccount.com/v0.12.0/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.12.0/public/css/houseaccount.css'>
260
- <script type='module' src='https://cdn.jsdelivr.net/npm/houseaccount@0.12.0/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,16 +29,12 @@
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'>
37
35
  <header class='container-fluid px-3 py-3 border-bottom d-flex flex-wrap justify-content-center align-items-baseline gap-3'>
38
36
  <a class='lockup quicksand' href='#'><svg aria-hidden='true' style='width: 1.0515em; height: 1.0515em; top: 0.18625em' viewBox='0 0 512 512'><g fill='none' stroke='#3b8ae8' stroke-width='28' stroke-linecap='round' stroke-linejoin='round' transform='rotate(45 256 256)'><path d='M196 60 L316 60 L316 372 L196 372 Z'/><path d='M196 120 L316 120'/><path d='M196 372 L256 470 L316 372'/><path d='M232 431 L256 470 L280 431 Z' fill='#1B5288'/></g></svg>design</a>
39
- <nav class='fg-2'>the <a href='#component'>components</a>, <a href='#page'>error pages</a>, <a href='#theme'>palettes</a>, <a href='#favicon'>icons</a> shared by <a href='https://pro.houseaccount.com/bookings' title='Fountain'><img class='design-mark' src='logo/fountain.svg' alt='Fountain'></a> <a href='https://gold.houseaccount.com/specialty_matches' title='Goldrush'><img class='design-mark' src='logo/goldrush.svg' alt='Goldrush'></a> <a href='https://providers.houseaccount.com/providers' title='Houston'><img class='design-mark' src='logo/houston.svg' alt='Houston'></a> <a href='https://checkout.houseaccount.com/providers' title='Autopilot'><img class='design-mark' src='logo/autopilot.svg' alt='Autopilot'></a></nav>
37
+ <nav class='fg-2'>the <a href='#theme'>themes</a>, <a href='#component'>components</a>, <a href='#page'>error pages</a>, <a href='#favicon'>icons</a> shared by <a href='https://pro.houseaccount.com/bookings' title='Fountain'><img class='design-mark' src='logo/fountain.svg' alt='Fountain'></a> <a href='https://gold.houseaccount.com/specialty_matches' title='Goldrush'><img class='design-mark' src='logo/goldrush.svg' alt='Goldrush'></a> <a href='https://providers.houseaccount.com/providers' title='Houston'><img class='design-mark' src='logo/houston.svg' alt='Houston'></a> <a href='https://checkout.houseaccount.com/providers' title='Autopilot'><img class='design-mark' src='logo/autopilot.svg' alt='Autopilot'></a></nav>
40
38
  </header>
41
39
 
42
40
  <main class='container-fluid px-3'>
@@ -46,14 +44,14 @@
46
44
  <div class='col-12 md:col-6'>
47
45
  <div class='card p-3'>
48
46
  <strong>Stylesheet</strong>
49
- <a class='design-url' href='css/houseaccount.css'>https://design.houseaccount.com/css/houseaccount.css</a>
50
- <span class='small fg-2 mt-1'>Bootstrap 6 alpha, Bootstrap Icons and the components below.</span>
47
+ <a class='design-url' href='css/houseaccount.css'><span class='d-none sm:d-inline'>https://design.houseaccount.com/</span>css/houseaccount.css</a>
48
+ <span class='small fg-2 mt-1'>Bootstrap 6 with extra icons and components</span>
51
49
  </div>
52
50
  </div>
53
51
  <div class='col-12 md:col-6'>
54
52
  <div class='card p-3'>
55
53
  <strong>Script</strong>
56
- <a class='design-url' href='js/houseaccount.js'>https://design.houseaccount.com/js/houseaccount.js</a>
54
+ <a class='design-url' href='js/houseaccount.js'><span class='d-none sm:d-inline'>https://design.houseaccount.com/</span>js/houseaccount.js</a>
57
55
  <span class='small fg-2 mt-1'>Turbo, Bootstrap, and a Stimulus application</span>
58
56
  </div>
59
57
  </div>
@@ -66,6 +64,16 @@
66
64
  </div>
67
65
  </section>
68
66
 
67
+ <section class='design-section' id='theme'>
68
+ <h2>Themes</h2>
69
+ <button type='button' class='btn btn-outline theme-primary' data-controller='scheme' data-action='scheme#rotate'
70
+ data-scheme-themes-value='["bootstrap","dawn","dracula","gruvbox","monokai","nord","one_dark","solarized","tokyo_night"]'
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> Dark</span>
73
+ <span class='recourse-scheme-dark'><i class='bi bi-sun-fill'></i> Light</span>
74
+ </button>
75
+ </section>
76
+
69
77
  <section class='design-section' id='component'>
70
78
  <h2>Components</h2>
71
79
  <h3 class='h5 design-subsection'>Buttons and badges</h3>
@@ -132,7 +140,9 @@
132
140
  </div>
133
141
 
134
142
  <h3 class='h5 design-subsection'>Confirm</h3>
135
- <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>
136
146
 
137
147
  <h3 class='h5 design-subsection'>Tooltip and relative time</h3>
138
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> ·
@@ -175,26 +185,6 @@
175
185
  <input type='submit' value='Send' class='btn btn-solid rounded-3 theme-primary ms-3'>
176
186
  </form>
177
187
  </div>
178
-
179
- <h3 class='h5 design-subsection' id='wall'>Wall</h3>
180
- <p class='fg-2'>A page of the signup flow, as <code>flow</code> draws it around a card.</p>
181
- <div class='design-wall'>
182
- <div class='flow' data-controller='wall'>
183
- <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>
184
- <h1>Welcome to HouseAccount</h1>
185
- <p>Enter the phone number of your business and we’ll text a verification code</p>
186
- <div class='flow-card p-3 md:p-4 mx-auto'>
187
- <form class='p-0' data-controller='require' onsubmit='return false'>
188
- <fieldset class='d-grid'>
189
- <label class='form-label' for='wall-phone'>Your mobile number</label>
190
- <input class='form-control' type='tel' id='wall-phone' required data-controller='phone' data-action='keydown->phone#down input->phone#input'>
191
- </fieldset>
192
- <input type='submit' value='Join' class='btn btn-solid theme-primary mt-3'>
193
- </form>
194
- </div>
195
- <footer><a href='#wall'>Sign out</a><span class='fg-2' aria-hidden='true'>·</span><a href='#wall'>Disconnect Jobber</a></footer>
196
- </div>
197
- </div>
198
188
  </section>
199
189
 
200
190
  <section class='design-section' id='page'>
@@ -208,19 +198,8 @@
208
198
  </ul>
209
199
  </section>
210
200
 
211
- <section class='design-section' id='theme'>
212
- <h2>Palettes</h2>
213
- <button type='button' class='btn btn-outline theme-primary' data-controller='scheme' data-action='scheme#rotate'
214
- data-scheme-themes-value='["bootstrap","dawn","dracula","gruvbox","monokai","nord","one_dark","solarized","tokyo_night"]'
215
- data-scheme-path-value='theme' data-scheme-storage-value='recourse-scheme'>
216
- <span class='recourse-scheme-light'><i class='bi bi-moon-fill'></i> Another palette, dark</span>
217
- <span class='recourse-scheme-dark'><i class='bi bi-sun-fill'></i> Another palette, light</span>
218
- </button>
219
- </section>
220
-
221
201
  <section class='design-section' id='favicon'>
222
202
  <h2>Icons</h2>
223
- <p class='fg-2'>Every mark an app is known by: the drawing under <code>/logo</code>, and what a tab, a phone and a manifest each ask for under <code>/favicon</code>. The pink one is a local machine's.</p>
224
203
  <div class='table-responsive'>
225
204
  <table class='table table-hover mx-auto' style='max-width: 60rem'>
226
205
  <thead><tr><th scope='col'>Logo</th><th scope='col'>App</th><th scope='col'>.svg</th><th scope='col'>-dev.svg</th><th scope='col'>-96.png</th><th scope='col'>-180.png</th><th scope='col'>-192.png</th><th scope='col'>-512.png</th><th scope='col'>.ico</th><th scope='col'>.webmanifest</th></tr></thead>
@@ -237,11 +216,13 @@
237
216
  </section>
238
217
  </main>
239
218
 
240
- <footer class='container-fluid px-3 py-4 small fg-2 d-flex flex-wrap justify-content-center gap-3'>
241
- <span>The <code>houseaccount</code> gem draws all of this in a Rails app.</span>
242
- <a href='https://github.com/HouseAccountEng/design'>Source</a>
243
- <a href='https://rubydoc.info/gems/houseaccount'>Reference</a>
244
- <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>
245
226
  </footer>
246
227
  </body>
247
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.2'
3
+ VERSION = '0.14.1'
4
4
  end