@davidsouther/jiffies 2026.4.1 → 2026.24.0

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 (121) hide show
  1. package/README.md +0 -3
  2. package/package.json +11 -6
  3. package/src/404.html +1 -1
  4. package/src/components/accordion.ts +25 -0
  5. package/src/components/alert.ts +47 -0
  6. package/src/components/card.ts +54 -0
  7. package/src/components/children.ts +11 -0
  8. package/src/components/form.ts +25 -0
  9. package/src/components/index.ts +22 -0
  10. package/src/components/link.ts +22 -0
  11. package/src/components/modal.ts +15 -0
  12. package/src/components/nav.ts +42 -0
  13. package/src/components/property.ts +32 -0
  14. package/src/components/tabs.ts +82 -0
  15. package/src/components/virtual_scroll.ts +1 -1
  16. package/src/dom/README.md +7 -2
  17. package/src/dom/SKILL.md +201 -0
  18. package/src/dom/dom.ts +185 -41
  19. package/src/dom/fc.ts +3 -2
  20. package/src/dom/form/form.app.ts +35 -41
  21. package/src/dom/form/form.ts +79 -10
  22. package/src/dom/form/index.html +2 -2
  23. package/src/dom/hydrate.ts +206 -0
  24. package/src/dom/navigation/index.ts +349 -0
  25. package/src/dom/render.ts +41 -0
  26. package/src/dom/svg.ts +6 -2
  27. package/src/fs_node.ts +2 -2
  28. package/src/log.ts +154 -2
  29. package/src/server/http/response.ts +6 -3
  30. package/src/server/http/sitemap.ts +10 -34
  31. package/src/server/http/static.ts +0 -2
  32. package/src/server/live-reload.ts +208 -0
  33. package/src/server/main.ts +14 -7
  34. package/src/server/ws/frame.ts +36 -0
  35. package/src/server/ws/handshake.ts +42 -0
  36. package/src/server/ws/index.ts +100 -0
  37. package/src/ssg/bundle.ts +85 -0
  38. package/src/ssg/copy-public.ts +44 -0
  39. package/src/ssg/discover.ts +143 -0
  40. package/src/ssg/main.ts +168 -0
  41. package/src/ssg/rewrite.ts +18 -0
  42. package/src/ssg/ssg.ts +134 -0
  43. package/src/components/test.ts +0 -5
  44. package/src/components/virtual_scroll.test.ts +0 -30
  45. package/src/context.test.ts +0 -58
  46. package/src/context.ts +0 -67
  47. package/src/diff.test.ts +0 -48
  48. package/src/dom/fc.test.ts +0 -43
  49. package/src/dom/form/form.test.ts +0 -0
  50. package/src/dom/html.test.ts +0 -74
  51. package/src/dom/observable.test.ts +0 -43
  52. package/src/dom/test.ts +0 -11
  53. package/src/equal.test.ts +0 -23
  54. package/src/flags.test.ts +0 -43
  55. package/src/flags.ts +0 -53
  56. package/src/fs.test.ts +0 -106
  57. package/src/fs_win.test.ts +0 -11
  58. package/src/generator.test.ts +0 -27
  59. package/src/index.html +0 -82
  60. package/src/is_browser.js +0 -1
  61. package/src/lock.test.ts +0 -17
  62. package/src/observable/observable.test.ts +0 -73
  63. package/src/pico/_variables.scss +0 -66
  64. package/src/pico/components/_accordion.scss +0 -112
  65. package/src/pico/components/_button-group.scss +0 -51
  66. package/src/pico/components/_card.scss +0 -47
  67. package/src/pico/components/_dropdown.scss +0 -203
  68. package/src/pico/components/_modal.scss +0 -181
  69. package/src/pico/components/_nav.scss +0 -79
  70. package/src/pico/components/_progress.scss +0 -70
  71. package/src/pico/components/_property.scss +0 -34
  72. package/src/pico/content/_button.scss +0 -152
  73. package/src/pico/content/_code.scss +0 -63
  74. package/src/pico/content/_embedded.scss +0 -0
  75. package/src/pico/content/_form-alt.scss +0 -276
  76. package/src/pico/content/_form.scss +0 -259
  77. package/src/pico/content/_misc.scss +0 -0
  78. package/src/pico/content/_table.scss +0 -28
  79. package/src/pico/content/_toggle.scss +0 -132
  80. package/src/pico/content/_typography.scss +0 -232
  81. package/src/pico/layout/_container.scss +0 -40
  82. package/src/pico/layout/_document.scss +0 -0
  83. package/src/pico/layout/_flex.scss +0 -46
  84. package/src/pico/layout/_grid.scss +0 -24
  85. package/src/pico/layout/_scroller.scss +0 -16
  86. package/src/pico/layout/_section.scss +0 -8
  87. package/src/pico/layout/_sectioning.scss +0 -55
  88. package/src/pico/pico.scss +0 -60
  89. package/src/pico/reset/_accessibility.scss +0 -34
  90. package/src/pico/reset/_button.scss +0 -17
  91. package/src/pico/reset/_code.scss +0 -15
  92. package/src/pico/reset/_document.scss +0 -48
  93. package/src/pico/reset/_embedded.scss +0 -39
  94. package/src/pico/reset/_form.scss +0 -97
  95. package/src/pico/reset/_misc.scss +0 -23
  96. package/src/pico/reset/_nav.scss +0 -5
  97. package/src/pico/reset/_progress.scss +0 -4
  98. package/src/pico/reset/_table.scss +0 -8
  99. package/src/pico/reset/_typography.scss +0 -25
  100. package/src/pico/themes/default/_colors.scss +0 -65
  101. package/src/pico/themes/default/_dark.scss +0 -148
  102. package/src/pico/themes/default/_light.scss +0 -149
  103. package/src/pico/themes/default/_styles.scss +0 -272
  104. package/src/pico/themes/default.scss +0 -34
  105. package/src/pico/utilities/_accessibility.scss +0 -3
  106. package/src/pico/utilities/_loading.scss +0 -52
  107. package/src/pico/utilities/_reduce-motion.scss +0 -27
  108. package/src/pico/utilities/_tooltip.scss +0 -101
  109. package/src/result.test.ts +0 -101
  110. package/src/scope/describe.ts +0 -81
  111. package/src/scope/display/console.ts +0 -26
  112. package/src/scope/display/dom.ts +0 -36
  113. package/src/scope/display/junit.ts +0 -64
  114. package/src/scope/execute.ts +0 -110
  115. package/src/scope/expect.ts +0 -169
  116. package/src/scope/fix.ts +0 -30
  117. package/src/scope/index.ts +0 -11
  118. package/src/scope/scope.ts +0 -21
  119. package/src/scope/state.ts +0 -13
  120. package/src/test.mjs +0 -33
  121. package/src/test_all.ts +0 -35
@@ -1,181 +0,0 @@
1
- :root {
2
- --scrollbar-width: 0px;
3
- }
4
-
5
- dialog {
6
- display: flex;
7
- z-index: 999;
8
- position: fixed;
9
- top: 0;
10
- right: 0;
11
- bottom: 0;
12
- left: 0;
13
- align-items: center;
14
- justify-content: center;
15
- width: inherit;
16
- min-width: 100%;
17
- height: inherit;
18
- min-height: 100%;
19
- padding: var(--spacing);
20
- border: 0;
21
- background-color: var(--modal-overlay-background-color);
22
-
23
- // Content
24
- article {
25
- max-height: calc(100vh - var(--spacing) * 2);
26
- width: calc(100vw - var(--spacing) * 2);
27
- overflow: auto;
28
-
29
- @if map-get($breakpoints, "sm") {
30
- @media (min-width: map-get($breakpoints, "sm")) {
31
- width: map-get($viewports, "sm");
32
- }
33
- }
34
-
35
- @if map-get($breakpoints, "md") {
36
- @media (min-width: map-get($breakpoints, "md")) {
37
- width: map-get($viewports, "md");
38
- }
39
- }
40
-
41
- @if map-get($breakpoints, "lg") {
42
- @media (min-width: map-get($breakpoints, "lg")) {
43
- width: map-get($viewports, "lg");
44
- }
45
- }
46
-
47
- @if map-get($breakpoints, "xl") {
48
- @media (min-width: map-get($breakpoints, "xl")) {
49
- width: map-get($viewports, "xl");
50
- }
51
- }
52
-
53
- > header,
54
- > footer {
55
- padding: calc(var(--block-spacing-vertical) * 0.5)
56
- var(--block-spacing-horizontal);
57
- }
58
-
59
- > header {
60
- .close {
61
- margin: 0;
62
- margin-left: var(--spacing);
63
- float: right;
64
- }
65
- }
66
-
67
- > footer {
68
- text-align: right;
69
-
70
- [role="button"] {
71
- margin-bottom: 0;
72
-
73
- &:not(:first-of-type) {
74
- margin-left: calc(var(--spacing) * 0.5);
75
- }
76
- }
77
- }
78
-
79
- p {
80
- &:last-of-type {
81
- margin: 0;
82
- }
83
- }
84
-
85
- // Close icon
86
- @if $enable-classes {
87
- .close {
88
- display: block;
89
- width: 1rem;
90
- height: 1rem;
91
- margin-top: calc(var(--block-spacing-vertical) * -0.5);
92
- margin-bottom: var(--typography-spacing-vertical);
93
- margin-left: auto;
94
- background-image: var(--icon-close);
95
- background-position: center;
96
- background-size: auto 1rem;
97
- background-repeat: no-repeat;
98
- opacity: 0.5;
99
-
100
- @if $enable-transitions {
101
- transition: opacity var(--transition);
102
- }
103
-
104
- &:is([aria-current], :hover, :active, :focus) {
105
- opacity: 1;
106
- }
107
- }
108
- }
109
- }
110
-
111
- // Closed state
112
- &:not([open]),
113
- &[open="false"] {
114
- display: none;
115
- }
116
- }
117
-
118
- // Utilities
119
- @if $enable-classes {
120
- .modal-is-open {
121
- padding-right: var(--scrollbar-width, 0px);
122
- overflow: hidden;
123
- pointer-events: none;
124
-
125
- dialog {
126
- pointer-events: auto;
127
- }
128
- }
129
- }
130
-
131
- // Animations
132
- @if ($enable-classes and $enable-transitions) {
133
- $animation-duration: 0.2s;
134
-
135
- :where(.modal-is-opening, .modal-is-closing) {
136
- dialog,
137
- dialog > article {
138
- animation-duration: $animation-duration;
139
- animation-timing-function: ease-in-out;
140
- animation-fill-mode: both;
141
- }
142
-
143
- dialog {
144
- animation-duration: ($animation-duration * 4);
145
- animation-name: fadeIn;
146
-
147
- > article {
148
- animation-delay: $animation-duration;
149
- animation-name: slideInDown;
150
- }
151
- }
152
- }
153
-
154
- .modal-is-closing {
155
- dialog,
156
- dialog > article {
157
- animation-delay: 0s;
158
- animation-direction: reverse;
159
- }
160
- }
161
-
162
- @keyframes fadeIn {
163
- from {
164
- background-color: transparent;
165
- }
166
- to {
167
- background-color: var(--modal-overlay-background-color);
168
- }
169
- }
170
-
171
- @keyframes slideInDown {
172
- from {
173
- transform: translateY(-100%);
174
- opacity: 0;
175
- }
176
- to {
177
- transform: translateY(0);
178
- opacity: 1;
179
- }
180
- }
181
- }
@@ -1,79 +0,0 @@
1
- nav,
2
- nav ul {
3
- display: flex;
4
- }
5
-
6
- nav {
7
- justify-content: space-between;
8
-
9
- ol,
10
- ul {
11
- align-items: center;
12
- margin-bottom: 0;
13
- padding: 0;
14
- list-style: none;
15
-
16
- &:first-of-type {
17
- margin-left: calc(var(--nav-element-spacing-horizontal) * -1);
18
- }
19
- &:last-of-type {
20
- margin-right: calc(var(--nav-element-spacing-horizontal) * -1);
21
- }
22
- }
23
-
24
- li {
25
- display: inline-block;
26
- margin: 0;
27
- padding: var(--nav-element-spacing-vertical)
28
- var(--nav-element-spacing-horizontal);
29
-
30
- // Minimal support for buttons and forms elements
31
- > * {
32
- --spacing: 0;
33
- }
34
- }
35
-
36
- :where(a, [role="link"]) {
37
- display: inline-block;
38
- margin: calc(var(--nav-link-spacing-vertical) * -1)
39
- calc(var(--nav-link-spacing-horizontal) * -1);
40
- padding: var(--nav-link-spacing-vertical) var(--nav-link-spacing-horizontal);
41
- border-radius: var(--border-radius);
42
- text-decoration: none;
43
-
44
- &:is([aria-current], :hover, :active, :focus) {
45
- text-decoration: none;
46
- }
47
- }
48
-
49
- // Minimal support for role="button"
50
- [role="button"] {
51
- margin-right: inherit;
52
- margin-left: inherit;
53
- padding: var(--nav-link-spacing-vertical) var(--nav-link-spacing-horizontal);
54
- }
55
- }
56
-
57
- // Vertical Nav
58
- aside {
59
- nav,
60
- ol,
61
- ul,
62
- li {
63
- display: block;
64
- }
65
-
66
- li {
67
- padding: calc(var(--nav-element-spacing-vertical) * 0.5)
68
- var(--nav-element-spacing-horizontal);
69
-
70
- a {
71
- display: block;
72
- }
73
-
74
- // Minimal support for links as buttons
75
- [role="button"] {
76
- margin: inherit;
77
- }
78
- }
79
- }
@@ -1,70 +0,0 @@
1
- progress {
2
- // Reset the default appearance
3
- -webkit-appearance: none;
4
- -moz-appearance: none;
5
-
6
- // Styles
7
- display: inline-block;
8
- appearance: none;
9
- width: 100%;
10
- height: 0.5rem;
11
- margin-bottom: calc(var(--spacing) * 0.5);
12
- overflow: hidden;
13
-
14
- // Remove Firefox and Opera border
15
- border: 0;
16
- border-radius: var(--border-radius);
17
- background-color: var(--progress-background-color);
18
-
19
- // IE10 uses `color` to set the bar background-color
20
- color: var(--progress-color);
21
-
22
- &::-webkit-progress-bar {
23
- border-radius: var(--border-radius);
24
- background: none;
25
- }
26
- &[value]::-webkit-progress-value {
27
- background-color: var(--progress-color);
28
- }
29
- &::-moz-progress-bar {
30
- background-color: var(--progress-color);
31
- }
32
-
33
- // Indeterminate state
34
- @media (prefers-reduced-motion: no-preference) {
35
- &:indeterminate {
36
- background: var(--progress-background-color)
37
- linear-gradient(
38
- to right,
39
- var(--progress-color) 30%,
40
- var(--progress-background-color) 30%
41
- )
42
- top left / 150% 150% no-repeat;
43
- animation: progressIndeterminate 1s linear infinite;
44
-
45
- &[value]::-webkit-progress-value {
46
- background-color: transparent;
47
- }
48
- &::-moz-progress-bar {
49
- background-color: transparent;
50
- }
51
- }
52
- }
53
- }
54
-
55
- [dir="rtl"] {
56
- @media (prefers-reduced-motion: no-preference) {
57
- progress:indeterminate {
58
- animation-direction: reverse;
59
- }
60
- }
61
- }
62
-
63
- @keyframes progressIndeterminate {
64
- 0% {
65
- background-position: 200% 0;
66
- }
67
- 100% {
68
- background-position: -200% 0;
69
- }
70
- }
@@ -1,34 +0,0 @@
1
- dl {
2
- display: grid;
3
- grid-template-columns: minmax(max-content, 1fr) minmax(auto, 2fr);
4
- }
5
-
6
- dt {
7
- grid-column-start: 1;
8
- }
9
-
10
- dd {
11
- grid-column-start: 2;
12
- margin: 0;
13
- }
14
-
15
- dl > header {
16
- grid-column: 1 / span 2;
17
- font-weight: bold;
18
- background-color: var(--muted-color);
19
- color: var(--primary-inverse);
20
- padding: var(--form-element-spacing-vertical)
21
- var(--form-element-spacing-horizontal);
22
- }
23
-
24
- dd,
25
- dt {
26
- padding: var(--form-element-spacing-vertical)
27
- var(--form-element-spacing-horizontal);
28
- border: 1px solid var(--muted-border-color);
29
- }
30
-
31
- dd:nth-of-type(even),
32
- dt:nth-of-type(even) {
33
- background-color: var(--table-row-stripped-background-color);
34
- }
@@ -1,152 +0,0 @@
1
- button {
2
- display: block;
3
- width: 100%;
4
- margin-bottom: var(--spacing);
5
- }
6
-
7
- [role="button"] {
8
- display: inline-block;
9
- text-decoration: none;
10
- }
11
-
12
- button,
13
- input[type="submit"],
14
- input[type="button"],
15
- input[type="reset"],
16
- [role="button"] {
17
- --background-color: var(--primary);
18
- --border-color: var(--primary);
19
- --color: var(--primary-inverse);
20
- --box-shadow: var(--button-box-shadow, 0 0 0 rgba(0, 0, 0, 0));
21
- padding: var(--form-element-spacing-vertical)
22
- var(--form-element-spacing-horizontal);
23
- border: var(--border-width) solid var(--border-color);
24
- border-radius: var(--border-radius);
25
- outline: none;
26
- background-color: var(--background-color);
27
- box-shadow: var(--box-shadow);
28
- color: var(--color);
29
- font-weight: var(--font-weight);
30
- font-size: 1rem;
31
- line-height: var(--line-height);
32
- text-align: center;
33
- cursor: pointer;
34
-
35
- @if $enable-transitions {
36
- transition: background-color var(--transition),
37
- border-color var(--transition), color var(--transition),
38
- box-shadow var(--transition);
39
- }
40
-
41
- &:is([aria-current], :hover, :active, :focus) {
42
- --background-color: var(--primary-hover);
43
- --border-color: var(--primary-hover);
44
- --box-shadow: var(--button-hover-box-shadow, 0 0 0 rgba(0, 0, 0, 0));
45
- --color: var(--primary-inverse);
46
- }
47
-
48
- &:focus {
49
- --box-shadow: var(--button-hover-box-shadow, 0 0 0 rgba(0, 0, 0, 0)),
50
- 0 0 0 var(--outline-width) var(--primary-focus);
51
- }
52
- }
53
-
54
- // .secondary, .contrast & .outline
55
- @if $enable-classes {
56
- // Secondary
57
- :is(button, input[type="submit"], input[type="button"], [role="button"]).secondary,
58
- input[type="reset"] {
59
- --background-color: var(--secondary);
60
- --border-color: var(--secondary);
61
- --color: var(--secondary-inverse);
62
- cursor: pointer;
63
-
64
- &:is([aria-current], :hover, :active, :focus) {
65
- --background-color: var(--secondary-hover);
66
- --border-color: var(--secondary-hover);
67
- --color: var(--secondary-inverse);
68
- }
69
-
70
- &:focus {
71
- --box-shadow: var(--button-hover-box-shadow, 0 0 0 rgba(0, 0, 0, 0)),
72
- 0 0 0 var(--outline-width) var(--secondary-focus);
73
- }
74
- }
75
-
76
- // Contrast
77
- :is(button, input[type="submit"], input[type="button"], [role="button"]).contrast {
78
- --background-color: var(--contrast);
79
- --border-color: var(--contrast);
80
- --color: var(--contrast-inverse);
81
-
82
- &:is([aria-current], :hover, :active, :focus) {
83
- --background-color: var(--contrast-hover);
84
- --border-color: var(--contrast-hover);
85
- --color: var(--contrast-inverse);
86
- }
87
-
88
- &:focus {
89
- --box-shadow: var(--button-hover-box-shadow, 0 0 0 rgba(0, 0, 0, 0)),
90
- 0 0 0 var(--outline-width) var(--contrast-focus);
91
- }
92
- }
93
-
94
- // Outline (primary)
95
- :is(button, input[type="submit"], input[type="button"], [role="button"]).outline,
96
- input[type="reset"].outline {
97
- --background-color: transparent;
98
- --color: var(--primary);
99
-
100
- &:is([aria-current], :hover, :active, :focus) {
101
- --background-color: transparent;
102
- --color: var(--primary-hover);
103
- }
104
- }
105
-
106
- // Outline (secondary)
107
- :is(button, input[type="submit"], input[type="button"], [role="button"]).outline.secondary,
108
- input[type="reset"].outline {
109
- --color: var(--secondary);
110
-
111
- &:is([aria-current], :hover, :active, :focus) {
112
- --color: var(--secondary-hover);
113
- }
114
- }
115
-
116
- // Outline (contrast)
117
- :is(button, input[type="submit"], input[type="button"], [role="button"]).outline.contrast {
118
- --color: var(--contrast);
119
-
120
- &:is([aria-current], :hover, :active, :focus) {
121
- --color: var(--contrast-hover);
122
- }
123
- }
124
- } @else {
125
- // Secondary button without .class
126
- input[type="reset"] {
127
- --background-color: var(--secondary);
128
- --border-color: var(--secondary);
129
- --color: var(--secondary-inverse);
130
- cursor: pointer;
131
-
132
- &:is([aria-current], :hover, :active, :focus) {
133
- --background-color: var(--secondary-hover);
134
- --border-color: var(--secondary-hover);
135
- }
136
-
137
- &:focus {
138
- --box-shadow: var(--button-hover-box-shadow, 0 0 0 rgba(0, 0, 0, 0)),
139
- 0 0 0 var(--outline-width) var(--secondary-focus);
140
- }
141
- }
142
- }
143
-
144
- // Button [disabled]
145
- // Links without href are disabled by default
146
- :where(button, [type="submit"], [type="button"], [type="reset"], [role="button"])[disabled],
147
- :where(fieldset[disabled])
148
- :is(button, [type="submit"], [type="button"], [type="reset"], [role="button"]),
149
- a[role="button"]:not([href]) {
150
- opacity: 0.5;
151
- pointer-events: none;
152
- }
@@ -1,63 +0,0 @@
1
- pre,
2
- code,
3
- kbd {
4
- border-radius: var(--border-radius);
5
- background: var(--code-background-color);
6
- color: var(--code-color);
7
- font-weight: var(--font-weight);
8
- line-height: initial;
9
- }
10
-
11
- code,
12
- kbd {
13
- display: inline-block;
14
- padding: 0.375rem 0.5rem;
15
- }
16
-
17
- pre {
18
- display: block;
19
- margin-bottom: var(--spacing);
20
- overflow-x: auto;
21
-
22
- > code {
23
- display: block;
24
- padding: var(--spacing);
25
- background: none;
26
- font-size: 14px;
27
- line-height: var(--line-height);
28
- }
29
- }
30
-
31
- // Code Syntax
32
- code {
33
- // Tags
34
- b {
35
- color: var(--code-tag-color);
36
- font-weight: var(--font-weight);
37
- }
38
-
39
- // Properties
40
- i {
41
- color: var(--code-property-color);
42
- font-style: normal;
43
- }
44
-
45
- // Values
46
- u {
47
- color: var(--code-value-color);
48
- text-decoration: none;
49
- }
50
-
51
- // Comments
52
- em {
53
- color: var(--code-comment-color);
54
- font-style: normal;
55
- }
56
- }
57
-
58
- // kbd
59
- kbd {
60
- background-color: var(--code-kbd-background-color);
61
- color: var(--code-kbd-color);
62
- vertical-align: baseline;
63
- }
File without changes