@prestack/thread-ui 0.1.7 → 0.1.8

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.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,190 @@
1
1
  # @prestack/thread-ui
2
2
 
3
+ ## 0.1.7
4
+
5
+ something it shipped is gone or is not the shape it was, so taking this one can stop your code compiling.
6
+
7
+ ### Changed
8
+
9
+ - `compositions` — `ui/compositions#COMPILED` is not the shape it was. Read it before upgrading: a change that still compiles is the dangerous one, because nothing tells you at build time. An option added here is one nothing passes yet.
10
+
11
+ ### Fixed
12
+
13
+ - `icons-writer` — its code moved and what it exports did not.
14
+ - `routes-writer` — its code moved and what it exports did not.
15
+ - `styles-writer` — its code moved and what it exports did not.
16
+ - `ui-attach` — its code moved and what it exports did not.
17
+
18
+ <!-- release 0.1.7 -->
19
+ <!-- holds
20
+ accordion 315747ae9d69 ui/elements/accordion#AccordionProps:73ce472833d3 ui/elements/accordion#Accordion:83e995f2269f ui/elements/accordion.works#uses:5d3b00d92875 ui/elements/accordion.works#section:4ae99f778938 ui/elements/accordion.works#header:4ae99f778938 ui/elements/accordion.works#region:4ae99f778938 ui/elements/accordion.works#shown:2b4a0795f92f
21
+ animations-writer 6b745ed8eb50 ui/animations#BOUND:903de4e047f6 ui/animations#AnimationSetting:e4c302183d8e ui/animations#Animation:5212a1aa8d74 ui/animations#keyframeName:ff8fa0760be2 ui/animations#stopsOf:b2c6e0e60a68 ui/animations#shorthandOf:6a990de10b41 ui/animations#declares:cad46cab877c ui/animations#ANIMATIONS:a836915082b0 ui/animations#nameOf:ff8fa0760be2 ui/animations#seeds:e5c803f28183 ui/animations#mismatched:5679b09f6252 ui/animations#orphaned:8865319ec4c3
22
+ appear f2488319c0c9 ui/animations/anm_appear#APPEAR:301afe9bf4dc
23
+ aspect-ratio 4a4c4ec6e61d ui/elements/aspect-ratio#AspectRatioProps:0847ecebf249 ui/elements/aspect-ratio#AspectRatio:080b92fde974 ui/elements/aspect-ratio.works#measured:c68e17838e54
24
+ avatar 3c5e9c201758 ui/elements/avatar#AvatarProps:036f319489f5 ui/elements/avatar#Avatar:0aa8f982e898 ui/elements/avatar.works#shown:71384a69d3af
25
+ avatar-round da7acf061c62 ui/variants/var_avatar-round#AVATAR_ROUND:ccce1a17f0bf
26
+ badge 5b2fdfcfbcf3 ui/elements/badge#BadgeProps:735de9042fa4 ui/elements/badge#Badge:2e5b7c04041c ui/elements/badge.works#shows:fdabcaaa1a37
27
+ bars a728d4c0efc7 ui/elements/bars#BarsProps:429c72e96da9 ui/elements/bars#Bars:45ece6c69851 ui/elements/bars.works#uses:21c0411bcd1a ui/elements/bars.works#sized:4fbc468fd612 ui/elements/bars.works#shown:71800d3c3261
28
+ blur-in 1311ce3a3fda ui/animations/anm_blur_in#BLUR_IN:6892dfe198c0
29
+ blur-out f8c4f2cdff1e ui/animations/anm_blur_out#BLUR_OUT:bf564f95f617
30
+ bordered ed33d5c9bcd8 ui/materials/mat_bordered#BORDERED:ae68626a835b
31
+ box 9135e63049fc ui/elements/box#BoxProps:bc6d4d90848d ui/elements/box#Box:71451d7d0d75
32
+ breadcrumb 66bf516f8183 ui/elements/breadcrumb#BreadcrumbProps:90326c0e741c ui/elements/breadcrumb#Breadcrumb:7fa664c4c672 ui/elements/breadcrumb.works#steps:1143e7397f7e ui/elements/breadcrumb.works#crumb:2d47ada157f0
33
+ bubble-me 5a742c2ed7a7 ui/variants/var_bubble-me#BUBBLE_ME:ad950ac45abe
34
+ bubble-them 728e1129e2a9 ui/variants/var_bubble-them#BUBBLE_THEM:e4ca2cde9739
35
+ button 29cf957dbfa1 ui/elements/button#ButtonProps:3dd153481c9c ui/elements/button#Button:5c5b34292c8c ui/elements/button.works#uses:3e0750aa8681 ui/elements/button.works#wires:0b5df5218d63 ui/elements/button.works#iconed:c2caebd886f9 ui/elements/button.works#worded:c2caebd886f9 ui/elements/button.works#shown:2d2723ffce9f
36
+ button-border 6e6bf634e1c6 ui/variants/var_button-border#BUTTON_BORDER:5c178d7beb57
37
+ button-cta 01e30d4ec68d ui/variants/var_button-cta#BUTTON_CTA:970026cce345
38
+ button-destructive 96ec12dd1acf ui/variants/var_button-destructive#BUTTON_DESTRUCTIVE:1a01bdef3004
39
+ button-destructive-ghost 50791a7ec41c ui/variants/var_button-destructive-ghost#BUTTON_DESTRUCTIVE_GHOST:6418dad96469
40
+ button-fill 7f6509f2bcd8 ui/variants/var_button-fill#BUTTON_FILL:01446b8623cb
41
+ button-ghost 81ab88717b77 ui/variants/var_button-ghost#BUTTON_GHOST:4629e6de0279
42
+ button-glass da9a524fd64d ui/variants/var_button-glass#BUTTON_GLASS:bb95b54e94b6
43
+ button-normal 79d08fe4779f ui/variants/var_button-normal#BUTTON_NORMAL:8e300f205850
44
+ button-quiet 3ad6cdd1794e ui/variants/var_button-quiet#BUTTON_QUIET:015eee9c6a9d
45
+ card cd72fc4eb250 ui/variants/var_card#CARD:11d65ea74e1e
46
+ ceramic 4922d7156e24 ui/materials/mat_ceramic#CERAMIC:a1df3c22029a
47
+ charts 799a8177e784 ui/charts#Row:eee0c117177a ui/charts#WhenTight:17ade237b678 ui/charts#ChartBase:5c23cd2a9e3f ui/charts#num:bf021c1a2c8c ui/charts#str:28fd80e9f148 ui/charts#useRamp:f6fdb5be0c84 ui/charts#placed:fe15c30aa6bf ui/charts#measured:4d39d48edd1d ui/charts#SeriesProps:0fa5db4164e4 ui/charts#polyline:ccbb1fdf9a3a ui/charts#CategoryProps:9c091b968226 ui/charts#TwoAxisProps:6d05ba489e28
48
+ checked b3db1ccbae77 ui/checked#Wearing:deebde0237b4 ui/checked#Dispatching:deebde0237b4 ui/checked#VariantsFor:20a411132cb6 ui/checked#ArrangementElement:4d32298786d2 ui/checked#idOf:7ad5f68e2c86
49
+ chip c23cc6dce38c ui/variants/var_chip#CHIP:65c2396c3be4
50
+ choice 96d8c5e8912a ui/variants/var_choice#CHOICE:be45a6463762
51
+ clay c0a2c9b526fc ui/materials/mat_clay#CLAY:720ba7ce183e
52
+ collector b1cb143bbc9d ui/collector#ClientEvent:eb3074274552 ui/collector#CollectorOptions:5c022ee3fd3b ui/collector#RecordedEvent:edd6c51b46bd ui/collector#Collector:bc3c96c74f1e ui/collector#INERT_COLLECTOR:50752f61c393 ui/collector#createCollector:e8bf723f970e
53
+ column 5c1a7eb179ea ui/elements/column#ColumnProps:ad269764b266 ui/elements/column#Column:1b9550e6a545
54
+ compositions 61aabaadf53d ui/compositions#REACHES:09aa52ab5287 ui/compositions#declares:cad46cab877c ui/compositions#COMPOSITIONS:2412f9a2cc25 ui/compositions#PASCAL:72b4c80878b8 ui/compositions#nameOf:38eeb450b217 ui/compositions#Listed:ebe67be9ab8b ui/compositions#sheetOf:7e68e5aa528f ui/compositions#composed:bf363b830157 ui/compositions#HOME:16475c413846 ui/compositions#DOORS:75b7a7c39b95 ui/compositions#reaching:f772a3f7a0e9 ui/compositions#compiledAt:38eeb450b217 ui/compositions#settled:c2671abe553d ui/compositions#RUNTIME:4de2138e3a11 ui/compositions#emitting:12075f4c4f66 ui/compositions#stale:081f906ac9d3 ui/compositions#handing:c2ba7db38c14 ui/compositions#undeclared:b84deaf1f67c ui/compositions#seeds:950628166bbd
55
+ consent e9a8de05e23c ui/elements/consent#ConsentProps:4d2e2c5c74ae ui/elements/consent#Consent:f288ab8ee1af
56
+ consent-categories 063d79030614 ui/consent#ConsentCategorySchema:e3521eb40a21 ui/consent#ConsentCategory:d495db30ead2 ui/consent#defineConsentCategory:dc7375e62187 ui/consent#consentCategories:fc75fbe08af8 ui/consent#consentCategory:b515e4d050f9 ui/consent#ConsentDecisionSchema:f29793770bb3 ui/consent#ConsentDecision:37669319ada2 ui/consent#consentAllows:2ce94d59b747
57
+ consent-element fa8efc39cb87 ui/elements/consent.works#uses:408a55ef20fc ui/elements/consent.works#categories:cab969c5fa8b ui/elements/consent.works#hasPolicy:41e8cd1e14fe ui/elements/consent.works#withdrawable:27a86b8e1345 ui/elements/consent.works#optional:1d0be2d81bca ui/elements/consent.works#required:1d0be2d81bca ui/elements/consent.works#title:8bb7d2c23113 ui/elements/consent.works#policy:ff8839910ba9 ui/elements/consent.works#label:b88c8ee4712f ui/elements/consent.works#describe:b88c8ee4712f ui/elements/consent.works#fixed:efa0c3794a4c ui/elements/consent.works#chooser:f06207471636 ui/elements/consent.works#withdraw:e7c5c7c955e4 ui/elements/consent.works#decline:e7c5c7c955e4 ui/elements/consent.works#accept:e7c5c7c955e4 ui/elements/consent.works#acceptAll:e7c5c7c955e4
58
+ content 46197c590f10 ui/content#MessageKey:bb3a9997b027 ui/content#ValueProps:9decf576db80 ui/content#renderValue:26dafdf7eb3f
59
+ contrast d58eef8241a7 ui/contrast#CONTRAST_LARGE:319ea26151c0 ui/contrast#luminance:7b446b9fed05 ui/contrast#contrast:8ad383dc8043
60
+ controls e64de1d19cf3 ui/controls#PressProps:d7b2a109483b ui/controls#Option:bb867d0c2790 ui/controls#Menu:99af6606ff9d ui/controls#MenuProps:e64bf652667a ui/controls#MenuItem:e6972b78d002
61
+ dev-runner 5ba2ec07b456 ui/generators/dev#unrunnable:a00d94275089
62
+ disclosure 64d2ffbff21d ui/disclosure#TabItem:5637034a9966 ui/disclosure#AccordionItem:5637034a9966
63
+ dismiss 1062fb6d8d49 ui/animations/anm_dismiss#DISMISS:44547e6662ab
64
+ dismiss-layer c81dadfa632c ui/dismiss-layer#Layer:1739bdeed158 ui/dismiss-layer#useDismissLayer:fc45673b9550 ui/dismiss-layer#openLayers:dbe6494f9d41
65
+ donut 778a867b06e0 ui/elements/donut#DonutProps:3b9e7fde51af ui/elements/donut#Donut:394c3abab12b ui/elements/donut.works#uses:f8d2db81931c ui/elements/donut.works#slice:1c42064c095a
66
+ drag 0ef5149ec5b9 ui/drag#EDGE_SCROLL_DEFAULTS:162de3815f33 ui/drag#Subject:c27b664a52fd ui/drag#DragSession:6af215ec8136 ui/drag#dragSession:e84fc1b5ed17 ui/drag#subscribeDrag:c456c983029f ui/drag#DragStatus:4440e8c46de5 ui/drag#dragStatusOf:df66d31d913f ui/drag#Scroller:038eab5f1ca9 ui/drag#Layout:8a03934bc399 ui/drag#DOM_LAYOUT:a4ae951f0933 ui/drag#setLayout:5e8ae80ca924 ui/drag#currentLayout:23ed529a101a ui/drag#claimGesture:d7ff15860d3c ui/drag#releaseGesture:48d5e5330326 ui/drag#gestureClaim:65fda728778f ui/drag#DropTarget:bff392b218d8 ui/drag#registerTarget:8a22941d233a ui/drag#targetFor:ca512db492ae ui/drag#innermostTarget:8f13034f8379 ui/drag#BeginDrag:06a945bd02b8 ui/drag#beginDrag:8993a12ea898 ui/drag#MoveDrag:40d697607f2c ui/drag#moveDrag:5e744e28a670 ui/drag#collect:87adb0b806fb ui/drag#endDrag:e84fc1b5ed17 ui/drag#resetDrag:a3965c1dfabe ui/drag#dwell:696612acada0 ui/drag#accepted:b2c139a84a5a ui/drag#EdgeScrollTuning:8656a344cfa0 ui/drag#edgeScroll:54f1744007c7 ui/drag#pullEdges:93e827aaa0b8
67
+ drop 07bbafbbbfa5 ui/animations/anm_drop#DROP:28d834809d56
68
+ each 99eb68bf0b39 ui/elements/each#EachProps:83129dd2b3ac ui/elements/each#Each:e6f142a2d09c ui/elements/each.works#shows:ad356e86f65d
69
+ element-rows 17e6806e3269 ui/elements#ELEMENTS:8f09f1d86714
70
+ elements-writer 07ccd1b33b73 ui/generators/elements#pascal:ff8fa0760be2 ui/generators/elements#OWNED_AT:7fac350f2d5d ui/generators/elements#owned:19dbe2a693ea ui/generators/elements#translated:0ee7c254775e ui/generators/elements#CARRIES:4de2138e3a11 ui/generators/elements#READINGS:4de2138e3a11 ui/generators/elements#declared:74cde91fc910 ui/generators/elements#wears:a91b72bd4390
71
+ elevated 498ed7e13271 ui/materials/mat_elevated#ELEVATED:f1d54bdaf726
72
+ empty 408cc55e3924 ui/elements/empty#EmptyProps:e89b67d88a13 ui/elements/empty#Empty:02e6deb405b0
73
+ en-catalog 975f32111040 ui/i18n/catalogs/en#en:f72fd845118b ui/i18n/catalogs/en#EnCatalog:07aac6125d69
74
+ fall b9051b59c4eb ui/animations/anm_fall#FALL:de7c5232ae66
75
+ field d0f76e98261b ui/elements/field#FieldProps:f6208a53a0dd ui/elements/field#Field:38e7e6136c67 ui/elements/field.works#uses:b460b57a1079 ui/elements/field.works#entry:ed11af6bd73c ui/elements/field.works#shown:450fd3b336bc
76
+ flash 069f70cedec1 ui/animations/anm_flash#FLASH:bb0d6061b2a8
77
+ flat b77b9e10eb88 ui/materials/mat_flat#FLAT:45034ea327e8
78
+ focus-scope c872a7d46e1b ui/focus-scope#tabbables:6dc1a8ed6338 ui/focus-scope#useFocusScope:4c9b51943dba
79
+ fonts b0a63e294524 ui/fonts#FACES:d0c818c9b4e2 ui/fonts#Face:65b392495807 ui/fonts#FontFamily:a5184b2dfb4c ui/fonts#FontSet:9f12cc81549d ui/fonts#defineFontSet:28d60920ecaf ui/fonts#fontSets:b79664265bb8 ui/fonts#fontSet:d3b23f97c463 ui/fonts#fontFaces:3ccbfc44dc32 ui/fonts#fontModules:3ccbfc44dc32 ui/fonts#fontIn:947791605637 ui/fonts#fontVariable:0b2ea3f92138 ui/fonts#fontStack:0bb08ee73396 ui/fonts#fontFor:1ed2cf132c34 ui/fonts#FontRole:bcde61774ad8 ui/fonts#FontRoleId:df296a09b71d ui/fonts#ROLE_IDS:11cdcc1f7f95 ui/fonts#DEFAULT_ROLE:60b8b8b397b0 ui/fonts#SET_ROW:00b33e3ffbf1 ui/fonts#holds:66da16a1d8a6 ui/fonts#FONTS:a4cd8dbc5c1b ui/fonts#classOfRole:ff8fa0760be2 ui/fonts#settingsOf:a2e6277c42f5 ui/fonts#roleClass:b3e7d41fde38 ui/fonts#familyFor:68125aabf80b ui/fonts#setNamed:c3ef0235837e
80
+ framed 36372f49dd19 ui/variants/var_framed#FRAMED:7603b136eda5
81
+ funnel f40085ae814c ui/elements/funnel#FunnelProps:429c72e96da9 ui/elements/funnel#Funnel:346fda430d23 ui/elements/funnel.works#uses:75344a7846bb ui/elements/funnel.works#sized:26f9281d9d39 ui/elements/funnel.works#shown:cc4f256199ff
82
+ gauge cd51dc0a77fe ui/elements/gauge#GaugeProps:69bb45d0d458 ui/elements/gauge#Gauge:f3902bbbcb90 ui/elements/gauge.works#uses:1ea30b999ca0 ui/elements/gauge.works#track:9017e22c6cd9 ui/elements/gauge.works#needle:ffb05fac60d7
83
+ glass 4f712c474709 ui/materials/mat_glass#GLASS:e8983a778649
84
+ glow f27e9c60847a ui/animations/anm_glow#GLOW:b75cde1c65e8
85
+ glyph d7479eeda99b ui/elements/glyph#GlyphProps:4106330e88f5 ui/elements/glyph#Glyph:b49fddd10040 ui/elements/glyph.works#drawn:f45ca9f62049 ui/elements/glyph.works#shows:881db1c0701a
86
+ glyph-plain db2198da017a ui/variants/var_glyph-plain#GLYPH_PLAIN:d6228326b2bf
87
+ grid 3abfdec9d4bb ui/elements/grid#GridProps:ad269764b266 ui/elements/grid#Grid:8e4ad19dcc06
88
+ heatmap 9521d967dd16 ui/elements/heatmap#HeatmapProps:b147106482f2 ui/elements/heatmap#Heatmap:4eed2b5e160c ui/elements/heatmap.works#uses:a0768529ca8f ui/elements/heatmap.works#sized:55318f305b27
89
+ hit-box f48ff72bbe1f ui/elements/hit-box#HitBoxProps:3edc4ed422b1 ui/elements/hit-box#HitBox:d778244710bb ui/elements/hit-box.works#Axis:33c35b0ffe72 ui/elements/hit-box.works#uses:2a6d2c718e38 ui/elements/hit-box.works#wires:1cddad8cf225 ui/elements/hit-box.works#shown:82f106431cdf
90
+ i18n-types 2b3358461d33 ui/i18n/types#Money:5ccc2e8715d7 ui/i18n/types#Locale:bb3a9997b027 ui/i18n/types#MessageParams:c8b98c9ef662 ui/i18n/types#DeclaredMessage:15146945b7f9 ui/i18n/types#msg:6f4ce4ea0ad1 ui/i18n/types#MessageEntry:a3011654f357 ui/i18n/types#RequiresExplicitParams:9afc22df209f ui/i18n/types#ValidEntry:55d6c8d1b432 ui/i18n/types#CatalogShape:035eff70ed94 ui/i18n/types#ParamsOf:f11c778e63a5 ui/i18n/types#Translator:bc6ce843db37 ui/i18n/types#entryText:8f7f9b6fb21b ui/i18n/types#defineCatalog:67309cff79a2
91
+ i18n-writer 7326af36633d ui/generators/i18n#walk:2b0caf2efd3b ui/generators/i18n#keyProps:2c319c8c1507 ui/generators/i18n#keysIn:4c2dd7de01b6 ui/generators/i18n#readWording:97cf5049ec86 ui/generators/i18n#wordingFile:40969fbfabda
92
+ icon-sets 2ee5c4cf60f4 ui/icons#IconSet:7d3af541078c ui/icons#ICON_TARGET:0693728301e7 ui/icons#DEFAULT_ICON:b343f4fca562 ui/icons#sizeRows:6a8284e80b30 ui/icons#sizeNamed:7ad5f68e2c86 ui/icons#strokeFor:d15243b42f12 ui/icons#BRAND_MODULE:696f4addc79d ui/icons#defineIconSet:8e7d61a3595e ui/icons#defineIcon:6722a9c4f6e3 ui/icons#iconSets:2e3d0c4f422e ui/icons#iconSet:77161f6cbc87 ui/icons#iconNames:3ccbfc44dc32 ui/icons#iconIn:a393ee7ee7f8 ui/icons#brandExport:b872f6e302c0 ui/icons#SET_ROW:dcaa0bb52c1b ui/icons#SIZE_PREFIX:0ca5e5e4c9eb ui/icons#holds:66da16a1d8a6 ui/icons#ICONS:a4cd8dbc5c1b ui/icons#drawnAs:39b2d0b66e76 ui/icons#setNamed:b78f1dfb90c3 ui/icons#IconComponent:3519fd0448c9 ui/icons#installIcons:4bca1126f326 ui/icons#installedSet:ea11a029b2ff ui/icons#iconSize:051b1f5bfa93 ui/icons#drawnFor:77cf59fc0e97
93
+ icons-writer 580af8ee6f97
94
+ image 967499e9a772 ui/elements/image#ImageProps:a32890747c93 ui/elements/image#Image:cec94eb7378c
95
+ input ae7068e4a182 ui/variants/var_input#INPUT:27581d657b96
96
+ lift 8464180c5da1 ui/animations/anm_lift#LIFT:a63fd1fc6227
97
+ line-chart 6863d667c0e7 ui/elements/line-chart#LineChartProps:dae99c7ce631 ui/elements/line-chart#LineChart:15cfdd29751a ui/elements/line-chart.works#lines:68f3cc937de0 ui/elements/line-chart.works#uses:ca3cae02625f ui/elements/line-chart.works#drawing:4fc88b6eb2c8
98
+ link 13b71587b0be ui/elements/link#LinkProps:f8e3636cb290 ui/elements/link#Link:fa8f20713d7c ui/elements/link.works#uses:bafbafc2c328
99
+ link-inline 2336d8bdc7ef ui/variants/var_link-inline#LINK_INLINE:828401d1d8fc
100
+ list-row a59bce53118a ui/variants/var_list-row#LIST_ROW:002f108b821a
101
+ lit dca654b7cfdb ui/materials/mat_lit#LIT:1355d07bd5ec
102
+ locales 81f3eca3ddf7 ui/i18n/locales#REFERENCE_LOCALE:ec7df020bf1e ui/i18n/locales#LocaleDecl:bc1f89b83d74 ui/i18n/locales#defineLocale:79994004ee18 ui/i18n/locales#locales:b65c2631bfae ui/i18n/locales#locale:a1be3346f05c ui/i18n/locales#resetLocales:a3965c1dfabe
103
+ localizations 3f9e0fbb2fda ui/localizations#fileFor:ea4183b63099 ui/localizations#SOURCE_ROW:0b2b038d7a60 ui/localizations#holds:66da16a1d8a6 ui/localizations#declares:44fc181d2f2e ui/localizations#LOCALIZATIONS:5aa81ac1526e ui/localizations#languagesIn:3c191d1da982 ui/localizations#sourceIn:ca722c0439bb
104
+ material-shape 355d5d618b85 ui/material#Setting:426554dca885 ui/material#BOUND:60b3bf658f7c ui/material#Material:10384161b39a ui/material#FREE:e3380039b05d ui/material#material:1cf1cf5e74a4 ui/material#composed:40eef03784ab ui/material#compose:e3e390f844a8 ui/material#keyframesOf:d2489886fde6
105
+ materials 94fd1918bc51 ui/materials#MATERIALS:d99dbff5a125 ui/materials#nameOf:ff8fa0760be2 ui/materials#seeds:950628166bbd ui/materials#mismatched:5679b09f6252 ui/materials#orphaned:8865319ec4c3 ui/materials#unguarded:2402578021fc ui/materials#guarding:b0bd4f259649
106
+ media f10dbbca543f ui/elements/media#MediaProps:a6f78a4b17e9 ui/elements/media#Media:dcaabbc68839
107
+ menu 4f69ea6a415f ui/elements/menu#MenuProps:d36936ad43b5 ui/elements/menu#Menu:fba867d9c33c ui/elements/menu.works#MenuItem:02e633272dfb ui/elements/menu.works#Presented:5e5067bd5ae0 ui/elements/menu.works#MenuRow:a802423247f1 ui/elements/menu.works#uses:d6ce5f7df945 ui/elements/menu.works#opener:c69eaabd4bec ui/elements/menu.works#portal:52c185db8c74 ui/elements/menu.works#listing:f17800975fbc ui/elements/menu.works#row:565839797be7 ui/elements/menu.works#measured:f814b8fb25f8
108
+ message-format 093c4f86bcb3 ui/i18n/format#MissingParamError:aa7e44c63280 ui/i18n/format#ParamTypeError:c68d491e4531 ui/i18n/format#FormatOptions:78186c114b44 ui/i18n/format#formatMessage:8bcdb57eb68c
109
+ message-parse 8bed438a6add ui/i18n/parse#Money:a00bde948c6d ui/i18n/parse#Node:fb8f1cd0fbe1 ui/i18n/parse#MessageSyntaxError:f55480cb6fe5 ui/i18n/parse#parseMessage:789d981d91a9 ui/i18n/parse#messageArgs:9c3bae9eeab2
110
+ modes 8637df698b4f ui/modes#holds:09551d35202f ui/modes#MODES:bc3de2fdf92a
111
+ money 41ccdd66db7c ui/elements/money#MoneyProps:bfccaebe6f06 ui/elements/money#Money:32e4d81b941e ui/elements/money.works#shows:7ad4291b35f4
112
+ moulded 882a86e690d3 ui/materials/mat_moulded#MOULDED:f4751a918421
113
+ navigation 0e47d978cd87 ui/navigation#ScreenName:bbfc0371f587 ui/navigation#trailTo:0fb587559b4b
114
+ nudge 7f4195c8619c ui/animations/anm_nudge#NUDGE:35f48565000a
115
+ pagination c62506f06693 ui/elements/pagination#PaginationProps:ccf8727f774b ui/elements/pagination#Pagination:1c1e9106ea48 ui/elements/pagination.works#steps:61d0370471b4 ui/elements/pagination.works#step:ffee64ebf86f
116
+ pop-in 0f5ed5f1732d ui/animations/anm_pop_in#POP_IN:99aab36dd6e6
117
+ pop-out bdb26827c938 ui/animations/anm_pop_out#POP_OUT:09d7a8b68046
118
+ positioning 3a289987f9e8 ui/positioning#AnchorOptions:4c3402cd1a69 ui/positioning#Position:9c70539bcb3d ui/positioning#positionOf:3c3c43bfe549 ui/positioning#useAnchored:593ec514203e
119
+ presentation 8ed76916e8ba ui/door#PRESENTATIONS:0b4b6dd8a649 ui/door#Presentation:5378f3ae7da7 ui/door#PRESENTATION_BEHAVIOUR:11cc9a11a516 ui/door#ClockSubscriber:cd2a448da470 ui/door#Ticker:f3fd8773c688 ui/door#Clock:da7deb95122a ui/door#Surface:7d312cda7a5a
120
+ presented 67a05bb9e520 ui/presented#PresentedProps:ed075c0f7d0b ui/presented#Presented:b5610082d862
121
+ press 8570528dfb22 ui/animations/anm_press#PRESS:93f066007712
122
+ progress f79fdd4eb7bf ui/elements/progress#ProgressProps:754b505c5be3 ui/elements/progress#Progress:1072cc0de3a1 ui/elements/progress.works#measured:56dd5b194e54
123
+ provider 1ea77f0a6489 ui/provider#ThreadUiProps:f9e8a8ef7cb8 ui/provider#ThreadUi:e310895b7a7c
124
+ pulse f90915f67e93 ui/animations/anm_pulse#PULSE:6c5cbf0c4759
125
+ radio-group c903bacce153 ui/elements/radio-group#RadioGroupProps:a44a0a13b29e ui/elements/radio-group#RadioGroup:e53bf0a781d6 ui/elements/radio-group.works#uses:93b2bbc321ab ui/elements/radio-group.works#option:a16909c8c8c1 ui/elements/radio-group.works#shown:5e7a9552c0ad
126
+ react-writer aa38aef215e4 ui/generators/react#compiled:59c5d77cc186 ui/generators/react#ungated:6de55407f5b9 ui/generators/react#loader:08e5438231dd ui/generators/react#plugin:b70a97bb6556
127
+ render-loop be960ec1a828 ui/render-loop#RenderLoop:26cd3aa222be ui/render-loop#RenderLoopError:79c4d40f96f7 ui/render-loop#useRenderLoopDetector:90e66afe4c82
128
+ rise 61ded997838c ui/animations/anm_rise#RISE:d178eebd2d96
129
+ route-grammar 908017e6633d ui/islands/map#ViewId:1803b726a3f2 ui/islands/map#ScreenName:1803b726a3f2 ui/islands/map#ScreenSchema:e34dac772797 ui/islands/map#Screen:d89925503325 ui/islands/map#LinkSchema:2cffc4530649 ui/islands/map#Link:cddf1e8c9a89 ui/islands/map#MapSchema:7534b09abac3 ui/islands/map#MapIsland:cd73cbe9975f
130
+ routes-writer 1a61f420f66e ui/generators/routes#typedRoute:b0bd4f259649 ui/generators/routes#viewsIn:9945a607f187 ui/generators/routes#holding:d2af8731dc6b
131
+ roving-focus cb0ac52a89ee ui/roving-focus#ITEM_ATTR:8b73d7f449d1 ui/roving-focus#RovingOptions:99d861749f5e ui/roving-focus#typeaheadMatch:03faca7fba5b ui/roving-focus#useRovingFocus:3b7852d6152b
132
+ row 3edfc1bb496b ui/elements/row#RowProps:ad269764b266 ui/elements/row#Row:569a64b06443
133
+ rule 378160180b5b ui/variants/var_rule#RULE:27e702157c9c
134
+ scatter 22d298a2efa2 ui/elements/scatter#ScatterProps:91be4e563d68 ui/elements/scatter#Scatter:601a9061ff54 ui/elements/scatter.works#uses:4fc5950fb41d ui/elements/scatter.works#point:d986d6e7e804
135
+ screens 52d643184478 ui/screens#declares:cad46cab877c ui/screens#SCREENS:2412f9a2cc25 ui/screens#nameOf:38eeb450b217 ui/screens#PAGE:b7bbe39b7b35 ui/screens#presentedIn:cb083ae57ffe ui/screens#routeFor:9212f2e08bc1 ui/screens#pageAt:8accc096b285 ui/screens#entryAmong:e8e913cd736e ui/screens#seeds:950628166bbd
136
+ scroll-lock 0f916058a352 ui/scroll-lock#lockScroll:1ebfb8414d04 ui/scroll-lock#scrollLocks:dbe6494f9d41
137
+ select 97ead0eb87a4 ui/elements/select#SelectProps:e5720f21652e ui/elements/select#Select:304fef768983 ui/elements/select.works#does:eae69973c066
138
+ separator 03aeb2b5f1bb ui/elements/separator#SeparatorProps:39c0ed47c8a0 ui/elements/separator#Separator:ef292b7118cf
139
+ series c57f94d44322 ui/series#Oklch:c89405845570 ui/series#hexToOklch:4789883600c4 ui/series#oklchToHex:addb0ebe3e77 ui/series#seriesRamp:dcbdba1604ca ui/series#seriesColour:59e2788e6eda
140
+ shadow-token a853481182c9 ui/tokens/shadow#SHADOW:4be3d61d7b28
141
+ shake 823853a54116 ui/animations/anm_shake#SHAKE:0fa001de0cc4
142
+ show-reader 265e7f6c23c6 ui/generators/show#namedBy:512bfc15cc9b
143
+ signals 71b9ca638d39 ui/signals#SignalEntry:c4df440da285 ui/signals#holds:09920a64717d ui/signals#selectorOf:3760cece0feb ui/signals#SIGNALS:1e4ed72981ce ui/signals#EXCLUSIVE:9246e03a89ae ui/signals#coexist:40aac7cabc7c ui/signals#knowSignals:d809925e46fd ui/signals#signalNames:3ccbfc44dc32 ui/signals#isSignal:7ec24fea5b8b ui/signals#PointerSample:5d35cad46706 ui/signals#GestureFrame:eaf70a3d7781 ui/signals#GesturePhase:b48b44476bac ui/signals#Recognition:5803e495593d ui/signals#IDLE:8343023bcafc ui/signals#GestureEntry:2a90384c0121 ui/signals#defineGesture:f1b67e16a59e ui/signals#gestures:19649f79edf5 ui/signals#gestureFor:978e6ce3869c ui/signals#isGesture:7ec24fea5b8b ui/signals#gestureNames:3ccbfc44dc32 ui/signals#recognise:fac5ccc84865 ui/signals#SignalIssue:4165faba45aa ui/signals#checkInteractions:09d6e5b4183b
144
+ skeleton c3c54fdabacc ui/elements/skeleton#SkeletonProps:4757f547cc95 ui/elements/skeleton#Skeleton:37f365492a9d
145
+ skeleton-block 1d031eb6fe66 ui/variants/var_skeleton-block#SKELETON_BLOCK:c18f7e7cf3dc
146
+ slide-in-left a2090e0e36e3 ui/animations/anm_slide_in_left#SLIDE_IN_LEFT:3f466d0564c7
147
+ slide-in-right 03201522158d ui/animations/anm_slide_in_right#SLIDE_IN_RIGHT:0c4d922d831e
148
+ slide-out-left e770370b0540 ui/animations/anm_slide_out_left#SLIDE_OUT_LEFT:880a18c52b89
149
+ slide-out-right c2a861af9c90 ui/animations/anm_slide_out_right#SLIDE_OUT_RIGHT:a7faf4d2b78c
150
+ slider 29d634b58d3f ui/elements/slider#SliderProps:53c464f32e4b ui/elements/slider#Slider:29e115f5629b ui/elements/slider.works#does:1c10d363e445
151
+ sparkline d000a9f40102 ui/elements/sparkline#SparklineProps:30103b965675 ui/elements/sparkline#Sparkline:541243ee9db2 ui/elements/sparkline.works#uses:b6cc82bd5732 ui/elements/sparkline.works#drawing:62c65ae3b123
152
+ spin 49b33c0bd6ae ui/animations/anm_spin#SPIN:30e735ce0bd4
153
+ spinner dc5d9825ce24 ui/elements/spinner#SpinnerProps:e89b67d88a13 ui/elements/spinner#Spinner:e38e42d0b0c5
154
+ spinner-turning 59556dee7c9f ui/variants/var_spinner-turning#SPINNER_TURNING:0c7bdb2fdf29
155
+ stack 2eeddd1a72a3 ui/elements/stack#StackProps:ad269764b266 ui/elements/stack#Stack:fdd85c412df6
156
+ stat c691e09c06e7 ui/elements/stat#StatProps:96cd57b2e8e4 ui/elements/stat#Stat:fa6a34480102 ui/elements/stat.works#shown:25c9bae03897
157
+ stat-tile c8717d893ac4 ui/variants/var_stat-tile#STAT_TILE:1b611bad8d11
158
+ styleguide-shape fc172d4e9545 ui/styleguide#StyleGuide:872bb558460e ui/styleguide#themedBy:b1e17b642d8c ui/styleguide#kindsHeld:3ccbfc44dc32 ui/styleguide#shapeOf:0191a88f5272 ui/styleguide#chosen:98aeef39cf52 ui/styleguide#shifted:9fa8d7f1bbec
159
+ styleguides c783e16f6e2e ui/styleguides#holds:66da16a1d8a6 ui/styleguides#STYLEGUIDES:e8e2b9e43e3d
160
+ styles-writer 92959020a076
161
+ surface fedb1c18423f ui/elements/surface#SurfaceProps:ad269764b266 ui/elements/surface#Surface:553e947ae889 ui/elements/surface.works#uses:8b8e3a9fe8d0
162
+ swell 55b58053ed5a ui/animations/anm_swell#SWELL:e66f7cdef31a
163
+ tab-bar 27306b5f110a ui/variants/var_tab-bar#TAB_BAR:5b7295b1d4a0
164
+ table 45e6a6608811 ui/elements/table#TableProps:96fb88caf788 ui/elements/table#Table:42c3ac158f4e ui/elements/table.works#uses:3085121fd6b4 ui/elements/table.works#shown:75fca49b7d63 ui/elements/table.works#heading:d9482c8fbf24
165
+ tabs c7b67f52b340 ui/elements/tabs#TabsProps:cf28cb6ed29f ui/elements/tabs#Tabs:bdf4c5c4a04a ui/elements/tabs.works#uses:1e91366e992b ui/elements/tabs.works#strip:24729769900c ui/elements/tabs.works#tab:13a2e9b7ad30 ui/elements/tabs.works#opened:768544dc2ba6 ui/elements/tabs.works#panel:a066bd3e1ba8 ui/elements/tabs.works#shown:c14c6452def5
166
+ tap-target 3b1d83984a4c ui/variants/var_tap-target#TAP_TARGET:f83b88aa706b
167
+ text 0f03b3b5bce7 ui/elements/text#TextProps:81c96ab6243e ui/elements/text#Text:7e9a751cc97c
168
+ textarea 76880dee05ad ui/elements/textarea#TextareaProps:9004657bc84f ui/elements/textarea#Textarea:e9304e28d0e9 ui/elements/textarea.works#does:9fddd3177d22
169
+ themes 578150eec4c9 ui/themes#holds:e5c0c9297825 ui/themes#THEMES:66852c882bbe
170
+ time 9a277ad00e23 ui/elements/time#TimeProps:c654fa2d8b40 ui/elements/time#Time:f1090f04bc57 ui/elements/time.works#uses:a10fbc45685b ui/elements/time.works#shows:c92126ddc36e
171
+ toggle 9db23c69b51c ui/elements/toggle#ToggleProps:fefe061bcc79 ui/elements/toggle#Toggle:5e938057fbfe ui/elements/toggle.works#does:9ca75ef2795c
172
+ token-shape d072589be2f5 ui/token#Token:8d672efc335b ui/token#Wearing:10a6833bf679 ui/token#Holds:e30cbdfece90 ui/token#nameOf:7ad5f68e2c86 ui/token#naming:107c722f7b02 ui/token#held:a2b8fff9fbaa ui/token#sheeted:f0b5eed68e64
173
+ tokens 8d3bdf2dc147 ui/tokens#holds:da8687a09455 ui/tokens#declares:040f49b399ed ui/tokens#TOKENS:9e4c1275ec9c ui/tokens#nameOf:ff8fa0760be2 ui/tokens#seeds:950628166bbd ui/tokens#mismatched:5679b09f6252 ui/tokens#orphaned:579e61bf7b35
174
+ tooltip c41d8c367003 ui/elements/tooltip#TooltipProps:c49189b9f17a ui/elements/tooltip#Tooltip:dea7727a0321 ui/elements/tooltip.works#uses:d00d3ada96f8 ui/elements/tooltip.works#showing:cae65122fed6 ui/elements/tooltip.works#bubble:90bd36385377 ui/elements/tooltip.works#measured:2df010cbbfb8
175
+ translator 2e6486cb17d5 ui/i18n/translator#UnknownMessageKeyError:8dd90403c7fe ui/i18n/translator#TranslatorOptions:78186c114b44 ui/i18n/translator#createTranslator:4eb69b879704
176
+ ui-attach 482dc65c94b0 ui/attach#ATTACH_HOME:16475c413846 ui/attach#ATTACH:8b0b999ca5c9
177
+ validators e648b6cfc317 ui/validators#ENTRY_MODES:6238d04fe5a8 ui/validators#KEYBOARDS:38e63312aeee ui/validators#EntryMode:18d83f0e69e6 ui/validators#Keyboard:2316810a5de3 ui/validators#ValidateResult:530bdd02c4e4 ui/validators#valid:3ce6786a6b1c ui/validators#invalid:46bcfbeb6f8e ui/validators#ValidatorContext:cf494e7f96b8 ui/validators#validators:0fd6015be8fa ui/validators#hasValidator:7ec24fea5b8b ui/validators#validatorFor:eaa1acab74f0 ui/validators#runValidator:3fc93347d97f ui/validators#formatValue:062cca5c1239 ui/validators#EntryConstraints:a5662931f360 ui/validators#entryConstraints:676ee3d7fbda ui/validators#acceptsKeystroke:cb848d0041fa ui/validators#applyMask:3f93a2d6184a ui/validators#minorUnits:921fda509ea5 ui/validators#evaluateMoney:e710eca6aed8 ui/validators#limited:77aa553c4b7a
178
+ value f85e6f17b76b ui/elements/value#ValueProps:3346fb6b4e16 ui/elements/value#Value:59ceafd2bbba ui/elements/value.works#shows:07daabb6f547
179
+ variant-rows 601640ae7284 ui/variants#VARIANTS:054eaa012e24
180
+ variant-shape 175a5b8b3821 ui/variant#Variant:c9fa1bded409 ui/variant#propertiesHeld:f2f795682efa ui/variant#freeHeld:3ccbfc44dc32 ui/variant#structural:74cde91fc910 ui/variant#looking:25ed76b8a1b8 ui/variant#variant:58068a021fa3 ui/variant#boundHeld:f2f795682efa ui/variant#camel:ff8fa0760be2 ui/variant#classOf:ff8fa0760be2 ui/variant#classOfElement:ff8fa0760be2 ui/variant#classOfComposition:ff8fa0760be2 ui/variant#classOfScreen:ff8fa0760be2 ui/variant#unreacted:c61cf4383338 ui/variant#complete:068de9765c79 ui/variant#statesOf:c8962010907d ui/variant#under:265eab85913f ui/variant#undeclaredStates:11961d12ec9d
181
+ variants-seeder 5d37b937c531 ui/generators/variants#nameOf:ff8fa0760be2 ui/generators/variants#seeds:e5c803f28183 ui/generators/variants#mismatched:5679b09f6252 ui/generators/variants#orphaned:8865319ec4c3 ui/generators/variants#unguarded:2402578021fc ui/generators/variants#guarding:b0bd4f259649
182
+ wobble edf6e636810f ui/animations/anm_wobble#WOBBLE:6d3b15f44665
183
+ wrappers 0328fc1efdb7 ui/wrappers#Appearance:ec3028b4b84a ui/wrappers#UiConfig:d899ce533c78 ui/wrappers#UiContext:96dbef1bc6b9 ui/wrappers#UiProvider:49c08762a14c ui/wrappers#useUi:0734231ecf54 ui/wrappers#SurfaceRequest:c8015cd4cd32 ui/wrappers#useSurface:4b8b39afaf79 ui/wrappers#Press:77733f69fb6e ui/wrappers#pressOf:4bdd7232323b ui/wrappers#PressOrigin:3daa7623dd12 ui/wrappers#pressing:65fa29c030f0 ui/wrappers#usePress:486493cd9a8b ui/wrappers#useVisibility:4d1b5ddb676e ui/wrappers#ScreenOptions:244dc14dd3b0 ui/wrappers#ElementBody:71817b4c2a87 ui/wrappers#Element:ab34dbdc55be ui/wrappers#element:a7e4708803dc ui/wrappers#composition:d129e11ec13b ui/wrappers#ScreenControls:6b17634c6ed4 ui/wrappers#useView:97298a47e810 ui/wrappers#screen:80f46a5e3cda ui/wrappers#behaviourOf:5841f6ad0abe
184
+ zoom-in de9f521f292c ui/animations/anm_zoom_in#ZOOM_IN:e39ceba8428e
185
+ zoom-out 841dc6cd15af ui/animations/anm_zoom_out#ZOOM_OUT:0c67b3faf366
186
+ -->
187
+
3
188
  ## 0.1.6
4
189
 
5
190
  what it exports is untouched and its code moved.
package/dist/ui/attach.js CHANGED
@@ -97,7 +97,7 @@ const SHIPPED = [
97
97
  into: 'ui.ts',
98
98
  list: 'GENERATORS',
99
99
  id: 'compositions-generator',
100
- source: " {\n id: 'compositions-generator',\n at: 'node_modules/@prestack/thread-ui/dist/ui/compositions.js',\n describes: 'The seeder of composition files — it reads the compositions an app declares and writes the `cmp_` file each row names when that file is not there yet, so a composition begins by being declared rather than by somebody remembering to add a file beside the row. Run with `--check`, the mode the gate runs it in, it writes nothing and refuses instead: a row whose file is absent, a `cmp_` file no row names, and an import that is not a declared element, a declared composition or the door — so a composition that did not come from the CLI, or that reaches something nothing declares, stops the build rather than rendering. It also writes each of them compiled, into `app/_generated/compiled` — a variant worn as a tag becomes the class it resolves to and a named place becomes the class its arrangement declares, so a page imports a file this framework wrote rather than one a bundler plugin rewrites on the way past.',\n version: 1,\n by: 'thread compositions',\n runs: 'thread compositions --check',\n derives: [\n {\n id: 'compiled',\n at: '_threads/compiled.ts',\n describes: 'The sheet declaring every file the interface runs from in this app, one row each: the parts of the framework a page needs, copied in, and every composition compiled from the file a person wrote. A page imports only these, so the app builds with no part of this framework installed. `thread compositions` writes the sheet from what it emits, because a folder declares nothing beneath it.',\n version: 1,\n by: 'thread compositions',\n runs: 'thread compositions --check',\n },\n ],\n },",
100
+ source: " {\n id: 'compositions-generator',\n at: 'node_modules/@prestack/thread-ui/dist/ui/compositions.js',\n describes: 'The seeder of composition files — it reads the compositions an app declares and writes the `cmp_` file each row names when that file is not there yet, so a composition begins by being declared rather than by somebody remembering to add a file beside the row. Run with `--check`, the mode the gate runs it in, it writes nothing and refuses instead: a row whose file is absent, a `cmp_` file no row names, and an import that is not a declared element, a declared composition or the door — so a composition that did not come from the CLI, or that reaches something nothing declares, stops the build rather than rendering. It also writes each of them compiled, into `app/_generated/compiled` — a variant worn as a tag becomes the class it resolves to and a named place becomes the class its arrangement declares, so a page imports a file this framework wrote rather than one a bundler plugin rewrites on the way past.',\n version: 1,\n by: 'thread compositions',\n runs: 'thread compositions --check',\n derives: [\n {\n id: 'compiled',\n at: '_threads/compiled.ts',\n describes: 'The sheet declaring every file the interface runs from in this app, one row each: the parts of the framework a page needs, copied in, and every composition and screen compiled from the file a person wrote. A page imports only these, so the app builds with no part of this framework installed. `thread compositions` writes the sheet, because a folder declares nothing beneath it. Each row names the command that writes its file: `thread screens` for a compiled screen, `thread compositions` for everything else.',\n version: 1,\n by: 'thread compositions',\n runs: 'thread compositions --check',\n },\n ],\n },",
101
101
  },
102
102
  {
103
103
  into: 'ui.ts',
package/dist/ui/attach.ts CHANGED
@@ -102,7 +102,7 @@ const SHIPPED: readonly { readonly into: string; readonly list: string; readonly
102
102
  into: 'ui.ts',
103
103
  list: 'GENERATORS',
104
104
  id: 'compositions-generator',
105
- source: " {\n id: 'compositions-generator',\n at: 'node_modules/@prestack/thread-ui/dist/ui/compositions.js',\n describes: 'The seeder of composition files — it reads the compositions an app declares and writes the `cmp_` file each row names when that file is not there yet, so a composition begins by being declared rather than by somebody remembering to add a file beside the row. Run with `--check`, the mode the gate runs it in, it writes nothing and refuses instead: a row whose file is absent, a `cmp_` file no row names, and an import that is not a declared element, a declared composition or the door — so a composition that did not come from the CLI, or that reaches something nothing declares, stops the build rather than rendering. It also writes each of them compiled, into `app/_generated/compiled` — a variant worn as a tag becomes the class it resolves to and a named place becomes the class its arrangement declares, so a page imports a file this framework wrote rather than one a bundler plugin rewrites on the way past.',\n version: 1,\n by: 'thread compositions',\n runs: 'thread compositions --check',\n derives: [\n {\n id: 'compiled',\n at: '_threads/compiled.ts',\n describes: 'The sheet declaring every file the interface runs from in this app, one row each: the parts of the framework a page needs, copied in, and every composition compiled from the file a person wrote. A page imports only these, so the app builds with no part of this framework installed. `thread compositions` writes the sheet from what it emits, because a folder declares nothing beneath it.',\n version: 1,\n by: 'thread compositions',\n runs: 'thread compositions --check',\n },\n ],\n },",
105
+ source: " {\n id: 'compositions-generator',\n at: 'node_modules/@prestack/thread-ui/dist/ui/compositions.js',\n describes: 'The seeder of composition files — it reads the compositions an app declares and writes the `cmp_` file each row names when that file is not there yet, so a composition begins by being declared rather than by somebody remembering to add a file beside the row. Run with `--check`, the mode the gate runs it in, it writes nothing and refuses instead: a row whose file is absent, a `cmp_` file no row names, and an import that is not a declared element, a declared composition or the door — so a composition that did not come from the CLI, or that reaches something nothing declares, stops the build rather than rendering. It also writes each of them compiled, into `app/_generated/compiled` — a variant worn as a tag becomes the class it resolves to and a named place becomes the class its arrangement declares, so a page imports a file this framework wrote rather than one a bundler plugin rewrites on the way past.',\n version: 1,\n by: 'thread compositions',\n runs: 'thread compositions --check',\n derives: [\n {\n id: 'compiled',\n at: '_threads/compiled.ts',\n describes: 'The sheet declaring every file the interface runs from in this app, one row each: the parts of the framework a page needs, copied in, and every composition and screen compiled from the file a person wrote. A page imports only these, so the app builds with no part of this framework installed. `thread compositions` writes the sheet, because a folder declares nothing beneath it. Each row names the command that writes its file: `thread screens` for a compiled screen, `thread compositions` for everything else.',\n version: 1,\n by: 'thread compositions',\n runs: 'thread compositions --check',\n },\n ],\n },",
106
106
  },
107
107
  {
108
108
  into: 'ui.ts',
@@ -27,6 +27,7 @@ export declare function settled(root: string, rows: readonly Threaded[], checkin
27
27
  export declare const RUNTIME: readonly string[];
28
28
  export declare function emitting(root: string, entries: readonly string[], checking: boolean, kept: Set<string>): readonly string[];
29
29
  export declare function stale(root: string, kept: ReadonlySet<string>, checking: boolean): readonly string[];
30
+ export declare const SCREENED_BY = "thread screens";
30
31
  export declare function handing(at: string, text: string): readonly string[];
31
32
  export declare function undeclared(tree: Tree, rows: readonly Threaded[]): readonly string[];
32
33
  export declare function seeds(rows: readonly Threaded[], held: (at: string) => boolean): readonly {
@@ -262,18 +262,19 @@ export function stale(root, kept, checking) {
262
262
  }
263
263
  const SHEET = 'compiled.ts';
264
264
  const EMITS = 'thread compositions';
265
+ export const SCREENED_BY = 'thread screens';
265
266
  const SHIPS = `${COMPILED}/ui/`;
266
267
  const idFor = (at) => `compiled-${at.slice(COMPILED.length + 1).replace(/\.[^./]+$/, '').split('/').join('-')}`;
267
- function meaning(at) {
268
+ function meaning(at, by) {
268
269
  if (at.startsWith(SHIPS)) {
269
270
  return ('`' + at.slice(SHIPS.length) + '` from ' + packageOf('ui') + ', copied into this app so a page runs it with nothing of ' +
270
- 'the framework installed. `' + EMITS + '` writes it, so an edit made here is refused.');
271
+ 'the framework installed. `' + by + '` writes it, so an edit made here is refused.');
271
272
  }
272
273
  return ('`' + at.slice(COMPILED.length + 1) + '` as React runs it, compiled from the file a person wrote: a variant worn as a ' +
273
- 'tag has become its class, and a named place the class its arrangement declares. `' + EMITS + '` writes it, so an ' +
274
+ 'tag has become its class, and a named place the class its arrangement declares. `' + by + '` writes it, so an ' +
274
275
  'edit made here is refused.');
275
276
  }
276
- function sheeted(tree, written) {
277
+ function sheeted(tree, written, screened) {
277
278
  const at = relative(tree.at, inTree(tree, SHEET));
278
279
  const ui = inTree(tree, 'ui.ts');
279
280
  const held = (existsSync(ui) ? valuesIn(readFileSync(ui)) : {});
@@ -284,16 +285,19 @@ function sheeted(tree, written) {
284
285
  'Run `thread attach ' + packageOf('ui') + '`: that sheet is written by the package, never by hand.',
285
286
  };
286
287
  }
287
- const rows = [...written].sort().map((one) => [
288
- ' {',
289
- ` id: ${quoted(idFor(one))},`,
290
- ` at: ${quoted(one)},`,
291
- ` describes: ${quoted(meaning(one))},`,
292
- ' version: 1,',
293
- ` by: ${quoted(EMITS)},`,
294
- ` runs: ${quoted(`${EMITS} --check`)},`,
295
- ' },',
296
- ].join('\n'));
288
+ const rows = [...written].sort().map((one) => {
289
+ const by = screened.has(one) ? SCREENED_BY : EMITS;
290
+ return [
291
+ ' {',
292
+ ` id: ${quoted(idFor(one))},`,
293
+ ` at: ${quoted(one)},`,
294
+ ` describes: ${quoted(meaning(one, by))},`,
295
+ ' version: 1,',
296
+ ` by: ${quoted(by)},`,
297
+ ` runs: ${quoted(`${by} --check`)},`,
298
+ ' },',
299
+ ].join('\n');
300
+ });
297
301
  return {
298
302
  text: [
299
303
  `import type { Threaded } from '${SHAPED}'`,
@@ -311,8 +315,8 @@ function sheeted(tree, written) {
311
315
  ].join('\n'),
312
316
  };
313
317
  }
314
- function declaring(tree, written, checking) {
315
- const made = sheeted(tree, written);
318
+ function declaring(tree, written, checking, screened) {
319
+ const made = sheeted(tree, written, screened);
316
320
  if ('because' in made)
317
321
  return [made.because];
318
322
  const at = inTree(tree, SHEET);
@@ -323,7 +327,7 @@ function declaring(tree, written, checking) {
323
327
  if (existsSync(at) && readFileSync(at, 'utf8') === made.text)
324
328
  return [];
325
329
  return [
326
- relative(tree.at, at) + ' is not what this command writes from what it emits. A sheet that differs from the files it ' +
330
+ relative(tree.at, at) + ' is not what this command writes. A sheet that differs from the files it ' +
327
331
  'declares is a hand edit wearing a generated name. Run `' + EMITS + '` and commit what it writes.',
328
332
  ];
329
333
  }
@@ -437,7 +441,7 @@ function run() {
437
441
  ...emitting(tree.at, entries, checking, kept),
438
442
  ...settled(tree.at, rows, checking, EMITS, kept),
439
443
  ];
440
- found.push(...declaring(tree, [...kept].filter((one) => !screened.has(one)), checking));
444
+ found.push(...declaring(tree, [...kept], checking, screened));
441
445
  const loose = [...found, ...(found.length === 0 ? stale(tree.at, kept, checking) : [])];
442
446
  for (const one of loose)
443
447
  stdout.write(`thread: ${one}\n`);
@@ -333,27 +333,29 @@ const SHEET = 'compiled.ts'
333
333
 
334
334
  const EMITS = 'thread compositions'
335
335
 
336
+ export const SCREENED_BY = 'thread screens'
337
+
336
338
  const SHIPS = `${COMPILED}/ui/`
337
339
 
338
340
  const idFor = (at: string): string => `compiled-${at.slice(COMPILED.length + 1).replace(/\.[^./]+$/, '').split('/').join('-')}`
339
341
 
340
- function meaning(at: string): string {
342
+ function meaning(at: string, by: string): string {
341
343
  if (at.startsWith(SHIPS)) {
342
344
  return (
343
345
  '`' + at.slice(SHIPS.length) + '` from ' + packageOf('ui') + ', copied into this app so a page runs it with nothing of ' +
344
- 'the framework installed. `' + EMITS + '` writes it, so an edit made here is refused.'
346
+ 'the framework installed. `' + by + '` writes it, so an edit made here is refused.'
345
347
  )
346
348
  }
347
349
  return (
348
350
  '`' + at.slice(COMPILED.length + 1) + '` as React runs it, compiled from the file a person wrote: a variant worn as a ' +
349
- 'tag has become its class, and a named place the class its arrangement declares. `' + EMITS + '` writes it, so an ' +
351
+ 'tag has become its class, and a named place the class its arrangement declares. `' + by + '` writes it, so an ' +
350
352
  'edit made here is refused.'
351
353
  )
352
354
  }
353
355
 
354
356
  type Sheeted = { readonly text: string } | { readonly because: string }
355
357
 
356
- function sheeted(tree: Tree, written: readonly string[]): Sheeted {
358
+ function sheeted(tree: Tree, written: readonly string[], screened: ReadonlySet<string>): Sheeted {
357
359
  const at = relative(tree.at, inTree(tree, SHEET))
358
360
  const ui = inTree(tree, 'ui.ts')
359
361
  const held = (existsSync(ui) ? valuesIn(readFileSync(ui)) : {}) as { readonly GENERATORS?: readonly Threaded[] }
@@ -365,18 +367,19 @@ function sheeted(tree: Tree, written: readonly string[]): Sheeted {
365
367
  'Run `thread attach ' + packageOf('ui') + '`: that sheet is written by the package, never by hand.',
366
368
  }
367
369
  }
368
- const rows = [...written].sort().map((one) =>
369
- [
370
+ const rows = [...written].sort().map((one) => {
371
+ const by = screened.has(one) ? SCREENED_BY : EMITS
372
+ return [
370
373
  ' {',
371
374
  ` id: ${quoted(idFor(one))},`,
372
375
  ` at: ${quoted(one)},`,
373
- ` describes: ${quoted(meaning(one))},`,
376
+ ` describes: ${quoted(meaning(one, by))},`,
374
377
  ' version: 1,',
375
- ` by: ${quoted(EMITS)},`,
376
- ` runs: ${quoted(`${EMITS} --check`)},`,
378
+ ` by: ${quoted(by)},`,
379
+ ` runs: ${quoted(`${by} --check`)},`,
377
380
  ' },',
378
- ].join('\n'),
379
- )
381
+ ].join('\n')
382
+ })
380
383
  return {
381
384
  text: [
382
385
  `import type { Threaded } from '${SHAPED}'`,
@@ -395,8 +398,8 @@ function sheeted(tree: Tree, written: readonly string[]): Sheeted {
395
398
  }
396
399
  }
397
400
 
398
- function declaring(tree: Tree, written: readonly string[], checking: boolean): readonly string[] {
399
- const made = sheeted(tree, written)
401
+ function declaring(tree: Tree, written: readonly string[], checking: boolean, screened: ReadonlySet<string>): readonly string[] {
402
+ const made = sheeted(tree, written, screened)
400
403
  if ('because' in made) return [made.because]
401
404
  const at = inTree(tree, SHEET)
402
405
  if (!checking) {
@@ -405,7 +408,7 @@ function declaring(tree: Tree, written: readonly string[], checking: boolean): r
405
408
  }
406
409
  if (existsSync(at) && readFileSync(at, 'utf8') === made.text) return []
407
410
  return [
408
- relative(tree.at, at) + ' is not what this command writes from what it emits. A sheet that differs from the files it ' +
411
+ relative(tree.at, at) + ' is not what this command writes. A sheet that differs from the files it ' +
409
412
  'declares is a hand edit wearing a generated name. Run `' + EMITS + '` and commit what it writes.',
410
413
  ]
411
414
  }
@@ -537,7 +540,7 @@ function run(): number {
537
540
  ...emitting(tree.at, entries, checking, kept),
538
541
  ...settled(tree.at, rows, checking, EMITS, kept),
539
542
  ]
540
- found.push(...declaring(tree, [...kept].filter((one) => !screened.has(one)), checking))
543
+ found.push(...declaring(tree, [...kept], checking, screened))
541
544
  const loose = [...found, ...(found.length === 0 ? stale(tree.at, kept, checking) : [])]
542
545
  for (const one of loose) stdout.write(`thread: ${one}\n`)
543
546
 
@@ -182,8 +182,7 @@ export function ungated(from) {
182
182
  checked = null;
183
183
  if (at === '' || !existsSync(at)) {
184
184
  checked =
185
- 'this tree has no passing gate, so nothing in it may compile. Run `thread gate` — or the ' +
186
- '`dev`, `build` and `start` scripts, which run it for you. A gate that has never run is not a ' +
185
+ 'this tree has no passing gate, so nothing in it may compile. Run `thread gate`. A gate that has never run is not a ' +
187
186
  'gate that passed, and the file you are compiling was never measured. Compiling ' +
188
187
  `\`${from}\`, it looked for a gate receipt from \`${dirname(resolve(from))}\` and from ` +
189
188
  `\`${resolve(cwd())}\` upwards${at === '' ? ', and neither reached a tree' : `, and found none at ${at}`}`;
@@ -226,8 +226,7 @@ export function ungated(from: string): string | null {
226
226
 
227
227
  if (at === '' || !existsSync(at)) {
228
228
  checked =
229
- 'this tree has no passing gate, so nothing in it may compile. Run `thread gate` — or the ' +
230
- '`dev`, `build` and `start` scripts, which run it for you. A gate that has never run is not a ' +
229
+ 'this tree has no passing gate, so nothing in it may compile. Run `thread gate`. A gate that has never run is not a ' +
231
230
  'gate that passed, and the file you are compiling was never measured. Compiling ' +
232
231
  `\`${from}\`, it looked for a gate receipt from \`${dirname(resolve(from))}\` and from ` +
233
232
  `\`${resolve(cwd())}\` upwards${at === '' ? ', and neither reached a tree' : `, and found none at ${at}`}`
@@ -423,6 +423,7 @@ async function node(root, file, name) {
423
423
  }
424
424
  return one;
425
425
  }
426
+ const STYLESHEET = 'app/_generated/tokens.css';
426
427
  const DECLARED = 'app/_generated/declared.ts';
427
428
  async function run() {
428
429
  const own = argv.includes('--own');
@@ -462,7 +463,7 @@ async function run() {
462
463
  '] as const',
463
464
  '',
464
465
  ].join('\n');
465
- const at = join(root, 'app/_generated/tokens.css');
466
+ const at = join(root, STYLESHEET);
466
467
  const made = sheet(tokens, guide, materials, variants, modes, themes, screens, compositions, elements, fonts, icons, animations);
467
468
  if (own) {
468
469
  stdout.write(`styles: this framework's own declarations build a stylesheet — ${String(guide.picks.length)} values, ` +
@@ -472,25 +473,29 @@ async function run() {
472
473
  return 0;
473
474
  }
474
475
  if (argv.includes('--check')) {
475
- let current = '';
476
- try {
477
- current = readFileSync(at, 'utf8');
478
- }
479
- catch {
480
- current = '';
481
- }
482
- if (current === made) {
483
- stdout.write('styles: app/_generated/tokens.css is the bytes the declarations produce\n');
476
+ const drifted = [
477
+ { named: STYLESHEET, text: made },
478
+ { named: DECLARED, text: wearingSource },
479
+ ].filter((one) => {
480
+ try {
481
+ return readFileSync(join(root, one.named), 'utf8') !== one.text;
482
+ }
483
+ catch {
484
+ return true;
485
+ }
486
+ });
487
+ if (drifted.length === 0) {
488
+ stdout.write(`styles: ${STYLESHEET} and ${DECLARED} are the bytes the declarations produce\n`);
484
489
  return 0;
485
490
  }
486
- stderr.write('styles: app/_generated/tokens.css is not what the declarations produce. A derived file that ' +
487
- 'differs from its generator is a hand edit wearing a generated name, and every reader downstream ' +
488
- 'believes the wrong one. Run `thread styles` and commit what it writes.\n');
491
+ stderr.write(`styles: ${drifted.map((one) => one.named).join(' and ')} ${drifted.length === 1 ? 'is' : 'are'} not what the declarations produce. ` +
492
+ 'A derived file that differs from its generator is a hand edit wearing a generated name, and every reader ' +
493
+ 'downstream believes the wrong one. Run `thread styles` and commit what it writes.\n');
489
494
  return 1;
490
495
  }
491
496
  writeFileSync(at, made, 'utf8');
492
497
  writeFileSync(join(root, DECLARED), wearingSource, 'utf8');
493
- stdout.write(`thread: wrote app/_generated/tokens.css — ${String(Object.keys(tokens).length)} tokens, ` +
498
+ stdout.write(`thread: wrote ${STYLESHEET} and ${DECLARED} — ${String(Object.keys(tokens).length)} tokens, ` +
494
499
  `${String(guide.picks.length)} values, ${String(Object.keys(materials).length)} materials, ` +
495
500
  `${String(Object.keys(variants).length)} variants, ${String(inside(fonts).length - 1)} font roles, ` +
496
501
  `${String(Object.keys(animations).length)} animations, ${String(modes.length)} modes, ` +
@@ -563,6 +563,8 @@ async function node(root: string, file: string, name: string): Promise<Node> {
563
563
  return one as Node
564
564
  }
565
565
 
566
+ const STYLESHEET = 'app/_generated/tokens.css'
567
+
566
568
  const DECLARED = 'app/_generated/declared.ts'
567
569
 
568
570
  async function run(): Promise<number> {
@@ -623,7 +625,7 @@ async function run(): Promise<number> {
623
625
  '',
624
626
  ].join('\n')
625
627
 
626
- const at = join(root, 'app/_generated/tokens.css')
628
+ const at = join(root, STYLESHEET)
627
629
  const made = sheet(tokens, guide, materials, variants, modes, themes, screens, compositions, elements, fonts, icons, animations)
628
630
 
629
631
  if (own) {
@@ -637,20 +639,24 @@ async function run(): Promise<number> {
637
639
  }
638
640
 
639
641
  if (argv.includes('--check')) {
640
- let current = ''
641
- try {
642
- current = readFileSync(at, 'utf8')
643
- } catch {
644
- current = ''
645
- }
646
- if (current === made) {
647
- stdout.write('styles: app/_generated/tokens.css is the bytes the declarations produce\n')
642
+ const drifted = [
643
+ { named: STYLESHEET, text: made },
644
+ { named: DECLARED, text: wearingSource },
645
+ ].filter((one) => {
646
+ try {
647
+ return readFileSync(join(root, one.named), 'utf8') !== one.text
648
+ } catch {
649
+ return true
650
+ }
651
+ })
652
+ if (drifted.length === 0) {
653
+ stdout.write(`styles: ${STYLESHEET} and ${DECLARED} are the bytes the declarations produce\n`)
648
654
  return 0
649
655
  }
650
656
  stderr.write(
651
- 'styles: app/_generated/tokens.css is not what the declarations produce. A derived file that ' +
652
- 'differs from its generator is a hand edit wearing a generated name, and every reader downstream ' +
653
- 'believes the wrong one. Run `thread styles` and commit what it writes.\n',
657
+ `styles: ${drifted.map((one) => one.named).join(' and ')} ${drifted.length === 1 ? 'is' : 'are'} not what the declarations produce. ` +
658
+ 'A derived file that differs from its generator is a hand edit wearing a generated name, and every reader ' +
659
+ 'downstream believes the wrong one. Run `thread styles` and commit what it writes.\n',
654
660
  )
655
661
  return 1
656
662
  }
@@ -659,7 +665,7 @@ async function run(): Promise<number> {
659
665
  writeFileSync(join(root, DECLARED), wearingSource, 'utf8')
660
666
 
661
667
  stdout.write(
662
- `thread: wrote app/_generated/tokens.css — ${String(Object.keys(tokens).length)} tokens, ` +
668
+ `thread: wrote ${STYLESHEET} and ${DECLARED} — ${String(Object.keys(tokens).length)} tokens, ` +
663
669
  `${String(guide.picks.length)} values, ${String(Object.keys(materials).length)} materials, ` +
664
670
  `${String(Object.keys(variants).length)} variants, ${String(inside(fonts).length - 1)} font roles, ` +
665
671
  `${String(Object.keys(animations).length)} animations, ${String(modes.length)} modes, ` +
@@ -4,7 +4,7 @@ import { argv, stdout } from 'node:process';
4
4
  import { exit, invoked } from '@prestack/thread/core/invoked';
5
5
  import { valuesIn } from '@prestack/thread/core/rows';
6
6
  import { findTree, inTree } from '@prestack/thread/core/tree';
7
- import { HOME, settled, undeclared } from './compositions.js';
7
+ import { HOME, SCREENED_BY, settled, undeclared } from './compositions.js';
8
8
  import { PRESENTATIONS } from './door.js';
9
9
  const here = 'thread/ui/screens.ts';
10
10
  const said = [
@@ -100,7 +100,7 @@ function run() {
100
100
  stdout.write(`thread: seeded ${one.path}\n`);
101
101
  }
102
102
  }
103
- const loose = [...undeclared(tree, rows), ...settled(tree.at, rows, checking, 'thread screens', new Set())];
103
+ const loose = [...undeclared(tree, rows), ...settled(tree.at, rows, checking, SCREENED_BY, new Set())];
104
104
  for (const one of loose)
105
105
  stdout.write(`thread: ${one}\n`);
106
106
  stdout.write(`thread: ${String(rows.length)} screen(s) declared, ${String(made.length)} seeded, ` +
@@ -7,7 +7,7 @@ import { valuesIn } from '@prestack/thread/core/rows'
7
7
  import type { Threaded } from '@prestack/thread/core/thread'
8
8
  import { findTree, inTree } from '@prestack/thread/core/tree'
9
9
 
10
- import { HOME, settled, undeclared } from './compositions.ts'
10
+ import { HOME, SCREENED_BY, settled, undeclared } from './compositions.ts'
11
11
  import { PRESENTATIONS } from './door.ts'
12
12
 
13
13
  const here = 'thread/ui/screens.ts'
@@ -127,7 +127,7 @@ function run(): number {
127
127
  }
128
128
  }
129
129
 
130
- const loose = [...undeclared(tree, rows), ...settled(tree.at, rows, checking, 'thread screens', new Set<string>())]
130
+ const loose = [...undeclared(tree, rows), ...settled(tree.at, rows, checking, SCREENED_BY, new Set<string>())]
131
131
  for (const one of loose) stdout.write(`thread: ${one}\n`)
132
132
 
133
133
  stdout.write(
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@prestack/thread-ui",
3
- "version": "0.1.7",
3
+ "version": "0.1.8",
4
4
  "type": "module",
5
5
  "files": [
6
6
  "dist",
@@ -17,6 +17,6 @@
17
17
  "react-dom": "^19.0.0",
18
18
  "typescript": "^6.0.0",
19
19
  "zod": "^4.5.4",
20
- "@prestack/thread": "^0.1.18"
20
+ "@prestack/thread": "^0.1.19"
21
21
  }
22
22
  }