dowel-ui 0.29.0 → 0.29.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 (2) hide show
  1. package/dist/registry.json +84 -84
  2. package/package.json +1 -1
@@ -309,7 +309,7 @@
309
309
  "dependencies": [
310
310
  "@base-ui/react",
311
311
  "class-variance-authority",
312
- "dowel-ui@^0.29.0"
312
+ "dowel-ui@^0.29.1"
313
313
  ],
314
314
  "registryDependencies": [],
315
315
  "files": [
@@ -328,7 +328,7 @@
328
328
  "description": "The shape everyone recognises: weeks as columns, weekdays as rows, time running left to right, and a value carried by how dark a square is. Two products of the line asked for it by name before it existed.",
329
329
  "dependencies": [
330
330
  "class-variance-authority",
331
- "dowel-ui@^0.29.0"
331
+ "dowel-ui@^0.29.1"
332
332
  ],
333
333
  "registryDependencies": [
334
334
  "https://lacodda.github.io/dowel/r/activity-weeks.json"
@@ -348,7 +348,7 @@
348
348
  "title": "ActivityLegend",
349
349
  "description": "Separate from the grid because a caller showing three grids on one screen wants one legend, and because the words in it are the product's.",
350
350
  "dependencies": [
351
- "dowel-ui@^0.29.0"
351
+ "dowel-ui@^0.29.1"
352
352
  ],
353
353
  "registryDependencies": [
354
354
  "https://lacodda.github.io/dowel/r/activity-heatmap.json",
@@ -386,7 +386,7 @@
386
386
  "description": "A message that stays on the screen, in the flow of the page, about the thing next to it: this field could not be saved, this profile has no axes yet, this export is out of date.",
387
387
  "dependencies": [
388
388
  "class-variance-authority",
389
- "dowel-ui@^0.29.0"
389
+ "dowel-ui@^0.29.1"
390
390
  ],
391
391
  "registryDependencies": [],
392
392
  "files": [
@@ -405,7 +405,7 @@
405
405
  "description": "The frame a product draws once and then never thinks about: a bar across the top, a rail down the left, and the screen in the corner they leave. It is three boxes and a grid, which is exactly why every product wrote its own - and why every one of them got the same two things wrong before getting them right.",
406
406
  "dependencies": [
407
407
  "class-variance-authority",
408
- "dowel-ui@^0.29.0"
408
+ "dowel-ui@^0.29.1"
409
409
  ],
410
410
  "registryDependencies": [],
411
411
  "files": [
@@ -424,7 +424,7 @@
424
424
  "description": "A person, in the space of a word. Every screen that lists people needs one, and the three things that go wrong with it are always the same:\n * - **The picture fails to load** and a broken-image glyph appears where a face was. The fallback is not a nicety; it is the state this component spends most of its life in, because half the people in any list have no picture at all.",
425
425
  "dependencies": [
426
426
  "class-variance-authority",
427
- "dowel-ui@^0.29.0"
427
+ "dowel-ui@^0.29.1"
428
428
  ],
429
429
  "registryDependencies": [],
430
430
  "files": [
@@ -443,7 +443,7 @@
443
443
  "description": "A small piece of state attached to something else: a count, a status, a label. It is not a button and never was - if it can be clicked it is a Chip.",
444
444
  "dependencies": [
445
445
  "class-variance-authority",
446
- "dowel-ui@^0.29.0"
446
+ "dowel-ui@^0.29.1"
447
447
  ],
448
448
  "registryDependencies": [],
449
449
  "files": [
@@ -462,7 +462,7 @@
462
462
  "description": "A strip across the top of the application, about the application: you are offline, this build is a preview, your licence expires on Friday, a new version is ready to install.",
463
463
  "dependencies": [
464
464
  "class-variance-authority",
465
- "dowel-ui@^0.29.0"
465
+ "dowel-ui@^0.29.1"
466
466
  ],
467
467
  "registryDependencies": [],
468
468
  "files": [
@@ -481,7 +481,7 @@
481
481
  "description": "Bars rather than a line, and the distinction is the data's not the drawing's: a line says the value exists between the points, a column says each period is its own sum. Hours worked in a week is a sum - there is no \"Wednesday afternoon\" reading between two weeks - so it is a column.",
482
482
  "dependencies": [
483
483
  "class-variance-authority",
484
- "dowel-ui@^0.29.0"
484
+ "dowel-ui@^0.29.1"
485
485
  ],
486
486
  "registryDependencies": [],
487
487
  "files": [
@@ -500,7 +500,7 @@
500
500
  "description": "Where you are, as a trail rather than as a word. On a list screen the screen's own name is enough; on something opened from it, it is not - \"Works\" says nothing about which work, and the way back to the list is otherwise the browser's back button alone, which a desktop window does not visibly have.",
501
501
  "dependencies": [
502
502
  "@base-ui/react",
503
- "dowel-ui@^0.29.0"
503
+ "dowel-ui@^0.29.1"
504
504
  ],
505
505
  "registryDependencies": [],
506
506
  "files": [
@@ -520,7 +520,7 @@
520
520
  "dependencies": [
521
521
  "@base-ui/react",
522
522
  "class-variance-authority",
523
- "dowel-ui@^0.29.0"
523
+ "dowel-ui@^0.29.1"
524
524
  ],
525
525
  "registryDependencies": [],
526
526
  "files": [
@@ -554,7 +554,7 @@
554
554
  "title": "Calendar",
555
555
  "description": "The sums live next door in `calendar-math`, which has no React in it; this is the grid that draws them and the keyboard that moves around it.",
556
556
  "dependencies": [
557
- "dowel-ui@^0.29.0"
557
+ "dowel-ui@^0.29.1"
558
558
  ],
559
559
  "registryDependencies": [
560
560
  "https://lacodda.github.io/dowel/r/calendar-math.json"
@@ -575,7 +575,7 @@
575
575
  "description": "The interesting part is the words. A checkbox on its own is a nine-pixel target that says nothing; wired to a label it is the whole row, and the row is what a finger and a pointer both aim at. So the label is part of the component rather than something a caller remembers to add - the commonest bug in a hand-rolled checkbox is a `<label>` that is next to the input instead of tied to it, which looks identical and does nothing.",
576
576
  "dependencies": [
577
577
  "@base-ui/react",
578
- "dowel-ui@^0.29.0"
578
+ "dowel-ui@^0.29.1"
579
579
  ],
580
580
  "registryDependencies": [],
581
581
  "files": [
@@ -594,7 +594,7 @@
594
594
  "description": "A badge you can act on: a filter that can be removed, a tag with a count, a selected value in a field. The difference from a Badge is entirely about whether something happens when you click it - and if something does, that part is a real `<button>` with a real label, not a decorative cross.",
595
595
  "dependencies": [
596
596
  "class-variance-authority",
597
- "dowel-ui@^0.29.0"
597
+ "dowel-ui@^0.29.1"
598
598
  ],
599
599
  "registryDependencies": [],
600
600
  "files": [
@@ -613,7 +613,7 @@
613
613
  "description": "The frame around a piece of code is the same everywhere and is written again in every product: the scroll that must not wrap, the gutter of line numbers that must not be selectable, the copy button, the caption saying which file this is, and the marking of the lines the reader was sent here to look at.",
614
614
  "dependencies": [
615
615
  "class-variance-authority",
616
- "dowel-ui@^0.29.0"
616
+ "dowel-ui@^0.29.1"
617
617
  ],
618
618
  "registryDependencies": [
619
619
  "https://lacodda.github.io/dowel/r/copy-button.json"
@@ -633,7 +633,7 @@
633
633
  "title": "ColorField",
634
634
  "description": "Picking a colour for something the product stores: a tag, a project, a calendar. Note what that is *not* - it is not choosing the appearance of the interface. The theme decides that, from one accent, and a field that let a reader repaint the chrome would undo the argument the whole system rests on.",
635
635
  "dependencies": [
636
- "dowel-ui@^0.29.0"
636
+ "dowel-ui@^0.29.1"
637
637
  ],
638
638
  "registryDependencies": [
639
639
  "https://lacodda.github.io/dowel/r/input.json"
@@ -653,7 +653,7 @@
653
653
  "title": "ColumnResizeHandle",
654
654
  "description": "The handle, and the hook that keeps the widths it produces. Pointer events rather than HTML5 drag-and-drop: a desktop shell that takes file drops for itself never lets a `dragstart` reach the page, so the native API is a handle that does nothing there; pointer capture on the handle also keeps the drag alive when the pointer runs ahead of the cell, which at any speed above a crawl it does.",
655
655
  "dependencies": [
656
- "dowel-ui@^0.29.0"
656
+ "dowel-ui@^0.29.1"
657
657
  ],
658
658
  "registryDependencies": [],
659
659
  "files": [
@@ -673,7 +673,7 @@
673
673
  "dependencies": [
674
674
  "@base-ui/react",
675
675
  "class-variance-authority",
676
- "dowel-ui@^0.29.0"
676
+ "dowel-ui@^0.29.1"
677
677
  ],
678
678
  "registryDependencies": [
679
679
  "https://lacodda.github.io/dowel/r/input.json",
@@ -696,7 +696,7 @@
696
696
  "dependencies": [
697
697
  "@base-ui/react",
698
698
  "class-variance-authority",
699
- "dowel-ui@^0.29.0"
699
+ "dowel-ui@^0.29.1"
700
700
  ],
701
701
  "registryDependencies": [
702
702
  "https://lacodda.github.io/dowel/r/combobox.json",
@@ -719,7 +719,7 @@
719
719
  "dependencies": [
720
720
  "@base-ui/react",
721
721
  "class-variance-authority",
722
- "dowel-ui@^0.29.0"
722
+ "dowel-ui@^0.29.1"
723
723
  ],
724
724
  "registryDependencies": [],
725
725
  "files": [
@@ -738,7 +738,7 @@
738
738
  "description": "The same list of actions as Menu, opened the other way round: by right click, or by a long press on a touch screen, over an *area* rather than from a button. So the trigger is not a control - it is the region the menu belongs to, a row, a canvas, a file tile - and it renders a `<div>`.",
739
739
  "dependencies": [
740
740
  "@base-ui/react",
741
- "dowel-ui@^0.29.0"
741
+ "dowel-ui@^0.29.1"
742
742
  ],
743
743
  "registryDependencies": [
744
744
  "https://lacodda.github.io/dowel/r/menu.json"
@@ -758,7 +758,7 @@
758
758
  "title": "CopyButton",
759
759
  "description": "Whatever a product shows in a panel - code, a payload, a log, one side of a comparison - somebody eventually wants to take it away, and the button that lets them is written again every time with the same three things missed.",
760
760
  "dependencies": [
761
- "dowel-ui@^0.29.0"
761
+ "dowel-ui@^0.29.1"
762
762
  ],
763
763
  "registryDependencies": [],
764
764
  "files": [
@@ -776,7 +776,7 @@
776
776
  "title": "Copyable",
777
777
  "description": "Any text that someone will eventually want to copy - an id, a path, a hash, a token - copied with one click. The rule comes from nitid: if a value is worth showing, it is worth being able to take away, and selecting a monospaced id by hand is a small daily tax.",
778
778
  "dependencies": [
779
- "dowel-ui@^0.29.0"
779
+ "dowel-ui@^0.29.1"
780
780
  ],
781
781
  "registryDependencies": [],
782
782
  "files": [
@@ -794,7 +794,7 @@
794
794
  "title": "DatePicker",
795
795
  "description": "The trigger is a button rather than a text input, and that is the decision worth stating. A typable date field has to answer \"what does `03/04/26` mean\" in a locale it cannot be sure of, and it answers wrong for half the world; a button showing the date spelled out has no such question. Where typing genuinely matters - a birth date, forty years back - the calendar is the wrong control anyway and a product should reach for a plain field.",
796
796
  "dependencies": [
797
- "dowel-ui@^0.29.0"
797
+ "dowel-ui@^0.29.1"
798
798
  ],
799
799
  "registryDependencies": [
800
800
  "https://lacodda.github.io/dowel/r/calendar.json",
@@ -817,7 +817,7 @@
817
817
  "title": "DateRangePicker",
818
818
  "description": "The interesting part is the state between them. After the first click there is a start and no end, and that is not an incomplete range to be hidden or a range of one day - it is the normal middle of the interaction, and the calendar has to show it: the first day marked, the days under the pointer shading as the reader moves, the popup staying open. Products that skip it end up with a picker that seems to do nothing until the second click.",
819
819
  "dependencies": [
820
- "dowel-ui@^0.29.0"
820
+ "dowel-ui@^0.29.1"
821
821
  ],
822
822
  "registryDependencies": [
823
823
  "https://lacodda.github.io/dowel/r/calendar.json",
@@ -842,7 +842,7 @@
842
842
  "dependencies": [
843
843
  "@base-ui/react",
844
844
  "class-variance-authority",
845
- "dowel-ui@^0.29.0"
845
+ "dowel-ui@^0.29.1"
846
846
  ],
847
847
  "registryDependencies": [],
848
848
  "files": [
@@ -877,7 +877,7 @@
877
877
  "description": "The question this answers is \"how did this read before, and how does it read now\" - a version against the one before it, a proposal against what is there, a file against what is on disk. Not a code review: there is no staging, no comment, nothing to accept. It is for looking.",
878
878
  "dependencies": [
879
879
  "class-variance-authority",
880
- "dowel-ui@^0.29.0"
880
+ "dowel-ui@^0.29.1"
881
881
  ],
882
882
  "registryDependencies": [
883
883
  "https://lacodda.github.io/dowel/r/copy-button.json",
@@ -899,7 +899,7 @@
899
899
  "description": "The line between one part of a screen and the next. The set already had four of them - in the menu, the select, the context menu and the action bar - and each was written inside the thing it divided, so a screen that wanted a rule between two sections had nothing and reached for a bare `<hr>` or a `div` with a background.",
900
900
  "dependencies": [
901
901
  "class-variance-authority",
902
- "dowel-ui@^0.29.0"
902
+ "dowel-ui@^0.29.1"
903
903
  ],
904
904
  "registryDependencies": [],
905
905
  "files": [
@@ -919,7 +919,7 @@
919
919
  "dependencies": [
920
920
  "@base-ui/react",
921
921
  "class-variance-authority",
922
- "dowel-ui@^0.29.0"
922
+ "dowel-ui@^0.29.1"
923
923
  ],
924
924
  "registryDependencies": [],
925
925
  "files": [
@@ -937,7 +937,7 @@
937
937
  "title": "DurationField",
938
938
  "description": "The alternative is what products keep building: two number boxes labelled \"hours\" and \"minutes\", which means two tab stops, two validations, and a reader who has to divide 90 minutes in their head before typing. Here they write `1h 30m`, or `90m`, or `1.5h`, and it means the same thing.",
939
939
  "dependencies": [
940
- "dowel-ui@^0.29.0"
940
+ "dowel-ui@^0.29.1"
941
941
  ],
942
942
  "registryDependencies": [
943
943
  "https://lacodda.github.io/dowel/r/input.json"
@@ -958,7 +958,7 @@
958
958
  "description": "Three kinds of nothing, and a product that draws the same panel for all three is telling the reader the wrong thing twice:\n * **empty** - there is nothing here yet, and that is normal. The panel says what would be here and offers the one action that makes it appear.",
959
959
  "dependencies": [
960
960
  "class-variance-authority",
961
- "dowel-ui@^0.29.0"
961
+ "dowel-ui@^0.29.1"
962
962
  ],
963
963
  "registryDependencies": [],
964
964
  "files": [
@@ -996,7 +996,7 @@
996
996
  "description": "Every form is the same four parts repeated: a name for the control, the control, sometimes a hint, and sometimes an error. Written by hand each time, they drift - the label loses its `htmlFor`, the hint is a `<div>` no screen reader mentions, the error appears in red and is announced by nothing at all. This is that arrangement, once.",
997
997
  "dependencies": [
998
998
  "@base-ui/react",
999
- "dowel-ui@^0.29.0"
999
+ "dowel-ui@^0.29.1"
1000
1000
  ],
1001
1001
  "registryDependencies": [],
1002
1002
  "files": [
@@ -1014,7 +1014,7 @@
1014
1014
  "title": "FileDrop",
1015
1015
  "description": "A place to put files: drag them onto it, or press it and pick them. It takes files and hands them over - it does not upload them. Where they go, with which credentials, retried how - that is the product's transport, and a primitive that owned it would be wrong for every product whose upload does not look like the one it guessed.",
1016
1016
  "dependencies": [
1017
- "dowel-ui@^0.29.0"
1017
+ "dowel-ui@^0.29.1"
1018
1018
  ],
1019
1019
  "registryDependencies": [],
1020
1020
  "files": [
@@ -1032,7 +1032,7 @@
1032
1032
  "title": "FilterPopover",
1033
1033
  "description": "A text box, a handful of checkboxes - with one way to clear it. The shell only: what goes in the panel is the caller's, since a stage is ticked and a title is typed and the popover has no opinion.",
1034
1034
  "dependencies": [
1035
- "dowel-ui@^0.29.0"
1035
+ "dowel-ui@^0.29.1"
1036
1036
  ],
1037
1037
  "registryDependencies": [
1038
1038
  "https://lacodda.github.io/dowel/r/button.json",
@@ -1053,7 +1053,7 @@
1053
1053
  "title": "Input",
1054
1054
  "description": "A single-line field. It is a plain `<input>` with the line's clothes on, so everything a browser gives an input for free - autofill, spellcheck, the right keyboard on a phone, `type=\"email\"` validation - still works.",
1055
1055
  "dependencies": [
1056
- "dowel-ui@^0.29.0"
1056
+ "dowel-ui@^0.29.1"
1057
1057
  ],
1058
1058
  "registryDependencies": [],
1059
1059
  "files": [
@@ -1087,7 +1087,7 @@
1087
1087
  "title": "JsonViewer",
1088
1088
  "description": "What a product reaches for when it has to show a response, a settings file, a webhook payload - data the reader needs to understand, not edit. The alternative it replaces is `JSON.stringify(value, null, 2)` inside a `<pre>`, which is fine for twenty lines and useless for two hundred: nothing folds, nothing is findable, and the shape of the document is somewhere inside the indentation.",
1089
1089
  "dependencies": [
1090
- "dowel-ui@^0.29.0"
1090
+ "dowel-ui@^0.29.1"
1091
1091
  ],
1092
1092
  "registryDependencies": [
1093
1093
  "https://lacodda.github.io/dowel/r/json-rows.json"
@@ -1107,7 +1107,7 @@
1107
1107
  "title": "Kbd",
1108
1108
  "description": "A key, as printed in a menu or a hint: `Ctrl` `K`. It is a `<kbd>` element because that is what the element is for - a screen reader announces it as keyboard input rather than reading a stray capital letter.",
1109
1109
  "dependencies": [
1110
- "dowel-ui@^0.29.0"
1110
+ "dowel-ui@^0.29.1"
1111
1111
  ],
1112
1112
  "registryDependencies": [],
1113
1113
  "files": [
@@ -1126,7 +1126,7 @@
1126
1126
  "description": "The shape every product builds out of two `<div>`s in a flex row, and the reason it is worth having once: it is a `<dl>`, and the pairing is what a screen reader announces. Two divs read as four unrelated pieces of text - \"Created\", \"2 hours ago\", \"Owner\", \"Ines\" - and nothing says which value belongs to which name. The right element says it for free.",
1127
1127
  "dependencies": [
1128
1128
  "class-variance-authority",
1129
- "dowel-ui@^0.29.0"
1129
+ "dowel-ui@^0.29.1"
1130
1130
  ],
1131
1131
  "registryDependencies": [],
1132
1132
  "files": [
@@ -1145,7 +1145,7 @@
1145
1145
  "description": "The distinction against its neighbours is the data's, not the drawing's. A column says each period is its own sum - hours worked in a week, and there is no Wednesday-afternoon figure between two weeks. A line says the value existed the whole time and was sampled: an account balance, a price, a temperature. Drawing a sum as a line claims readings nobody took; drawing a level as columns throws away the thing being watched.",
1146
1146
  "dependencies": [
1147
1147
  "class-variance-authority",
1148
- "dowel-ui@^0.29.0"
1148
+ "dowel-ui@^0.29.1"
1149
1149
  ],
1150
1150
  "registryDependencies": [
1151
1151
  "https://lacodda.github.io/dowel/r/line-scale.json"
@@ -1181,7 +1181,7 @@
1181
1181
  "title": "MarkedText",
1182
1182
  "description": "A textarea cannot colour a word. The way round it is older than React: draw the same text twice, once as marked-up HTML underneath and once as the textarea on top with its own text transparent, so the caret and the selection are the browser's and the colours are ours. The two have to agree on every metric - font, size, line height, padding, wrapping - or the marks slide off the words they mark. So both take ONE class list, given by the caller, and the textarea adds only what makes it invisible.",
1183
1183
  "dependencies": [
1184
- "dowel-ui@^0.29.0"
1184
+ "dowel-ui@^0.29.1"
1185
1185
  ],
1186
1186
  "registryDependencies": [],
1187
1187
  "files": [
@@ -1201,7 +1201,7 @@
1201
1201
  "dependencies": [
1202
1202
  "@base-ui/react",
1203
1203
  "class-variance-authority",
1204
- "dowel-ui@^0.29.0"
1204
+ "dowel-ui@^0.29.1"
1205
1205
  ],
1206
1206
  "registryDependencies": [],
1207
1207
  "files": [
@@ -1221,7 +1221,7 @@
1221
1221
  "dependencies": [
1222
1222
  "@base-ui/react",
1223
1223
  "class-variance-authority",
1224
- "dowel-ui@^0.29.0"
1224
+ "dowel-ui@^0.29.1"
1225
1225
  ],
1226
1226
  "registryDependencies": [],
1227
1227
  "files": [
@@ -1239,7 +1239,7 @@
1239
1239
  "title": "NotificationBell",
1240
1240
  "description": "A bell that is always lit is a bell nobody reads, so the count is the product's decision and this draws it: nothing at zero, the number past that, `9+` past nine. Pressing it does not leave the screen - the last few entries open under it and the whole history is one more click, which is the shape every product converged on once the first one tried a page.",
1241
1241
  "dependencies": [
1242
- "dowel-ui@^0.29.0"
1242
+ "dowel-ui@^0.29.1"
1243
1243
  ],
1244
1244
  "registryDependencies": [
1245
1245
  "https://lacodda.github.io/dowel/r/button.json",
@@ -1261,7 +1261,7 @@
1261
1261
  "description": "A number typed into a text input is a string that happens to look like a number, and every product then writes the same four fixes: strip the letters, clamp to a range, round to a step, and decide what an empty box means. This is those four, once, plus the stepper - because a value with a small range is faster nudged than typed.",
1262
1262
  "dependencies": [
1263
1263
  "@base-ui/react",
1264
- "dowel-ui@^0.29.0"
1264
+ "dowel-ui@^0.29.1"
1265
1265
  ],
1266
1266
  "registryDependencies": [
1267
1267
  "https://lacodda.github.io/dowel/r/input.json"
@@ -1281,7 +1281,7 @@
1281
1281
  "title": "NumberFormat",
1282
1282
  "description": "Two things, and the second is the reason this is a component rather than a call to `toLocaleString` at each site.",
1283
1283
  "dependencies": [
1284
- "dowel-ui@^0.29.0"
1284
+ "dowel-ui@^0.29.1"
1285
1285
  ],
1286
1286
  "registryDependencies": [],
1287
1287
  "files": [
@@ -1300,7 +1300,7 @@
1300
1300
  "description": "What a screen says it is, and the buttons that act on the whole of it: a title, a line under it, and the actions at the far end of the same row.",
1301
1301
  "dependencies": [
1302
1302
  "class-variance-authority",
1303
- "dowel-ui@^0.29.0"
1303
+ "dowel-ui@^0.29.1"
1304
1304
  ],
1305
1305
  "registryDependencies": [],
1306
1306
  "files": [
@@ -1318,7 +1318,7 @@
1318
1318
  "title": "PageSize",
1319
1319
  "description": "Its own file rather than a part of `Pagination`, because the two are needed apart often enough: a list that scrolls for ever wants \"how many to load at a time\" and no page buttons, and a table with a fixed page size wants the buttons and no choice. Together they were also over the size gate, which asked the right question.",
1320
1320
  "dependencies": [
1321
- "dowel-ui@^0.29.0"
1321
+ "dowel-ui@^0.29.1"
1322
1322
  ],
1323
1323
  "registryDependencies": [
1324
1324
  "https://lacodda.github.io/dowel/r/select.json"
@@ -1338,7 +1338,7 @@
1338
1338
  "title": "Pagination",
1339
1339
  "description": "The arithmetic is exported separately from the component for the same reason `table-sort` is a file of its own: a product that pages on the server needs the page numbers and not the buttons, and computing them a second time in a different place is how the two disagree about where the last page ends.",
1340
1340
  "dependencies": [
1341
- "dowel-ui@^0.29.0"
1341
+ "dowel-ui@^0.29.1"
1342
1342
  ],
1343
1343
  "registryDependencies": [
1344
1344
  "https://lacodda.github.io/dowel/r/button.json"
@@ -1359,7 +1359,7 @@
1359
1359
  "description": "The raised surface everything else sits on. It is the one place a screen gets its structure from, so it stays deliberately plain: a ground, a hairline, a corner.",
1360
1360
  "dependencies": [
1361
1361
  "class-variance-authority",
1362
- "dowel-ui@^0.29.0"
1362
+ "dowel-ui@^0.29.1"
1363
1363
  ],
1364
1364
  "registryDependencies": [],
1365
1365
  "files": [
@@ -1377,7 +1377,7 @@
1377
1377
  "title": "PasswordField",
1378
1378
  "description": "The reveal is the whole component, and it is not a convenience. A masked field is the only one in a form where a typo cannot be seen, so people either paste (fine) or type slowly and get it wrong anyway; the toggle is what turns an unverifiable field into a checkable one, and it is why long passphrases became usable at all.",
1379
1379
  "dependencies": [
1380
- "dowel-ui@^0.29.0"
1380
+ "dowel-ui@^0.29.1"
1381
1381
  ],
1382
1382
  "registryDependencies": [
1383
1383
  "https://lacodda.github.io/dowel/r/input.json"
@@ -1399,7 +1399,7 @@
1399
1399
  "dependencies": [
1400
1400
  "@base-ui/react",
1401
1401
  "class-variance-authority",
1402
- "dowel-ui@^0.29.0"
1402
+ "dowel-ui@^0.29.1"
1403
1403
  ],
1404
1404
  "registryDependencies": [],
1405
1405
  "files": [
@@ -1419,7 +1419,7 @@
1419
1419
  "dependencies": [
1420
1420
  "@base-ui/react",
1421
1421
  "class-variance-authority",
1422
- "dowel-ui@^0.29.0"
1422
+ "dowel-ui@^0.29.1"
1423
1423
  ],
1424
1424
  "registryDependencies": [],
1425
1425
  "files": [
@@ -1439,7 +1439,7 @@
1439
1439
  "dependencies": [
1440
1440
  "@base-ui/react",
1441
1441
  "class-variance-authority",
1442
- "dowel-ui@^0.29.0"
1442
+ "dowel-ui@^0.29.1"
1443
1443
  ],
1444
1444
  "registryDependencies": [],
1445
1445
  "files": [
@@ -1478,7 +1478,7 @@
1478
1478
  "dependencies": [
1479
1479
  "@base-ui/react",
1480
1480
  "class-variance-authority",
1481
- "dowel-ui@^0.29.0"
1481
+ "dowel-ui@^0.29.1"
1482
1482
  ],
1483
1483
  "registryDependencies": [],
1484
1484
  "files": [
@@ -1496,7 +1496,7 @@
1496
1496
  "title": "RatingScale",
1497
1497
  "description": "Generalised from kilna, where it is how a work is scored on each of its axes. The shape is a row of marks rather than stars: stars carry a meaning of their own - a review, a public verdict - and this is as often \"how hard was this\" or \"how finished is it\" as it is \"how good\".",
1498
1498
  "dependencies": [
1499
- "dowel-ui@^0.29.0"
1499
+ "dowel-ui@^0.29.1"
1500
1500
  ],
1501
1501
  "registryDependencies": [],
1502
1502
  "files": [
@@ -1514,7 +1514,7 @@
1514
1514
  "title": "RelativeTime",
1515
1515
  "description": "The relative-time primitive.",
1516
1516
  "dependencies": [
1517
- "dowel-ui@^0.29.0"
1517
+ "dowel-ui@^0.29.1"
1518
1518
  ],
1519
1519
  "registryDependencies": [],
1520
1520
  "files": [
@@ -1532,7 +1532,7 @@
1532
1532
  "title": "ReorderableList",
1533
1533
  "description": "The columns in a column picker, the stops of a dial, the roles of a profile. A hook and a grip rather than a list component: the rows are already something else's - a menu's items, a form's fields - and a component wrapping them would have to reproduce whatever that something else does.",
1534
1534
  "dependencies": [
1535
- "dowel-ui@^0.29.0"
1535
+ "dowel-ui@^0.29.1"
1536
1536
  ],
1537
1537
  "registryDependencies": [],
1538
1538
  "files": [
@@ -1550,7 +1550,7 @@
1550
1550
  "title": "SaveState",
1551
1551
  "description": "The quiet line beside a field that saves itself: \"saving…\", then a tick that fades. It exists because a form without a Save button has to say what it did anyway - otherwise the reader is left guessing whether their edit survived, and the usual answer to that guess is to press Ctrl+S at a page that has no such thing.",
1552
1552
  "dependencies": [
1553
- "dowel-ui@^0.29.0"
1553
+ "dowel-ui@^0.29.1"
1554
1554
  ],
1555
1555
  "registryDependencies": [
1556
1556
  "https://lacodda.github.io/dowel/r/spinner.json"
@@ -1570,7 +1570,7 @@
1570
1570
  "title": "SearchField",
1571
1571
  "description": "An Input that knows it is a search box, which is three small things the products kept not doing:\n * - a magnifier, so the field is recognisable before it is read; - a way to clear it that is not \"select all and delete\" - and one that a keyboard can reach, which a decorative `<span>` cannot; - the shortcut that focuses it, shown in the field rather than learned.",
1572
1572
  "dependencies": [
1573
- "dowel-ui@^0.29.0"
1573
+ "dowel-ui@^0.29.1"
1574
1574
  ],
1575
1575
  "registryDependencies": [
1576
1576
  "https://lacodda.github.io/dowel/r/input.json",
@@ -1593,7 +1593,7 @@
1593
1593
  "description": "A settings screen is the usual case: five or six sections, each its own address so it can be linked to and the back button walks between them, listed down the left with the current one tinted. Every product draws the same column, and every product draws the active row a little differently - which is exactly the drift a shared list exists to stop.",
1594
1594
  "dependencies": [
1595
1595
  "@base-ui/react",
1596
- "dowel-ui@^0.29.0"
1596
+ "dowel-ui@^0.29.1"
1597
1597
  ],
1598
1598
  "registryDependencies": [],
1599
1599
  "files": [
@@ -1601,7 +1601,7 @@
1601
1601
  "path": "ui/section-nav.tsx",
1602
1602
  "target": "@ui/section-nav.tsx",
1603
1603
  "type": "registry:ui",
1604
- "content": "import { useId, type HTMLAttributes, type ReactNode } from 'react'\nimport { useRender } from '@base-ui/react/use-render'\nimport { cn } from 'dowel-ui'\n\n/*\n * The left-hand list of a screen with sections, and the heading each opens.\n *\n * A settings screen is the usual case: five or six sections, each its own\n * address so it can be linked to and the back button walks between them,\n * listed down the left with the current one tinted. Every product draws the\n * same column, and every product draws the active row a little differently -\n * which is exactly the drift a shared list exists to stop.\n *\n * The rows are the product's links, not the component's. `render` takes the\n * item and answers with the element to draw it as - a router's `NavLink`, an\n * `<a>`, whatever the product navigates with - and the component puts the\n * row's clothes, its icon and its `aria-current` on it. Without `render` a\n * row is a button and `onSelect` says which one was pressed, for a screen\n * whose sections are state rather than routes.\n *\n * `SectionHeading` is the other half: the title and the one-line hint above\n * a section's body, so the column and the page it opens are set in the same\n * type.\n */\n\nexport interface SectionNavItem {\n id: string\n label: ReactNode\n icon?: ReactNode\n}\n\nexport interface SectionNavProps extends Omit<HTMLAttributes<HTMLElement>, 'children' | 'onSelect'> {\n /** What the list is called: the caption above it, and the name a screen\n * reader gives the landmark. */\n label: string\n items: readonly SectionNavItem[]\n /** Which item is the current page. */\n activeId?: string\n /** The element a row is drawn as - `render={(item) => <NavLink to={…} />}`.\n * The row's props are merged onto it, the way Button takes a `render`. */\n render?: (item: SectionNavItem) => useRender.RenderProp\n /** Pressed, whatever the row is drawn as. */\n onSelect?: (id: string) => void\n}\n\nexport function SectionNav({ label, items, activeId, render, onSelect, className, ...props }: SectionNavProps) {\n const captionId = useId()\n return (\n <nav aria-labelledby={captionId} className={cn('flex flex-col gap-0.5', className)} {...props}>\n <h2 id={captionId} className=\"px-2.5 pb-2 text-2xs font-medium uppercase tracking-caption text-faint\">\n {label}\n </h2>\n {items.map((item) => (\n <SectionNavRow\n key={item.id}\n item={item}\n active={item.id === activeId}\n render={render?.(item)}\n onSelect={onSelect}\n />\n ))}\n </nav>\n )\n}\n\nfunction SectionNavRow({\n item,\n active,\n render,\n onSelect,\n}: {\n item: SectionNavItem\n active: boolean\n render?: useRender.RenderProp\n onSelect?: (id: string) => void\n}) {\n return useRender({\n render,\n defaultTagName: 'button',\n props: {\n ...(render === undefined ? { type: 'button' } : {}),\n // Named as the current page for a screen reader, which cannot see that\n // it is the tinted one.\n 'aria-current': active ? 'page' : undefined,\n onClick: () => onSelect?.(item.id),\n className: cn(\n 'flex w-full items-center gap-2.5 rounded-md px-2.5 py-1.5 text-left text-sm text-dim no-underline transition-colors',\n 'hover:bg-soft hover:text-text [&_svg]:size-4 [&_svg]:shrink-0',\n 'focus-visible:outline-2 focus-visible:outline-offset-1 focus-visible:outline-accent',\n active && 'bg-accent-soft text-text [&_svg]:text-accent',\n ),\n children: (\n <>\n {item.icon ? <span aria-hidden className=\"contents\">{item.icon}</span> : null}\n {item.label}\n </>\n ),\n },\n })\n}\n\nexport interface SectionHeadingProps extends Omit<HTMLAttributes<HTMLDivElement>, 'title'> {\n title: ReactNode\n description?: ReactNode\n}\n\n/** The title of the open section and the line under it. */\nexport function SectionHeading({ title, description, className, ...props }: SectionHeadingProps) {\n return (\n <div className={cn('mb-4 flex flex-col gap-1', className)} {...props}>\n <h2 className=\"text-base font-semibold text-text\">{title}</h2>\n {description ? <p className=\"text-sm text-dim\">{description}</p> : null}\n </div>\n )\n}\n"
1604
+ "content": "import { useId, type HTMLAttributes, type ReactNode } from 'react'\nimport { useRender } from '@base-ui/react/use-render'\nimport { cn } from 'dowel-ui'\n\n/*\n * The left-hand list of a screen with sections, and the heading each opens.\n *\n * A settings screen is the usual case: five or six sections, each its own\n * address so it can be linked to and the back button walks between them,\n * listed down the left with the current one tinted. Every product draws the\n * same column, and every product draws the active row a little differently -\n * which is exactly the drift a shared list exists to stop.\n *\n * The rows are the product's links, not the component's. `render` takes the\n * item and answers with the element to draw it as - a router's `NavLink`, an\n * `<a>`, whatever the product navigates with - and the component puts the\n * row's clothes, its icon and its `aria-current` on it. Without `render` a\n * row is a button and `onSelect` says which one was pressed, for a screen\n * whose sections are state rather than routes.\n *\n * `SectionHeading` is the other half: the title and the one-line hint above\n * a section's body, so the column and the page it opens are set in the same\n * type.\n */\n\nexport interface SectionNavItem {\n id: string\n label: ReactNode\n icon?: ReactNode\n}\n\nexport interface SectionNavProps extends Omit<HTMLAttributes<HTMLElement>, 'children' | 'onSelect'> {\n /** What the list is called: the caption above it, and the name a screen\n * reader gives the landmark. */\n label: string\n items: readonly SectionNavItem[]\n /** Which item is the current page. */\n activeId?: string\n /** The element a row is drawn as - `render={(item) => <NavLink to={…} />}`.\n * The row's props are merged onto it, the way Button takes a `render`. */\n render?: (item: SectionNavItem) => useRender.RenderProp\n /** Pressed, whatever the row is drawn as. */\n onSelect?: (id: string) => void\n}\n\nexport function SectionNav({ label, items, activeId, render, onSelect, className, ...props }: SectionNavProps) {\n const captionId = useId()\n return (\n <nav aria-labelledby={captionId} className={cn('flex flex-col gap-0.5', className)} {...props}>\n <h2 id={captionId} className=\"px-2.5 pb-2 text-2xs font-medium uppercase tracking-caption text-faint\">\n {label}\n </h2>\n {items.map((item) => (\n <SectionNavRow\n key={item.id}\n item={item}\n active={item.id === activeId}\n render={render?.(item)}\n onSelect={onSelect}\n />\n ))}\n </nav>\n )\n}\n\nfunction SectionNavRow({\n item,\n active,\n render,\n onSelect,\n}: {\n item: SectionNavItem\n active: boolean\n render?: useRender.RenderProp\n onSelect?: (id: string) => void\n}) {\n return useRender({\n render,\n defaultTagName: 'button',\n props: {\n ...(render === undefined ? { type: 'button' } : {}),\n // Named as the current page for a screen reader, which cannot see that\n // it is the tinted one.\n 'aria-current': active ? 'page' : undefined,\n onClick: () => onSelect?.(item.id),\n className: cn(\n 'flex w-full items-center gap-2.5 rounded-md px-2.5 py-1.5 text-left text-sm text-dim no-underline transition-colors',\n 'hover:bg-soft hover:text-text [&_svg]:size-4 [&_svg]:shrink-0',\n 'focus-visible:outline-2 focus-visible:outline-offset-1 focus-visible:outline-accent',\n active && 'bg-accent-soft text-text [&_svg]:text-accent',\n ),\n children: (\n <>\n {item.icon ? <span aria-hidden className=\"contents\">{item.icon}</span> : null}\n {/* One line, truncated, like a NavRail entry. A section column is a\n fixed width, and a label that wraps makes one row taller than\n every other - which in a two-language product happens to one\n section and not the rest, so the column reads as ragged and the\n line height stops meaning anything. `min-w-0` because a flex\n child will not shrink below its content without it. */}\n <span className=\"min-w-0 flex-1 truncate\">{item.label}</span>\n </>\n ),\n },\n })\n}\n\nexport interface SectionHeadingProps extends Omit<HTMLAttributes<HTMLDivElement>, 'title'> {\n title: ReactNode\n description?: ReactNode\n}\n\n/** The title of the open section and the line under it. */\nexport function SectionHeading({ title, description, className, ...props }: SectionHeadingProps) {\n return (\n <div className={cn('mb-4 flex flex-col gap-1', className)} {...props}>\n <h2 className=\"text-base font-semibold text-text\">{title}</h2>\n {description ? <p className=\"text-sm text-dim\">{description}</p> : null}\n </div>\n )\n}\n"
1605
1605
  }
1606
1606
  ]
1607
1607
  },
@@ -1613,7 +1613,7 @@
1613
1613
  "dependencies": [
1614
1614
  "@base-ui/react",
1615
1615
  "class-variance-authority",
1616
- "dowel-ui@^0.29.0"
1616
+ "dowel-ui@^0.29.1"
1617
1617
  ],
1618
1618
  "registryDependencies": [
1619
1619
  "https://lacodda.github.io/dowel/r/input.json"
@@ -1649,7 +1649,7 @@
1649
1649
  "title": "SkeletonOf",
1650
1650
  "description": "`Skeleton` and its shapes solved half the problem: they gave a product a list, a card and a grid to reach for instead of a spinner. The half left over is the one that actually causes the jump, and it is a human one - somebody has to look at the real thing, judge how many rows it has and how tall they are, and type that in. The judgement is made once, the screen changes a month later, and the placeholder goes on promising the old shape.",
1651
1651
  "dependencies": [
1652
- "dowel-ui@^0.29.0"
1652
+ "dowel-ui@^0.29.1"
1653
1653
  ],
1654
1654
  "registryDependencies": [],
1655
1655
  "files": [
@@ -1667,7 +1667,7 @@
1667
1667
  "title": "Skeleton",
1668
1668
  "description": "The rule the component is built on, and the reason it takes a shape rather than filling the space:\n * **A skeleton of the wrong shape is worse than no skeleton.**\n * It promises something the content does not keep, and the promise is paid for in a jump: the page settles, the scrollbar appears, and whatever the reader was about to click has moved. Measured rather than assumed - the line's own calendar showed a list of four short lines where a six-row month grid was about to land, and the skeleton was itself the jump it existed to prevent.",
1669
1669
  "dependencies": [
1670
- "dowel-ui@^0.29.0"
1670
+ "dowel-ui@^0.29.1"
1671
1671
  ],
1672
1672
  "registryDependencies": [],
1673
1673
  "files": [
@@ -1686,7 +1686,7 @@
1686
1686
  "description": "The case for it over a NumberField is that the number does not matter much: a volume, an opacity, a weight in a search filter. Where the exact figure does matter, a slider is a worse field with more pixels - it cannot be typed into, it cannot be pasted into, and it has no state for \"empty\".",
1687
1687
  "dependencies": [
1688
1688
  "@base-ui/react",
1689
- "dowel-ui@^0.29.0"
1689
+ "dowel-ui@^0.29.1"
1690
1690
  ],
1691
1691
  "registryDependencies": [],
1692
1692
  "files": [
@@ -1705,7 +1705,7 @@
1705
1705
  "description": "The shape of a history, not a chart of it: no axes, no gridlines, no ticks.",
1706
1706
  "dependencies": [
1707
1707
  "class-variance-authority",
1708
- "dowel-ui@^0.29.0"
1708
+ "dowel-ui@^0.29.1"
1709
1709
  ],
1710
1710
  "registryDependencies": [],
1711
1711
  "files": [
@@ -1724,7 +1724,7 @@
1724
1724
  "description": "Something is happening and the answer has not arrived. It carries no text of its own - what is loading is the product's word, not the system's - but it does have to say *something* to a screen reader, or a page that is busy is silently identical to a page that is empty.",
1725
1725
  "dependencies": [
1726
1726
  "class-variance-authority",
1727
- "dowel-ui@^0.29.0"
1727
+ "dowel-ui@^0.29.1"
1728
1728
  ],
1729
1729
  "registryDependencies": [],
1730
1730
  "files": [
@@ -1742,7 +1742,7 @@
1742
1742
  "title": "Splash",
1743
1743
  "description": "A desktop product has a second or two between the window appearing and the first screen being ready - a workspace to open, a database to migrate, a plugin to start - and a blank window for that long reads as a crash. So the window shows the product instead: the mark, the name, the promise, the version, and a bar that sweeps until there is something to draw.",
1744
1744
  "dependencies": [
1745
- "dowel-ui@^0.29.0"
1745
+ "dowel-ui@^0.29.1"
1746
1746
  ],
1747
1747
  "registryDependencies": [],
1748
1748
  "files": [
@@ -1761,7 +1761,7 @@
1761
1761
  "description": "The smallest thing on a dashboard and the one every product writes itself: a label above, a number below, sometimes a word about which way it moved.",
1762
1762
  "dependencies": [
1763
1763
  "class-variance-authority",
1764
- "dowel-ui@^0.29.0"
1764
+ "dowel-ui@^0.29.1"
1765
1765
  ],
1766
1766
  "registryDependencies": [],
1767
1767
  "files": [
@@ -1780,7 +1780,7 @@
1780
1780
  "description": "The smallest thing a screen can say about something's condition: a server is up, a job failed, a person is away. Every product of the line drew its own coloured circle, and every one of them drew it the same way - a `<span>` with a background - which means the condition existed for exactly the readers who could see it.",
1781
1781
  "dependencies": [
1782
1782
  "class-variance-authority",
1783
- "dowel-ui@^0.29.0"
1783
+ "dowel-ui@^0.29.1"
1784
1784
  ],
1785
1785
  "registryDependencies": [],
1786
1786
  "files": [
@@ -1799,7 +1799,7 @@
1799
1799
  "description": "The difference from Checkbox is not how it looks, and getting it wrong is the commonest mistake in the pair. A checkbox is an answer collected now and submitted later, with the rest of the form; a switch is a setting that applies the moment it moves. Put a switch in a form with a Save button and the reader cannot tell whether anything happened - they flipped it, and nothing said so.",
1800
1800
  "dependencies": [
1801
1801
  "@base-ui/react",
1802
- "dowel-ui@^0.29.0"
1802
+ "dowel-ui@^0.29.1"
1803
1803
  ],
1804
1804
  "registryDependencies": [],
1805
1805
  "files": [
@@ -1834,7 +1834,7 @@
1834
1834
  "description": "Parts rather than a `columns` prop, and that is the decision worth stating: a `<DataTable columns={…} rows={…} />` is quicker to write for the first table and then owns every cell in the product forever. The moment one column needs a Badge, another a link, and a third the row's own menu, the prop grows a `render` for each - at which point it is JSX with extra steps, spelt in a shape only this component understands.",
1835
1835
  "dependencies": [
1836
1836
  "class-variance-authority",
1837
- "dowel-ui@^0.29.0"
1837
+ "dowel-ui@^0.29.1"
1838
1838
  ],
1839
1839
  "registryDependencies": [
1840
1840
  "https://lacodda.github.io/dowel/r/table-sort.json"
@@ -1855,7 +1855,7 @@
1855
1855
  "description": "Free text turned into a list: type a word, press Enter, it becomes a chip.",
1856
1856
  "dependencies": [
1857
1857
  "class-variance-authority",
1858
- "dowel-ui@^0.29.0"
1858
+ "dowel-ui@^0.29.1"
1859
1859
  ],
1860
1860
  "registryDependencies": [
1861
1861
  "https://lacodda.github.io/dowel/r/chip.json",
@@ -1876,7 +1876,7 @@
1876
1876
  "title": "Textarea",
1877
1877
  "description": "A multi-line field that can grow with what is typed into it, which is the only interesting part: a fixed box makes someone scroll inside a scroll, and a box that grows without limit pushes the button they are trying to reach off the screen. `autoResize` grows it; `maxRows` says when to stop and let it scroll after all.",
1878
1878
  "dependencies": [
1879
- "dowel-ui@^0.29.0"
1879
+ "dowel-ui@^0.29.1"
1880
1880
  ],
1881
1881
  "registryDependencies": [
1882
1882
  "https://lacodda.github.io/dowel/r/input.json"
@@ -1897,7 +1897,7 @@
1897
1897
  "description": "The tier primitive.",
1898
1898
  "dependencies": [
1899
1899
  "class-variance-authority",
1900
- "dowel-ui@^0.29.0"
1900
+ "dowel-ui@^0.29.1"
1901
1901
  ],
1902
1902
  "registryDependencies": [],
1903
1903
  "files": [
@@ -1915,7 +1915,7 @@
1915
1915
  "title": "TimeField",
1916
1916
  "description": "No donor for this one: neither product of the line had a time field, so this is written from the same shape as DurationField, and for the same reason. Anything a person plausibly types is accepted - `9`, `9:30`, `930`, `9.30`, `9pm`, `21:30` - and what comes back is always `HH:MM`.",
1917
1917
  "dependencies": [
1918
- "dowel-ui@^0.29.0"
1918
+ "dowel-ui@^0.29.1"
1919
1919
  ],
1920
1920
  "registryDependencies": [
1921
1921
  "https://lacodda.github.io/dowel/r/input.json"
@@ -1936,7 +1936,7 @@
1936
1936
  "description": "What happened, in the order it happened: a release history, an audit trail, the steps a job went through. Four products of the line draw one, and all four drew it the same way - a list with a border on the left and a dot positioned over it by hand.",
1937
1937
  "dependencies": [
1938
1938
  "class-variance-authority",
1939
- "dowel-ui@^0.29.0"
1939
+ "dowel-ui@^0.29.1"
1940
1940
  ],
1941
1941
  "registryDependencies": [],
1942
1942
  "files": [
@@ -1956,7 +1956,7 @@
1956
1956
  "dependencies": [
1957
1957
  "@base-ui/react",
1958
1958
  "class-variance-authority",
1959
- "dowel-ui@^0.29.0"
1959
+ "dowel-ui@^0.29.1"
1960
1960
  ],
1961
1961
  "registryDependencies": [],
1962
1962
  "files": [
@@ -1976,7 +1976,7 @@
1976
1976
  "dependencies": [
1977
1977
  "@base-ui/react",
1978
1978
  "class-variance-authority",
1979
- "dowel-ui@^0.29.0"
1979
+ "dowel-ui@^0.29.1"
1980
1980
  ],
1981
1981
  "registryDependencies": [],
1982
1982
  "files": [
@@ -2011,7 +2011,7 @@
2011
2011
  "description": "Two products had written this independently and arrived at the same construction - a rounded track, segments positioned absolutely by percent, a floor under the segment width so a short one does not vanish - differing only in what a segment meant. One drew the tiers of a rubric with the score standing among them; the other drew a working day as alternating work and breaks. Neither could be built from the other, and each knew something the other did not: the tiers had the marker and the three-state reading of a segment (passed, standing in, still ahead), the day had the minimum width and the difference between an empty track and an unknown one.",
2012
2012
  "dependencies": [
2013
2013
  "class-variance-authority",
2014
- "dowel-ui@^0.29.0"
2014
+ "dowel-ui@^0.29.1"
2015
2015
  ],
2016
2016
  "registryDependencies": [
2017
2017
  "https://lacodda.github.io/dowel/r/track-segments.json"
@@ -2047,7 +2047,7 @@
2047
2047
  "title": "TreeView",
2048
2048
  "description": "The shape products reach for and then get wrong in the same place every time. A tree is not a nest of lists with click handlers - it is one control with a cursor in it, and the difference is the whole component:\n * **One tab stop, not one per node.** A tree of four hundred files with a `tabIndex` on each is four hundred stops between the sidebar and the editor. The container is what the keyboard reaches, and the arrows move a cursor inside it - the arrangement a `RadioGroup` has, for the same reason.",
2049
2049
  "dependencies": [
2050
- "dowel-ui@^0.29.0"
2050
+ "dowel-ui@^0.29.1"
2051
2051
  ],
2052
2052
  "registryDependencies": [
2053
2053
  "https://lacodda.github.io/dowel/r/tree-rows.json"
@@ -2067,7 +2067,7 @@
2067
2067
  "title": "Truncate",
2068
2068
  "description": "Text that does not fit, cut with an ellipsis - and, importantly, still readable in full: the element carries its own text as a `title`, so hovering shows what was cut. Every product wrote the one-line version of this and none of them remembered the title.",
2069
2069
  "dependencies": [
2070
- "dowel-ui@^0.29.0"
2070
+ "dowel-ui@^0.29.1"
2071
2071
  ],
2072
2072
  "registryDependencies": [],
2073
2073
  "files": [
@@ -2085,7 +2085,7 @@
2085
2085
  "title": "VirtualList",
2086
2086
  "description": "The browser is fine with long lists until it is not: a hundred thousand `<div>`s is a layout the machine recomputes on every change, and the page stops responding while it does. What is drawn instead is the window the reader can actually see, held in place by a tall spacer, so the scrollbar still says how much there is.",
2087
2087
  "dependencies": [
2088
- "dowel-ui@^0.29.0"
2088
+ "dowel-ui@^0.29.1"
2089
2089
  ],
2090
2090
  "registryDependencies": [],
2091
2091
  "files": [
@@ -2104,7 +2104,7 @@
2104
2104
  "description": "With `decorations: false` the system draws nothing, so everything it used to do is the page's: dragging the window by its title bar, double-click to maximise, the three buttons, and the edges you grab to resize. Each is small; the reason to take them on at all is that a system title bar over an application title bar costs a strip of every laptop screen for nothing.",
2105
2105
  "dependencies": [
2106
2106
  "@tauri-apps/api",
2107
- "dowel-ui@^0.29.0"
2107
+ "dowel-ui@^0.29.1"
2108
2108
  ],
2109
2109
  "registryDependencies": [],
2110
2110
  "files": [
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dowel-ui",
3
- "version": "0.29.0",
3
+ "version": "0.29.1",
4
4
  "description": "The lacodda line design system: theme tokens and React primitives, distributed as a shadcn-compatible registry.",
5
5
  "license": "MIT",
6
6
  "type": "module",