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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +50 -0
- data/README.md +8 -8
- data/art/index.html.erb +21 -39
- data/lib/houseaccount/helpers/chats/asks.rb +2 -1
- data/lib/houseaccount/version.rb +1 -1
- data/public/css/houseaccount.css +1 -1
- data/public/index.html +23 -41
- data/public/js/houseaccount.js +32 -24
- data/public/{v0.13.3 → v0.14.2}/css/houseaccount.css +1 -1
- data/public/v0.14.2/js/houseaccount.js +152 -0
- metadata +19 -19
- data/public/v0.13.3/js/houseaccount.js +0 -144
- /data/public/{v0.13.3 → v0.14.2}/font/bootstrap-icons-FRBPO3H7.woff2 +0 -0
- /data/public/{v0.13.3 → v0.14.2}/font/quicksand-500-latin-QHYSRFVK.woff2 +0 -0
- /data/public/{v0.13.3 → v0.14.2}/font/quicksand-500-latin-ext-QZ4PXVHB.woff2 +0 -0
- /data/public/{v0.13.3 → v0.14.2}/font/quicksand-500-latin-ext.woff2 +0 -0
- /data/public/{v0.13.3 → v0.14.2}/font/quicksand-500-latin.woff2 +0 -0
- /data/public/{v0.13.3 → v0.14.2}/font/quicksand-500-vietnamese-RRA5CUQB.woff2 +0 -0
- /data/public/{v0.13.3 → v0.14.2}/font/quicksand-500-vietnamese.woff2 +0 -0
- /data/public/{v0.13.3 → v0.14.2}/theme/bootstrap.css +0 -0
- /data/public/{v0.13.3 → v0.14.2}/theme/dawn.css +0 -0
- /data/public/{v0.13.3 → v0.14.2}/theme/dracula.css +0 -0
- /data/public/{v0.13.3 → v0.14.2}/theme/gruvbox.css +0 -0
- /data/public/{v0.13.3 → v0.14.2}/theme/monokai.css +0 -0
- /data/public/{v0.13.3 → v0.14.2}/theme/nord.css +0 -0
- /data/public/{v0.13.3 → v0.14.2}/theme/one_dark.css +0 -0
- /data/public/{v0.13.3 → v0.14.2}/theme/solarized.css +0 -0
- /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:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 49b64054d4b9cdaa0ce91c59af3b181618aa4f550343e08569d8ae60960c1833
|
|
4
|
+
data.tar.gz: c01b758141861c04ab47f4fe1d63d028782c4e3193ecfdf2bde4668bb4c3661c
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
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.
|
|
25
|
+
gem 'houseaccount', '~> 0.14.0'
|
|
26
26
|
```
|
|
27
27
|
|
|
28
|
-
`~> 0.
|
|
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.
|
|
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.
|
|
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.
|
|
252
|
-
<script type='module' src='https://design.houseaccount.com/v0.
|
|
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.
|
|
260
|
-
<script type='module' src='https://cdn.jsdelivr.net/npm/houseaccount@0.
|
|
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
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
<
|
|
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
|
-
|
|
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>
|
|
75
|
-
<span class='recourse-scheme-dark'><i class='bi bi-sun-fill'></i>
|
|
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
|
-
<
|
|
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-
|
|
240
|
-
<
|
|
241
|
-
<
|
|
242
|
-
|
|
243
|
-
|
|
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',
|
|
28
|
+
data: { thread_target: 'field', turbo_permanent: '',
|
|
29
|
+
**houseaccount_chat_placeholder_data(hints), },
|
|
29
30
|
}
|
|
30
31
|
end
|
|
31
32
|
|
data/lib/houseaccount/version.rb
CHANGED