@aparte/core 0.16.8 → 0.16.10

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 (42) hide show
  1. package/dist/client/aparte-client.d.ts +57 -2
  2. package/dist/client/aparte-client.d.ts.map +1 -1
  3. package/dist/client/lifecycle-events.d.ts +8 -1
  4. package/dist/client/lifecycle-events.d.ts.map +1 -1
  5. package/dist/client/stream-adapter.d.ts +8 -0
  6. package/dist/client/stream-adapter.d.ts.map +1 -1
  7. package/dist/components/bubble/aparte-chat-bubble.d.ts +6 -0
  8. package/dist/components/bubble/aparte-chat-bubble.d.ts.map +1 -1
  9. package/dist/components/composer/aparte-composer-attachments.d.ts.map +1 -1
  10. package/dist/components/composer/aparte-composer-input.d.ts +1 -1
  11. package/dist/components/composer/aparte-composer.d.ts.map +1 -1
  12. package/dist/components/conversation-list/aparte-conversation-list.d.ts +5 -0
  13. package/dist/components/conversation-list/aparte-conversation-list.d.ts.map +1 -1
  14. package/dist/components/scroll-rail/aparte-scroll-rail.d.ts +91 -10
  15. package/dist/components/scroll-rail/aparte-scroll-rail.d.ts.map +1 -1
  16. package/dist/components/status/aparte-chat-status.d.ts +41 -3
  17. package/dist/components/status/aparte-chat-status.d.ts.map +1 -1
  18. package/dist/components/viewport/aparte-chat-viewport.d.ts +8 -1
  19. package/dist/components/viewport/aparte-chat-viewport.d.ts.map +1 -1
  20. package/dist/conversations/conversation-manager.d.ts +29 -0
  21. package/dist/conversations/conversation-manager.d.ts.map +1 -1
  22. package/dist/conversations/index.d.ts +1 -1
  23. package/dist/conversations/index.d.ts.map +1 -1
  24. package/dist/custom-elements.json +10916 -10397
  25. package/dist/{dialog-triggers-D8wNICrT.js → dialog-triggers-cYGTlfZf.js} +128 -30
  26. package/dist/{dialog-triggers-D8wNICrT.js.map → dialog-triggers-cYGTlfZf.js.map} +1 -1
  27. package/dist/elicitation/panel.d.ts.map +1 -1
  28. package/dist/index.css +162 -40
  29. package/dist/index.d.ts +1 -1
  30. package/dist/index.d.ts.map +1 -1
  31. package/dist/index.js +447 -94
  32. package/dist/index.js.map +1 -1
  33. package/dist/index.node.d.ts +1 -1
  34. package/dist/index.node.d.ts.map +1 -1
  35. package/dist/index.node.js +1 -1
  36. package/dist/index.node.js.map +1 -1
  37. package/dist/interop/element-props.d.ts.map +1 -1
  38. package/dist/primitives/select/aparte-select.d.ts +25 -3
  39. package/dist/primitives/select/aparte-select.d.ts.map +1 -1
  40. package/dist/types/events.d.ts +4 -2
  41. package/dist/types/events.d.ts.map +1 -1
  42. package/package.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"panel.d.ts","sourceRoot":"","sources":["../../src/elicitation/panel.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACR,uBAAuB,EAK1B,MAAM,YAAY,CAAC;AAWpB,MAAM,WAAW,qBAAqB;IAClC,QAAQ,CAAC,EAAE,EAAE,WAAW,CAAC;IACzB;;;;;;;;;;;;;;;OAeG;IACH,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC;IAC9B,gEAAgE;IAChE,UAAU,IAAI,OAAO,CAAC;IACtB,yDAAyD;IACzD,UAAU,IAAI,OAAO,CAAC;IACtB,kDAAkD;IAClD,KAAK,IAAI,IAAI,CAAC;IACd;;;;;;;;;;;;;;;;;;OAkBG;IACH,IAAI,IAAI,QAAQ,GAAG,MAAM,CAAC;IAC1B,wEAAwE;IACxE,UAAU,IAAI,OAAO,CAAC;IACtB,mGAAmG;IACnG,OAAO,IAAI,IAAI,CAAC;IAChB;;;;;;;;;;;;OAYG;IACH,QAAQ,CAAC,EAAE,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,GAAG,IAAI,CAAC;IAC/C;;;;;;;;;;;OAWG;IACH,OAAO,IAAI,IAAI,CAAC;CACnB;AAyCD;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,OAAO,GAAG,WAAW,CAalG;AA6ZD,wBAAgB,qBAAqB,CACjC,OAAO,EAAE,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC,EAChC,MAAM,EAAE,uBAAuB,EAC/B,QAAQ,EAAE,MAAM,IAAI,GACrB,qBAAqB,CAevB"}
1
+ {"version":3,"file":"panel.d.ts","sourceRoot":"","sources":["../../src/elicitation/panel.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACR,uBAAuB,EAK1B,MAAM,YAAY,CAAC;AAWpB,MAAM,WAAW,qBAAqB;IAClC,QAAQ,CAAC,EAAE,EAAE,WAAW,CAAC;IACzB;;;;;;;;;;;;;;;OAeG;IACH,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC;IAC9B,gEAAgE;IAChE,UAAU,IAAI,OAAO,CAAC;IACtB,yDAAyD;IACzD,UAAU,IAAI,OAAO,CAAC;IACtB,kDAAkD;IAClD,KAAK,IAAI,IAAI,CAAC;IACd;;;;;;;;;;;;;;;;;;OAkBG;IACH,IAAI,IAAI,QAAQ,GAAG,MAAM,CAAC;IAC1B,wEAAwE;IACxE,UAAU,IAAI,OAAO,CAAC;IACtB,mGAAmG;IACnG,OAAO,IAAI,IAAI,CAAC;IAChB;;;;;;;;;;;;OAYG;IACH,QAAQ,CAAC,EAAE,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,GAAG,IAAI,CAAC;IAC/C;;;;;;;;;;;OAWG;IACH,OAAO,IAAI,IAAI,CAAC;CACnB;AAyCD;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,OAAO,GAAG,WAAW,CAalG;AA8aD,wBAAgB,qBAAqB,CACjC,OAAO,EAAE,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC,EAChC,MAAM,EAAE,uBAAuB,EAC/B,QAAQ,EAAE,MAAM,IAAI,GACrB,qBAAqB,CAevB"}
package/dist/index.css CHANGED
@@ -326,8 +326,15 @@
326
326
  and a 14px mark are a minimap's measures, not spacing steps. */
327
327
  --aparte-scroll-rail-tick-size: 14px;
328
328
  --aparte-scroll-rail-tick-thickness: 2px;
329
-
330
- --aparte-scroll-rail-gap: 8px;
329
+ /* What a tick is to a POINTER, as opposed to what it is to the eye: WCAG 2.5.8's
330
+ 24px minimum. The drawn line stays 14×2 — this sizes the pseudo-element around it,
331
+ and the gap below derives from it so the pitch rises with the zone. The rail is
332
+ `display: none` under `(pointer: coarse)`, so 2.5.8's 24px is the bar here and not
333
+ 2.5.5's 44px. */
334
+ --aparte-scroll-rail-hit-size: 24px;
335
+ /* The share of the transcript's height the rail may take: a list of ticks, not a
336
+ minimap, so it is the height of its list up to this, centred, and scrolls past it. */
337
+ --aparte-scroll-rail-share: .6;
331
338
 
332
339
  /* Context gauge, ring variant — a diameter, and a stroke in the ring's own 36-unit
333
340
  box. Literals like the rail's: a 22px ring is a toolbar's measure, not a spacing step. */
@@ -721,7 +728,12 @@ aparte-chat {
721
728
  --aparte-viewport-padding: var(--aparte-space-8);
722
729
  --aparte-scrollbar-thumb: var(--aparte-neutral);
723
730
  --aparte-input-padding-x: var(--aparte-space-6);
724
- --aparte-input-padding-y: var(--aparte-space-5);
731
+ /* The editor at rest is the control height: half of what the control size leaves once
732
+ one line of its own text is taken out. It used to be a flat 10px, which made the editor
733
+ 44px beside 36px buttons and, the row aligning at the end, sat the send button 4px
734
+ below the editor's centre. Derived from the editor's own line (1lh), so a coarse
735
+ pointer's 44 and a changed font both keep the editor and its buttons on one centre. */
736
+ --aparte-input-padding-y: calc((var(--aparte-composer-control-size) - 1lh) / 2);
725
737
  --aparte-conv-list-gap: var(--aparte-space-1);
726
738
  --aparte-conv-item-gap: var(--aparte-space-3);
727
739
  --aparte-elic-option-radius: var(--aparte-radius-md);
@@ -841,8 +853,14 @@ aparte-chat {
841
853
  --aparte-track: color-mix(in srgb, var(--aparte-text) 8%, var(--aparte-bg));
842
854
  --aparte-skeleton-base: var(--aparte-track);
843
855
  /* The rail is as wide as its widest tick (the current one is 1.6× the resting size);
844
- it used to be a 20px literal clipping a 22.4px tick. */
845
- --aparte-scroll-rail-width: calc(var(--aparte-scroll-rail-tick-size) * 1.6);
856
+ it used to be a 20px literal clipping a 22.4px tick. The floor is one tick's
857
+ pressable zone: the rail clips, so a column narrower than the zone would cut the
858
+ target back below 24px on the very edge a reader aims at. */
859
+ --aparte-scroll-rail-width: max(var(--aparte-scroll-rail-hit-size), calc(var(--aparte-scroll-rail-tick-size) * 1.6));
860
+ /* The distance between two ticks IS the zone minus the line: gap + thickness = the
861
+ 24px pitch, so the zones tile edge to edge. Growing the zone alone would have
862
+ overlapped them by 14px and left the z-order to decide every press. */
863
+ --aparte-scroll-rail-gap: calc(var(--aparte-scroll-rail-hit-size) - var(--aparte-scroll-rail-tick-thickness));
846
864
  --aparte-skeleton-shine: var(--aparte-surface-3);
847
865
  /* The line it stands for: as tall as the content type, and a gap that is the rest of
848
866
  the content line, so the text that replaces it lands where it was (T21). It was 12px
@@ -2932,9 +2950,15 @@ aparte-icon {
2932
2950
  --aparte-thumbnail-border: var(--aparte-attachment-chip-border);
2933
2951
  }
2934
2952
 
2935
- /* Only an image tile the app declared it can preview is a button — see
2936
- aparteGlobalConfig.setHostHandlers(). Undeclared, it is a picture, not a control. */
2937
- .aparte-thumb--image[role='button'] {
2953
+ /* Only an image the app declared it can preview is a button — see
2954
+ aparteGlobalConfig.setHostHandlers(). Undeclared, it is a picture, not a control.
2955
+
2956
+ Two selectors because the two strips carry the role in two places, and both are
2957
+ right. The sent-message strip has no ✕, so its TILE is the whole control. The
2958
+ composer's tile wraps the remove button, so the control there is the IMAGE — a
2959
+ button inside a button is what the role on the tile used to make. */
2960
+ .aparte-thumb--image[role='button'],
2961
+ .aparte-thumbnail__image[role='button'] {
2938
2962
  cursor: pointer;
2939
2963
  }
2940
2964
 
@@ -2943,6 +2967,15 @@ aparte-icon {
2943
2967
  outline-offset: var(--aparte-focus-outline-offset);
2944
2968
  }
2945
2969
 
2970
+ /* Inset, unlike the tile's. The image fills the tile edge to edge and the tile is the
2971
+ frame (`overflow: hidden` above), so an outline drawn outward is cropped away — the
2972
+ focus ring would simply not exist. Pulled in by its own width, it lands just inside
2973
+ the border and stays whole. */
2974
+ .aparte-thumbnail__image[role='button']:focus-visible {
2975
+ outline: var(--aparte-focus-outline-width) solid var(--aparte-border-focus);
2976
+ outline-offset: calc(-1 * var(--aparte-focus-outline-width));
2977
+ }
2978
+
2946
2979
  .aparte-thumb--file {
2947
2980
  display: flex;
2948
2981
  align-items: center;
@@ -3507,11 +3540,12 @@ aparte-icon {
3507
3540
  * script the caller owns: a <details open> toggling itself, a positioning library placing
3508
3541
  * a menu next to its trigger. Nothing here reaches for position:fixed on your behalf.
3509
3542
  *
3510
- * <div class="aparte-tabs" role="tablist">
3511
- * <button class="aparte-tabs__tab" role="tab" aria-selected="true">Preview</button>
3512
- * <button class="aparte-tabs__tab" role="tab" aria-selected="false">Code</button>
3543
+ * <div class="aparte-tabs" role="tablist" aria-label="Result view">
3544
+ * <button class="aparte-tabs__tab" role="tab" type="button" id="tabs-a-preview" aria-controls="tabs-a-preview-panel" aria-selected="true" tabindex="0">Preview</button>
3545
+ * <button class="aparte-tabs__tab" role="tab" type="button" id="tabs-a-code" aria-controls="tabs-a-code-panel" aria-selected="false" tabindex="-1">Code</button>
3513
3546
  * </div>
3514
- * <div class="aparte-tabs__panel" role="tabpanel">The panel for the selected tab.</div>
3547
+ * <div class="aparte-tabs__panel" role="tabpanel" id="tabs-a-preview-panel" aria-labelledby="tabs-a-preview">The panel for the selected tab.</div>
3548
+ * <div class="aparte-tabs__panel" role="tabpanel" id="tabs-a-code-panel" aria-labelledby="tabs-a-code" hidden>The panel the other tab opens.</div>
3515
3549
  *
3516
3550
  * <div class="aparte-accordion">
3517
3551
  * <details class="aparte-accordion__item" open>
@@ -3558,17 +3592,29 @@ aparte-icon {
3558
3592
  the current tab, which reads as a control rather than as navigation. Neither moves
3559
3593
  anything: `aria-selected` is what says which tab is current, and the app owns it.
3560
3594
 
3561
- <div class="aparte-tabs aparte-tabs--underline" role="tablist">
3562
- <button class="aparte-tabs__tab" role="tab" aria-selected="true">Preview</button>
3563
- <button class="aparte-tabs__tab" role="tab" aria-selected="false">Code</button>
3595
+ The markup below is the whole contract of the role, and all of it is yours to write:
3596
+ ONE tab stop for the list (`tabindex="0"` on the selected tab, `-1` on the rest),
3597
+ `aria-controls` from each tab to its `role="tabpanel"`, and `aria-labelledby` back.
3598
+ The app also owns the ArrowLeft/ArrowRight/Home/End handler that moves the selection
3599
+ and the stop together — `@aparte/plugin-artifacts`' card has a working one to copy.
3600
+ A tablist without those is louder than plain buttons and says less: every tab a tab
3601
+ stop, and none of them naming what it opens.
3602
+
3603
+ <div class="aparte-tabs aparte-tabs--underline" role="tablist" aria-label="Result view">
3604
+ <button class="aparte-tabs__tab" role="tab" type="button" id="tabs-u-preview" aria-controls="tabs-u-preview-panel" aria-selected="true" tabindex="0">Preview</button>
3605
+ <button class="aparte-tabs__tab" role="tab" type="button" id="tabs-u-code" aria-controls="tabs-u-code-panel" aria-selected="false" tabindex="-1">Code</button>
3564
3606
  </div>
3565
- <div class="aparte-tabs__panel" role="tabpanel">What the selected tab shows.</div>
3607
+ <div class="aparte-tabs__panel" role="tabpanel" id="tabs-u-preview-panel" aria-labelledby="tabs-u-preview">What the selected tab shows.</div>
3608
+ <div class="aparte-tabs__panel" role="tabpanel" id="tabs-u-code-panel" aria-labelledby="tabs-u-code" hidden>What the other tab shows.</div>
3566
3609
 
3567
- <div class="aparte-tabs aparte-tabs--segmented" role="tablist">
3568
- <button class="aparte-tabs__tab" role="tab" aria-selected="true">Light</button>
3569
- <button class="aparte-tabs__tab" role="tab" aria-selected="false">Dark</button>
3570
- <button class="aparte-tabs__tab" role="tab" aria-selected="false">System</button>
3610
+ <div class="aparte-tabs aparte-tabs--segmented" role="tablist" aria-label="Theme">
3611
+ <button class="aparte-tabs__tab" role="tab" type="button" id="tabs-s-light" aria-controls="tabs-s-light-panel" aria-selected="true" tabindex="0">Light</button>
3612
+ <button class="aparte-tabs__tab" role="tab" type="button" id="tabs-s-dark" aria-controls="tabs-s-dark-panel" aria-selected="false" tabindex="-1">Dark</button>
3613
+ <button class="aparte-tabs__tab" role="tab" type="button" id="tabs-s-system" aria-controls="tabs-s-system-panel" aria-selected="false" tabindex="-1">System</button>
3571
3614
  </div>
3615
+ <div class="aparte-tabs__panel" role="tabpanel" id="tabs-s-light-panel" aria-labelledby="tabs-s-light">The light theme's settings.</div>
3616
+ <div class="aparte-tabs__panel" role="tabpanel" id="tabs-s-dark-panel" aria-labelledby="tabs-s-dark" hidden>The dark theme's settings.</div>
3617
+ <div class="aparte-tabs__panel" role="tabpanel" id="tabs-s-system-panel" aria-labelledby="tabs-s-system" hidden>Whatever the system asks for.</div>
3572
3618
  ========================================= */
3573
3619
 
3574
3620
  .aparte-tabs {
@@ -4792,7 +4838,10 @@ aparte-progress-spinner:not([value]) svg {
4792
4838
 
4793
4839
  /* Both host shapes core recognises get the same layout: the vanilla
4794
4840
  <aparte-chat> element AND a framework wrapper's `[data-aparte-chat]` root
4795
- (React/Vue/Svelte/Angular render `<div data-aparte-chat>`). `[data-aparte-chat]`
4841
+ (React/Vue/Svelte render `<div data-aparte-chat class="aparte-chat-container">`;
4842
+ Angular's host IS `<aparte-chat>` and its shell is the inner
4843
+ `.aparte-chat-container`, which carries no attribute here — the overlay rules
4844
+ below list that third shape for exactly that reason). `[data-aparte-chat]`
4796
4845
  is the SAME selector core uses to resolve the host (see aparte-client /
4797
4846
  aparte-chat-bubble), so one rule covers both — no wrapper-specific class. */
4798
4847
  aparte-chat,
@@ -4870,12 +4919,14 @@ aparte-chat[overlay-composer] > aparte-chat-viewport,
4870
4919
  z-index: 0;
4871
4920
  }
4872
4921
 
4873
- /* The bottom stack paints over the absolutely positioned viewport. `:not()` is
4874
- exact here: the only child that is not the viewport IS the stack (the scroll
4875
- button lives inside the viewport). */
4876
- aparte-chat[overlay-composer] > :not(aparte-chat-viewport),
4877
- [data-aparte-chat][overlay-composer] > :not(aparte-chat-viewport),
4878
- .aparte-chat-container[overlay-composer] > :not(aparte-chat-viewport) {
4922
+ /* The bottom stack paints over the absolutely positioned viewport. The `:not()` names
4923
+ what is NOT the stack: the viewport (the scroll button lives inside it), and the
4924
+ scroll rail, which is a child of the shell too. `position: relative` here beat the
4925
+ rail's own `absolute`, so in overlay mode the floating rail dropped into the flow
4926
+ and pushed the composer down — the one child that floats by design has to be named. */
4927
+ aparte-chat[overlay-composer] > :not(aparte-chat-viewport, aparte-scroll-rail),
4928
+ [data-aparte-chat][overlay-composer] > :not(aparte-chat-viewport, aparte-scroll-rail),
4929
+ .aparte-chat-container[overlay-composer] > :not(aparte-chat-viewport, aparte-scroll-rail) {
4879
4930
  position: relative;
4880
4931
  z-index: var(--aparte-z-raised);
4881
4932
  }
@@ -7217,26 +7268,76 @@ aparte-context[data-level="danger"] .aparte-context__value {
7217
7268
  * One of the sheets src/index.ts imports in cascade order; check:derived-vars reads
7218
7269
  * them concatenated in that same order, the way a browser does.
7219
7270
  *
7220
- * The rail floats on the transcript's end edge, vertically centred, as a child of the
7221
- * chat host. `:has()` gives the host its containing block only while a rail is inside
7222
- * it — a bare `position: relative` on every chat would have moved any absolutely
7223
- * positioned child a consumer already placed there.
7271
+ * The rail floats on the transcript's end edge as a child of the chat host. `:has()`
7272
+ * gives the host its containing block only while a rail is inside it — a bare
7273
+ * `position: relative` on every chat would have moved any absolutely positioned child
7274
+ * a consumer already placed there.
7275
+ *
7276
+ * The three shell shapes shell.css already lays out, because an absolute element lands
7277
+ * in the nearest POSITIONED ancestor and a shape missing from this list is a rail that
7278
+ * escaped to the page: the vanilla `<aparte-chat>`, the `[data-aparte-chat]` div
7279
+ * React/Vue/Svelte render, and Angular's inner `.aparte-chat-container` (its host IS
7280
+ * `<aparte-chat>`, but the rail is a child of that inner div). The first two shapes are
7281
+ * both true of the wrapper div, which carries the class and the attribute — listing all
7282
+ * three costs one selector and closes the Angular hole.
7224
7283
  */
7225
7284
  aparte-chat:has(> aparte-scroll-rail),
7226
- [data-aparte-chat]:has(> aparte-scroll-rail) {
7285
+ [data-aparte-chat]:has(> aparte-scroll-rail),
7286
+ .aparte-chat-container:has(> aparte-scroll-rail) {
7227
7287
  position: relative;
7228
7288
  }
7229
7289
 
7290
+ /* Where the rail sits is measured, not assumed. The element publishes three lengths on
7291
+ itself (aparte-scroll-rail.ts, `_layout`): `--aparte-scroll-rail-bar`, the width of
7292
+ the transcript's scrollbar when it is a classic one — 0 for an overlay bar — so the
7293
+ ticks never sit on the bar under Windows or Linux Chrome; and the two block insets,
7294
+ the transcript's distance from the host's top and bottom edges, so the rail centres
7295
+ on the messages and not on the composer under them. Without a measurement (jsdom, a
7296
+ rail with no transcript yet) the fallbacks centre it on the host, where it used to be.
7297
+
7298
+ It is a LIST of ticks, not a minimap: it takes the height of its list, capped at a
7299
+ share of the transcript (`--aparte-scroll-rail-share`, .6), and sits centred on the
7300
+ transcript's span — its top is the middle of that span, pulled back by half its own
7301
+ height. Measured on the market: every per-turn rail that ships as a list caps itself
7302
+ (LobeChat at 50vh), and every full-height strip is a proportional minimap with a
7303
+ viewport window, a different component; a list stretched to the full transcript read
7304
+ as the second while behaving as the first.
7305
+
7306
+ The block padding is the room the END zones need, and it is not decoration.
7307
+ The rail clips the list at its padding box, and the list has no padding of its own,
7308
+ so with no padding here the first tick's top edge sits exactly on the clip line. A
7309
+ zone grows symmetrically — half of `hit − thickness` above and below the line — so
7310
+ the first tick would lose its upper half and the last tick its lower half, to paint
7311
+ AND to hit-testing: 13px of the 24px, on the two ticks a reader aims at most ("jump
7312
+ to the first message", "jump to the latest"). Padding by exactly that half puts the
7313
+ clip line outside every zone instead of through the two end ones. `box-sizing` keeps
7314
+ `max-height` measuring the same box it measured before.
7315
+
7316
+ When more ticks exist than 24px targets fit in the cap, the element tightens the
7317
+ pitch by setting `--aparte-scroll-rail-hit-size` on itself (never under 6px), and
7318
+ gap, padding and zone follow it here as they would a consumer's value. Past that
7319
+ floor the list still overflows, and the rail scrolls — the element keeps the current
7320
+ tick in its window, the arrows walk every tick, a wheel over the rail slides it —
7321
+ with no bar of its own: a 24px column showing a scrollbar would be all bar. */
7230
7322
  aparte-scroll-rail {
7231
7323
  position: absolute;
7232
- inset-inline-end: var(--aparte-space-2);
7233
- top: 50%;
7324
+ inset-inline-end: calc(var(--aparte-space-2) + var(--aparte-scroll-rail-bar, 0px));
7325
+ top: calc(var(--aparte-scroll-rail-block-start, 0px) + (100% - var(--aparte-scroll-rail-block-start, 0px) - var(--aparte-scroll-rail-block-end, 0px)) / 2);
7234
7326
  transform: translateY(-50%);
7235
7327
  z-index: var(--aparte-z-floating);
7236
- display: block;
7328
+ display: flex;
7329
+ flex-direction: column;
7330
+ box-sizing: border-box;
7237
7331
  width: var(--aparte-scroll-rail-width);
7238
- max-height: calc(100% - 2 * var(--aparte-space-8));
7239
- overflow: hidden;
7332
+ padding-block: calc((var(--aparte-scroll-rail-hit-size) - var(--aparte-scroll-rail-tick-thickness)) / 2);
7333
+ max-height: calc((100% - var(--aparte-scroll-rail-block-start, 0px) - var(--aparte-scroll-rail-block-end, 0px)) * var(--aparte-scroll-rail-share));
7334
+ overflow-x: hidden;
7335
+ overflow-y: auto;
7336
+ scrollbar-width: none;
7337
+ }
7338
+
7339
+ aparte-scroll-rail::-webkit-scrollbar {
7340
+ display: none;
7240
7341
  }
7241
7342
 
7242
7343
  aparte-scroll-rail[hidden],
@@ -7251,10 +7352,11 @@ aparte-scroll-rail[data-empty] {
7251
7352
  display: flex;
7252
7353
  flex-direction: column;
7253
7354
  align-items: flex-end;
7355
+ flex-shrink: 0;
7254
7356
  gap: var(--aparte-scroll-rail-gap);
7255
7357
  }
7256
7358
 
7257
- /* A tick is a real button, drawn as a line. The hit area is the gap around it, drawn
7359
+ /* A tick is a real button, drawn as a line. The hit area is the zone around it, drawn
7258
7360
  by the pseudo-element so the line itself can stay two pixels. */
7259
7361
  .aparte-scroll-rail__tick {
7260
7362
  appearance: none;
@@ -7275,10 +7377,23 @@ aparte-scroll-rail[data-empty] {
7275
7377
  background var(--aparte-duration-fast) var(--aparte-ease);
7276
7378
  }
7277
7379
 
7380
+ /* The pressable zone: 24px square around a 14×2 line (WCAG 2.5.8). It used to be 22×10
7381
+ — half the 8px gap in the block axis, one spacing step in the inline one — and no
7382
+ spacing exemption covered it, because at a 10px pitch a neighbour's 24px circle
7383
+ overlaps this one's.
7384
+ Block: grow symmetrically to the hit size. The gap is `hit − thickness`, so the pitch
7385
+ is exactly the hit size and two zones meet without overlapping — and the rail pads its
7386
+ block axis by the same half-growth, so the clip does not eat the first and last zone.
7387
+ Inline: grow INWARD only. The rail clips and ticks are end-aligned, so a centred zone
7388
+ would hang past the end edge and come back cut to 19px; anchored to the tick's end
7389
+ edge it stays whole, and the rail's width carries the hit size as its floor so the
7390
+ column has room for it. */
7278
7391
  .aparte-scroll-rail__tick::before {
7279
7392
  content: "";
7280
7393
  position: absolute;
7281
- inset: calc(-1 * var(--aparte-scroll-rail-gap) / 2) calc(-1 * var(--aparte-space-2));
7394
+ inset-block: calc((var(--aparte-scroll-rail-tick-thickness) - var(--aparte-scroll-rail-hit-size)) / 2);
7395
+ inset-inline-end: 0;
7396
+ inset-inline-start: calc(var(--aparte-scroll-rail-tick-size) - var(--aparte-scroll-rail-hit-size));
7282
7397
  }
7283
7398
 
7284
7399
  .aparte-scroll-rail__tick:hover {
@@ -8240,9 +8355,16 @@ aparte-split[disabled] > .aparte-split__handle:hover {
8240
8355
  opacity: 1;
8241
8356
  }
8242
8357
 
8243
- /* Nor the ✕ on a pending attachment, which is the only way to remove one. */
8358
+ /* Nor the ✕ on a pending attachment, which is the only way to remove one — and
8359
+ seeing it is no use at 18px, under the 24 of WCAG 2.2 SC 2.5.8. 24 is not a new
8360
+ number: it is the box `aparte-btn--sm` already draws, so this is the component
8361
+ giving the recipe back its own size on touch rather than out-specifying it.
8362
+ Not `--aparte-touch-target-size`: 44px inside a 72px tile would swallow the
8363
+ picture, and full parity with the neighbouring controls needs the tile to grow
8364
+ with it — a second decision, not this floor. */
8244
8365
  .aparte-thumb__remove {
8245
8366
  opacity: 1;
8367
+ --aparte-thumb-remove-size: var(--aparte-btn-size-sm);
8246
8368
  }
8247
8369
 
8248
8370
  /* Hover cannot reveal the row's ⋯ on touch — keep it visible and tappable. */
package/dist/index.d.ts CHANGED
@@ -84,7 +84,7 @@ export { AparteConversationList } from './components/index.js';
84
84
  export type { AparteConversationListItem, AparteConversationSelectDetail, AparteConversationDeleteDetail, AparteConversationArchiveDetail, AparteConversationPinDetail, AparteConversationRenameDetail } from './components/index.js';
85
85
  export type { AparteConversation, AparteConversationMeta, AparteStorageAdapter, AparteAttachmentRow, } from './conversations/index.js';
86
86
  export { APARTE_CONVERSATION_SCHEMA_VERSION } from './conversations/index.js';
87
- export { AparteConversationManager, type ConversationManagerOptions } from './conversations/index.js';
87
+ export { AparteConversationManager, type ConversationManagerOptions, type AparteConversationTitleProvider, } from './conversations/index.js';
88
88
  export { AparteConversationController, type AparteChatBinding, type AparteConversationControllerOptions, } from './conversations/index.js';
89
89
  export { AparteChatHost, type AparteChatHostBinding, type AparteChatHostOptions, } from './host/index.js';
90
90
  export { AparteStreamParser, parseMarkdownToSegments } from './parsers/index.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,oBAAoB,CAAC;AAC5B,OAAO,mBAAmB,CAAC;AAC3B,OAAO,qBAAqB,CAAC;AAC7B,OAAO,oBAAoB,CAAC;AAC5B,OAAO,6BAA6B,CAAC;AACrC,OAAO,2BAA2B,CAAC;AACnC,OAAO,4BAA4B,CAAC;AACpC,OAAO,0BAA0B,CAAC;AAClC,OAAO,gCAAgC,CAAC;AACxC,OAAO,8BAA8B,CAAC;AACtC,OAAO,+BAA+B,CAAC;AACvC,OAAO,+BAA+B,CAAC;AACvC,OAAO,8BAA8B,CAAC;AACtC,OAAO,4BAA4B,CAAC;AACpC,OAAO,2BAA2B,CAAC;AACnC,OAAO,0BAA0B,CAAC;AAClC,OAAO,2BAA2B,CAAC;AACnC,OAAO,2BAA2B,CAAC;AACnC,OAAO,gCAAgC,CAAC;AACxC,OAAO,2BAA2B,CAAC;AACnC,OAAO,8BAA8B,CAAC;AACtC,OAAO,6BAA6B,CAAC;AACrC,OAAO,8BAA8B,CAAC;AACtC,OAAO,gCAAgC,CAAC;AACxC,OAAO,0CAA0C,CAAC;AAClD,OAAO,+BAA+B,CAAC;AACvC,OAAO,gCAAgC,CAAC;AACxC,OAAO,kCAAkC,CAAC;AAC1C,OAAO,+BAA+B,CAAC;AACvC,OAAO,2BAA2B,CAAC;AACnC,OAAO,gCAAgC,CAAC;AACxC,OAAO,4BAA4B,CAAC;AACpC,OAAO,2BAA2B,CAAC;AACnC,OAAO,qCAAqC,CAAC;AAC7C,OAAO,sCAAsC,CAAC;AAC9C,OAAO,qCAAqC,CAAC;AAC7C,OAAO,iCAAiC,CAAC;AACzC,OAAO,qCAAqC,CAAC;AAC7C,OAAO,4BAA4B,CAAC;AACpC,OAAO,+BAA+B,CAAC;AACvC,OAAO,8BAA8B,CAAC;AACtC,OAAO,0BAA0B,CAAC;AAClC,OAAO,oBAAoB,CAAC;AAC5B,OAAO,yBAAyB,CAAC;AAGjC,OAAO,sBAAsB,CAAC;AAG9B,OAAO,wBAAwB,CAAC;AAGhC,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,KAAK,wBAAwB,EAAE,KAAK,+BAA+B,EAAE,qBAAqB,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAG3L,YAAY,EACR,gBAAgB,EAChB,aAAa,EACb,mBAAmB,EACnB,iBAAiB,EACjB,sBAAsB,EACtB,qBAAqB,EACrB,oBAAoB,EACpB,iBAAiB,EACjB,oBAAoB,EACpB,YAAY,EACZ,gBAAgB,EAChB,mBAAmB,EACnB,yBAAyB,EACzB,sBAAsB,EACtB,aAAa,EACb,iBAAiB,EACjB,iBAAiB,EACjB,qBAAqB,EACrB,iBAAiB,EACjB,qBAAqB,EACrB,mBAAmB,EACnB,qBAAqB,EASrB,iBAAiB,EACjB,qBAAqB,EACrB,mBAAmB,EACnB,kBAAkB,EAIlB,8BAA8B,EAE9B,gBAAgB,EAChB,aAAa,EACb,2BAA2B,EAC3B,wBAAwB,EACxB,4BAA4B,EAC5B,iBAAiB,EACjB,WAAW,EACX,iBAAiB,EACjB,4BAA4B,EAC5B,mCAAmC,EACnC,4BAA4B,EAC5B,6BAA6B,EAC7B,6BAA6B,EAC7B,+BAA+B,EAC/B,sBAAsB,EACtB,wBAAwB,EACxB,4BAA4B,EAC5B,6BAA6B,EAC7B,6BAA6B,EAC7B,kCAAkC,EAClC,0BAA0B,EAC1B,4BAA4B,EAC5B,iBAAiB,EACjB,+BAA+B,EAC/B,4BAA4B,EAC5B,sBAAsB,EACtB,qBAAqB,EACrB,yBAAyB,EACzB,uBAAuB,EAEvB,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,EACjB,iBAAiB,EACjB,cAAc,EACd,eAAe,EACf,cAAc,EACd,iBAAiB,EACjB,oBAAoB,EACpB,WAAW,EAEX,UAAU,EACV,cAAc,EACd,oBAAoB,EACpB,oBAAoB,EACpB,gBAAgB,EAChB,iBAAiB,EACjB,iBAAiB,EACjB,kBAAkB,EAClB,+BAA+B,EAE/B,uBAAuB,EAEvB,uBAAuB,EACvB,oBAAoB,EACpB,eAAe,EACf,mBAAmB,EACnB,kBAAkB,EAClB,oBAAoB,EACpB,4BAA4B,EAC5B,0BAA0B,EAC1B,0BAA0B,EAC1B,wBAAwB,EACxB,6BAA6B,EAC7B,8BAA8B,EAC9B,qCAAqC,EACrC,+BAA+B,EAC/B,gCAAgC,EAChC,sBAAsB,EACtB,sBAAsB,EACtB,wBAAwB,EACxB,+BAA+B,GAClC,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAG/E,OAAO,EACH,uBAAuB,EACvB,yBAAyB,EACzB,kBAAkB,EAClB,qBAAqB,EACrB,wBAAwB,EASxB,2BAA2B,EAC3B,uBAAuB,EACvB,eAAe,EAClB,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AACpF,YAAY,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAG3D,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,yBAAyB,EAAE,2BAA2B,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC3N,YAAY,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,mBAAmB,EAAE,+BAA+B,EAAE,uBAAuB,EAAE,4BAA4B,EAAE,MAAM,uBAAuB,CAAC;AAC1M,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,YAAY,EAAE,gBAAgB,EAAE,2BAA2B,EAAE,MAAM,uBAAuB,CAAC;AAC3F,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,YAAY,EAAE,kBAAkB,EAAE,iCAAiC,EAAE,MAAM,uBAAuB,CAAC;AACnG,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,YAAY,EAAE,0BAA0B,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC/F,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,YAAY,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AACvE,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,YAAY,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAGrE,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,YAAY,EAAE,0BAA0B,EAAE,8BAA8B,EAAE,8BAA8B,EAAE,+BAA+B,EAAE,2BAA2B,EAAE,8BAA8B,EAAE,MAAM,uBAAuB,CAAC;AAGtO,YAAY,EACR,kBAAkB,EAClB,sBAAsB,EACtB,oBAAoB,EACpB,mBAAmB,GACtB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,kCAAkC,EAAE,MAAM,0BAA0B,CAAC;AAC9E,OAAO,EACH,yBAAyB,EACzB,KAAK,0BAA0B,EAC/B,KAAK,+BAA+B,GACvC,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACH,4BAA4B,EAC5B,KAAK,iBAAiB,EACtB,KAAK,mCAAmC,GAC3C,MAAM,0BAA0B,CAAC;AAIlC,OAAO,EACH,cAAc,EACd,KAAK,qBAAqB,EAC1B,KAAK,qBAAqB,GAC7B,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AACjF,YAAY,EAAE,yBAAyB,EAAE,2BAA2B,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxI,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAG5D,OAAO,EAAE,kBAAkB,EAAE,YAAY,EAAE,6BAA6B,EAAE,4BAA4B,EAAE,MAAM,mBAAmB,CAAC;AAClI,YAAY,EAAE,6BAA6B,EAAE,MAAM,mBAAmB,CAAC;AACvE,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC9H,OAAO,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAChF,YAAY,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAC3D,YAAY,EAAE,sBAAsB,EAAE,+BAA+B,EAAE,+BAA+B,EAAE,uBAAuB,EAAE,8BAA8B,EAAE,YAAY,EAAE,sBAAsB,EAAE,YAAY,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,cAAc,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,wBAAwB,EAAE,8BAA8B,EAAE,6BAA6B,EAAE,6BAA6B,EAAE,wBAAwB,EAAE,yBAAyB,EAAE,qBAAqB,EAAE,6BAA6B,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAC1lB,OAAO,EAAE,6BAA6B,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAGtH,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAGzD,OAAO,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AACzF,YAAY,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAIpE,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AAG3F,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAO/D,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAK3D,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAKlD,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAGvC,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAYhD,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAIvF,YAAY,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AAClE,YAAY,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AACnE,YAAY,EAAE,mBAAmB,EAAE,0BAA0B,EAAE,MAAM,2BAA2B,CAAC;AAEjG,OAAO,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AAC1F,YAAY,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,0BAA0B,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AAG5L,OAAO,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC/H,YAAY,EAAE,eAAe,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,sBAAsB,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AAGzM,OAAO,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AAC1E,YAAY,EAAE,yBAAyB,EAAE,MAAM,iCAAiC,CAAC;AAGjF,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,2BAA2B,EAAE,MAAM,wBAAwB,CAAC;AAClI,YAAY,EACR,uBAAuB,EACvB,sBAAsB,EACtB,0BAA0B,EAC1B,6BAA6B,EAC7B,4BAA4B,EAC5B,6BAA6B,EAC7B,wBAAwB,EACxB,uBAAuB,EACvB,0BAA0B,EAC1B,oBAAoB,EACpB,oBAAoB,EACpB,kBAAkB,EAClB,qBAAqB,GACxB,MAAM,wBAAwB,CAAC;AAGhC,OAAO,EAAE,iBAAiB,EAAE,MAAM,gDAAgD,CAAC;AA8FnF;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,IAAI,IAAI,CAS5C;AAKD,OAAO,EAAE,yBAAyB,EAAE,MAAM,8BAA8B,CAAC;AACzE,OAAO,EAAE,yBAAyB,EAAE,CAAC"}