@atom.io/template-solid-lossless-numbers 0.0.40 → 0.0.41

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/.oxlintrc.json ADDED
@@ -0,0 +1,4 @@
1
+ {
2
+ "$schema": "./node_modules/oxlint/configuration_schema.json",
3
+ "extends": ["./node_modules/atom.io/oxlint.json"]
4
+ }
@@ -1,10 +1,11 @@
1
1
  $ vite build
2
- vite v8.2.1 building client environment for production...
3
- 
2
+ vite v8.2.2 building client environment for production...
3
+ transforming...
4
+ ✓ 22 modules transformed.
4
5
  rendering chunks...
5
6
  computing gzip size...
6
- dist/index.html 0.39 kB │ gzip: 0.27 kB
7
- dist/assets/index-DMbEQKRi.css 3.29 kB │ gzip: 1.11 kB
8
- dist/assets/index-COTc-raj.js 83.89 kB │ gzip: 24.65 kB
7
+ dist/index.html 0.39 kB │ gzip: 0.28 kB
8
+ dist/assets/index-DtvSwENK.css 3.86 kB │ gzip: 1.14 kB
9
+ dist/assets/index-C68zAp4F.js 84.19 kB │ gzip: 24.68 kB
9
10
 
10
- ✓ built in 955ms
11
+ ✓ built in 451ms
package/CHANGELOG.md CHANGED
@@ -1,5 +1,15 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.0.41
4
+
5
+ ### Patch Changes
6
+
7
+ - 88f81c3: Use Lasertag's semantic Solid JSX declarations instead of maintaining a handwritten intrinsic-element shim.
8
+ - 88f81c3: Give every released template a pinned, standalone Oxlint, ESLint, TypeScript, and dprint quality baseline with zero-warning scripts and a single canonical configuration shipped at the atom.io package root.
9
+ - Updated dependencies [98d897b]
10
+ - Updated dependencies [88f81c3]
11
+ - atom.io@0.52.2
12
+
3
13
  ## 0.0.40
4
14
 
5
15
  ### Patch Changes
package/README.md CHANGED
@@ -23,6 +23,10 @@ npm run build
23
23
  npm run preview
24
24
  ```
25
25
 
26
+ ## Quality Checks
27
+
28
+ Run `npm run lint` before committing. It enforces ESLint, type-aware Oxlint, and TypeScript with zero warnings. Run `npm run fmt:check` in CI and `npm run fmt` to apply the pinned dprint configuration locally.
29
+
26
30
  ## Where To Look
27
31
 
28
32
  - `src/App.tsx`: the atom.io state model, Solid components, and rational arithmetic UI.
package/_gitignore CHANGED
@@ -1,3 +1,4 @@
1
1
  node_modules
2
2
  dist
3
3
  .DS_Store
4
+ *.tsbuildinfo
@@ -0,0 +1 @@
1
+ :root{--bg:#f6f1e8;--bg-deep:#efe3d0;--panel:#fffcf7db;--panel-strong:#fffaf2;--ink:#172433;--muted:#5d6670;--gold:#d88d1f;--gold-soft:#f5d8a5;--mint:#bfd7c2;--line:#17243324;--shadow:0 24px 80px #3721081f;--radius-xl:28px;--radius-lg:20px;--radius-md:14px;--radius-sm:10px;color:var(--ink);background:radial-gradient(circle at top left, #d88d1f29, transparent 28%), radial-gradient(circle at right center, #1724331f, transparent 30%), linear-gradient(180deg, var(--bg) 0%, var(--bg-deep) 100%);font-family:Iowan Old Style,Palatino Linotype,Book Antiqua,Palatino,serif}*{box-sizing:border-box}html,body,#app{min-height:100%;margin:0}body{min-height:100svh}button,input,select{font:inherit}button,select,input{border:1px solid var(--line);border-radius:var(--radius-sm)}button:hover{transform:translateY(-1px);box-shadow:0 12px 28px #17243324}button:disabled{cursor:not-allowed;opacity:.45;box-shadow:none;transform:none}button.secondary,button.ghost-button{color:var(--ink);background:0 0}button.secondary{border-style:dashed}button.ghost-button{padding-inline:.85rem}input,select{background:#ffffffbf;width:100%;padding:.75rem .85rem}code{font-family:SFMono-Regular,Cascadia Code,Fira Code,Menlo,Consolas,monospace;font-size:.9em}rationality-app._class_14ekc_1{--line:#17243324}rationality-app._class_14ekc_1,rationality-app._class_14ekc_1 *{display:flex}rationality-app._class_14ekc_1{flex-direction:column}rationality-app._class_14ekc_1 rational-fraction,rationality-app._class_14ekc_1 fieldset{border:none;flex-flow:column;padding:0;font-size:24px}:is(rationality-app._class_14ekc_1 rational-fraction,rationality-app._class_14ekc_1 fieldset)>rational-numerator,:is(rationality-app._class_14ekc_1 rational-fraction,rationality-app._class_14ekc_1 fieldset)>rational-denominator,:is(rationality-app._class_14ekc_1 rational-fraction,rationality-app._class_14ekc_1 fieldset)>input{flex-grow:1;justify-content:center;align-items:center;height:36px;margin:0}:is(:is(rationality-app._class_14ekc_1 rational-fraction,rationality-app._class_14ekc_1 fieldset)>rational-numerator,:is(rationality-app._class_14ekc_1 rational-fraction,rationality-app._class_14ekc_1 fieldset)>rational-denominator,:is(rationality-app._class_14ekc_1 rational-fraction,rationality-app._class_14ekc_1 fieldset)>input)[data-css=one]{color:#0002}:is(rationality-app._class_14ekc_1 rational-fraction,rationality-app._class_14ekc_1 fieldset)>rational-solidus{background:#000;height:2px}rationality-app._class_14ekc_1>header{justify-content:space-between;align-items:center;padding:12px}rationality-app._class_14ekc_1>header>button{justify-content:center;align-items:center}rationality-app._class_14ekc_1>main{flex-flow:column;gap:2px;padding:2px}rationality-app._class_14ekc_1>main>rational-breakdown{border:1px solid #0002;padding:2px 12px}rationality-app._class_14ekc_1>main>rational-breakdown>fraction-list{flex-grow:1}rationality-app._class_14ekc_1>main>rational-breakdown>fraction-list>rational-plus{color:#0002;align-items:center;font-size:30px}rationality-app._class_14ekc_1>main>rational-breakdown>fraction-list>infix-buttons{flex-flow:column}rationality-app._class_14ekc_1>main>rational-breakdown>rational-equals{color:#0002;align-items:center;font-size:48px}rationality-app._class_14ekc_1>main>rational-breakdown>rational-quotient{align-items:center;font-size:48px;position:relative}rationality-app._class_14ekc_1>main>rational-breakdown>rational-quotient>quotient-bits{flex-wrap:wrap;place-content:flex-start;place-items:flex-start;width:40px;position:absolute;top:0;right:0}rationality-app._class_14ekc_1>main>rational-breakdown>rational-quotient>quotient-bits>quotient-bit{background:0 0;border:1px solid #0002;flex-grow:0;flex-shrink:0;width:5px;height:5px}rationality-app._class_14ekc_1>main>rational-breakdown>rational-quotient>quotient-bits>quotient-bit[data-css=one]{background:#0002}
package/dist/index.html CHANGED
@@ -7,8 +7,8 @@
7
7
  content="width=device-width, initial-scale=1.0"
8
8
  />
9
9
  <title>Rationality Playground</title>
10
- <script type="module" crossorigin src="/assets/index-COTc-raj.js"></script>
11
- <link rel="stylesheet" crossorigin href="/assets/index-DMbEQKRi.css">
10
+ <script type="module" crossorigin src="/assets/index-C68zAp4F.js"></script>
11
+ <link rel="stylesheet" crossorigin href="/assets/index-DtvSwENK.css">
12
12
  </head>
13
13
  <body>
14
14
  <div id="app"></div>
package/dprint.json ADDED
@@ -0,0 +1,33 @@
1
+ {
2
+ "$schema": "https://dprint.dev/schemas/v0.json",
3
+ "lineWidth": 81,
4
+ "useTabs": true,
5
+ "indentWidth": 2,
6
+ "includes": ["**/*.{ts,tsx,js,jsx,mjs,cjs,json,jsonc,md,mdx,css}"],
7
+ "excludes": [
8
+ "**/dist/**",
9
+ "**/node_modules/**",
10
+ "**/playwright-report/**",
11
+ "**/test-results/**"
12
+ ],
13
+ "oxc": {
14
+ "associations": ["**/*.{ts,tsx,js,jsx,mjs,cjs}"],
15
+ "semicolons": "asNeeded",
16
+ "trailingCommas": "all"
17
+ },
18
+ "json": {
19
+ "associations": ["**/*.{json,jsonc}"]
20
+ },
21
+ "markdown": {
22
+ "associations": ["**/*.{md,mdx}"]
23
+ },
24
+ "malva": {
25
+ "associations": ["**/*.css"]
26
+ },
27
+ "plugins": [
28
+ "./node_modules/@dprint/oxc/plugin.wasm",
29
+ "./node_modules/@dprint/json/plugin.wasm",
30
+ "./node_modules/@dprint/markdown/plugin.wasm",
31
+ "./node_modules/dprint-plugin-malva/plugin.wasm"
32
+ ]
33
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atom.io/template-solid-lossless-numbers",
3
- "version": "0.0.40",
3
+ "version": "0.0.41",
4
4
  "license": "Apache-2.0",
5
5
  "publishConfig": {
6
6
  "access": "public"
@@ -12,20 +12,34 @@
12
12
  },
13
13
  "type": "module",
14
14
  "dependencies": {
15
- "rationality": "0.1.0",
16
- "solid-js": "1.9.15",
17
- "atom.io": "0.52.1"
15
+ "atom.io": "0.52.2",
16
+ "rationality": "0.1.1",
17
+ "solid-js": "1.9.15"
18
18
  },
19
19
  "devDependencies": {
20
- "@types/node": "26.2.0",
21
- "eslint": "10.8.1",
20
+ "@dprint/json": "0.23.0",
21
+ "@dprint/markdown": "0.23.2",
22
+ "@dprint/oxc": "0.37.0",
23
+ "@types/node": "26.4.0",
24
+ "dprint": "0.56.1",
25
+ "dprint-plugin-malva": "0.16.0",
26
+ "eslint": "10.9.1",
27
+ "lasertag": "0.7.0",
28
+ "oxlint": "1.80.0",
29
+ "oxlint-tsgolint": "7.0.2001",
22
30
  "typescript": "7.0.2",
23
- "vite": "8.2.1",
31
+ "vite": "8.2.2",
24
32
  "vite-plugin-solid": "2.11.14"
25
33
  },
26
34
  "scripts": {
27
35
  "dev": "vite",
28
36
  "build": "vite build",
37
+ "fmt": "dprint fmt .",
38
+ "fmt:check": "dprint check .",
39
+ "lint": "npm run lint:eslint && npm run lint:oxlint && npm run lint:types",
40
+ "lint:eslint": "eslint --max-warnings 0 .",
41
+ "lint:oxlint": "oxlint --deny-warnings .",
42
+ "lint:types": "tsc -b",
29
43
  "preview": "vite preview"
30
44
  }
31
45
  }
package/src/App.tsx CHANGED
@@ -124,7 +124,7 @@ const combineIntoRationalTransaction = transaction<
124
124
  export function App(): JSX.Element {
125
125
  const rationals = useO(rationalListAtom)
126
126
  return (
127
- <app class={css.class}>
127
+ <rationality-app class={css.class}>
128
128
  <header>
129
129
  <h1>Rationality Playground</h1>
130
130
  </header>
@@ -153,7 +153,7 @@ export function App(): JSX.Element {
153
153
  </button>
154
154
  </new-rational>
155
155
  </main>
156
- </app>
156
+ </rationality-app>
157
157
  )
158
158
  }
159
159
 
@@ -172,7 +172,7 @@ export function RationalBreakdown(props: { key: RationalKey }): JSX.Element {
172
172
  return (
173
173
  <>
174
174
  <Show when={index() !== 0}>
175
- <plus>+</plus>
175
+ <rational-plus>+</rational-plus>
176
176
  </Show>
177
177
  <Fraction numerator={numerator} denominator={denominator} />
178
178
  </>
@@ -216,17 +216,21 @@ export function RationalBreakdown(props: { key: RationalKey }): JSX.Element {
216
216
  <RationalCombineFields key={props.key} />
217
217
  </fraction-list>
218
218
 
219
- <equals>=</equals>
219
+ <rational-equals>=</rational-equals>
220
220
  <Fraction numerator={simplified()[0]} denominator={simplified()[1]} />
221
- <equals>{isFloatPrecise() ? `=` : `≈`}</equals>
222
- <quotient>
221
+ <rational-equals>{isFloatPrecise() ? `=` : `≈`}</rational-equals>
222
+ <rational-quotient>
223
223
  <quotient-bits>
224
224
  <For each={bits()}>
225
- {(bit) => <bit data-css={bit === `1` ? `one` : undefined} />}
225
+ {(bit) => (
226
+ <quotient-bit data-css={bit === `1` ? `one` : undefined} />
227
+ )}
226
228
  </For>
227
229
  </quotient-bits>
228
- <number>{isFloatPrecise() ? float() : approximateValue()}</number>
229
- </quotient>
230
+ <rational-number>
231
+ {isFloatPrecise() ? float() : approximateValue()}
232
+ </rational-number>
233
+ </rational-quotient>
230
234
  </rational-breakdown>
231
235
  )
232
236
  }
@@ -236,15 +240,17 @@ export function Fraction(props: {
236
240
  denominator: bigint
237
241
  }): JSX.Element {
238
242
  return (
239
- <fraction>
240
- <numerator data-css={props.numerator === 1n ? `one` : undefined}>
243
+ <rational-fraction>
244
+ <rational-numerator data-css={props.numerator === 1n ? `one` : undefined}>
241
245
  {Number(props.numerator)}
242
- </numerator>
243
- <solidus />
244
- <denominator data-css={props.denominator === 1n ? `one` : undefined}>
246
+ </rational-numerator>
247
+ <rational-solidus />
248
+ <rational-denominator
249
+ data-css={props.denominator === 1n ? `one` : undefined}
250
+ >
245
251
  {Number(props.denominator)}
246
- </denominator>
247
- </fraction>
252
+ </rational-denominator>
253
+ </rational-fraction>
248
254
  )
249
255
  }
250
256
 
@@ -284,7 +290,7 @@ export function RationalFields({
284
290
  }}
285
291
  placeholder="1"
286
292
  />
287
- <solidus />
293
+ <rational-solidus />
288
294
  <input
289
295
  type="number"
290
296
  value={denominator()?.toString()}
@@ -1,4 +1,4 @@
1
- app.class {
1
+ rationality-app.class {
2
2
  --line: rgba(23, 36, 51, 0.14);
3
3
 
4
4
  & /* local globals */,
@@ -8,14 +8,14 @@ app.class {
8
8
 
9
9
  flex-direction: column;
10
10
 
11
- fraction,
11
+ rational-fraction,
12
12
  fieldset {
13
13
  flex-flow: column;
14
14
  font-size: 24px;
15
15
  border: none;
16
16
  padding: 0;
17
- > numerator,
18
- > denominator,
17
+ > rational-numerator,
18
+ > rational-denominator,
19
19
  > input {
20
20
  margin: 0;
21
21
  height: 36px;
@@ -26,7 +26,7 @@ app.class {
26
26
  color: #0002;
27
27
  }
28
28
  }
29
- > solidus {
29
+ > rational-solidus {
30
30
  height: 2px;
31
31
  background: #000;
32
32
  }
@@ -51,7 +51,7 @@ app.class {
51
51
  padding: 2px 12px;
52
52
  > fraction-list {
53
53
  flex-grow: 1;
54
- > plus {
54
+ > rational-plus {
55
55
  font-size: 30px;
56
56
  color: #0002;
57
57
  align-items: center;
@@ -60,13 +60,13 @@ app.class {
60
60
  flex-flow: column;
61
61
  }
62
62
  }
63
- > equals {
63
+ > rational-equals {
64
64
  font-size: 48px;
65
65
  align-items: center;
66
66
  color: #0002;
67
67
  }
68
- > fraction {}
69
- > quotient {
68
+ > rational-fraction {}
69
+ > rational-quotient {
70
70
  align-items: center;
71
71
  font-size: 48px;
72
72
  position: relative;
@@ -80,7 +80,7 @@ app.class {
80
80
  justify-content: flex-start;
81
81
  justify-items: flex-start;
82
82
  align-content: flex-start;
83
- > bit {
83
+ > quotient-bit {
84
84
  flex-shrink: 0;
85
85
  flex-grow: 0;
86
86
  height: 5px;
package/src/main.tsx CHANGED
@@ -1,8 +1,9 @@
1
+ import "./globals.css"
2
+
1
3
  import { StoreProvider } from "atom.io/solid"
2
4
  import { render } from "solid-js/web"
3
5
 
4
6
  import { App } from "./App.tsx"
5
- import "./globals.css"
6
7
 
7
8
  render(
8
9
  () => (
package/tsconfig.app.json CHANGED
@@ -1,6 +1,8 @@
1
1
  {
2
2
  "compilerOptions": {
3
+ "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo",
3
4
  "target": "ES2024",
5
+ "lib": ["DOM", "ESNext"],
4
6
  "module": "ESNext",
5
7
  "moduleResolution": "Bundler",
6
8
  "noEmit": true,
@@ -9,7 +11,7 @@
9
11
  "exactOptionalPropertyTypes": true,
10
12
  "jsx": "preserve",
11
13
  "jsxImportSource": "solid-js",
12
- "types": ["vite/client"]
14
+ "types": ["vite/client", "lasertag/solid-jsx"]
13
15
  },
14
16
  "include": ["src", "vite.config.ts"]
15
17
  }
package/vite.config.ts CHANGED
@@ -1,6 +1,6 @@
1
- import solid from "vite-plugin-solid"
2
1
  import type { UserConfig } from "vite"
3
2
  import { defineConfig } from "vite"
3
+ import solid from "vite-plugin-solid"
4
4
 
5
5
  const config: UserConfig = defineConfig({
6
6
  plugins: [solid()],
@@ -1 +0,0 @@
1
- app._class_r58xi_1{--line:#17243324}app._class_r58xi_1,app._class_r58xi_1 *{display:flex}app._class_r58xi_1{flex-direction:column}app._class_r58xi_1 fraction,app._class_r58xi_1 fieldset{border:none;flex-flow:column;padding:0;font-size:24px}:is(app._class_r58xi_1 fraction,app._class_r58xi_1 fieldset)>numerator,:is(app._class_r58xi_1 fraction,app._class_r58xi_1 fieldset)>denominator,:is(app._class_r58xi_1 fraction,app._class_r58xi_1 fieldset)>input{flex-grow:1;justify-content:center;align-items:center;height:36px;margin:0}:is(:is(app._class_r58xi_1 fraction,app._class_r58xi_1 fieldset)>numerator,:is(app._class_r58xi_1 fraction,app._class_r58xi_1 fieldset)>denominator,:is(app._class_r58xi_1 fraction,app._class_r58xi_1 fieldset)>input)[data-css=one]{color:#0002}:is(app._class_r58xi_1 fraction,app._class_r58xi_1 fieldset)>solidus{background:#000;height:2px}app._class_r58xi_1>header{justify-content:space-between;align-items:center;padding:12px}app._class_r58xi_1>header>button{justify-content:center;align-items:center}app._class_r58xi_1>main{flex-flow:column;gap:2px;padding:2px}app._class_r58xi_1>main>rational-breakdown{border:1px solid #0002;padding:2px 12px}app._class_r58xi_1>main>rational-breakdown>fraction-list{flex-grow:1}app._class_r58xi_1>main>rational-breakdown>fraction-list>plus{color:#0002;align-items:center;font-size:30px}app._class_r58xi_1>main>rational-breakdown>fraction-list>infix-buttons{flex-flow:column}app._class_r58xi_1>main>rational-breakdown>equals{color:#0002;align-items:center;font-size:48px}app._class_r58xi_1>main>rational-breakdown>quotient{align-items:center;font-size:48px;position:relative}app._class_r58xi_1>main>rational-breakdown>quotient>quotient-bits{flex-wrap:wrap;place-content:flex-start;place-items:flex-start;width:40px;position:absolute;top:0;right:0}app._class_r58xi_1>main>rational-breakdown>quotient>quotient-bits>bit{background:0 0;border:1px solid #0002;flex-grow:0;flex-shrink:0;width:5px;height:5px}app._class_r58xi_1>main>rational-breakdown>quotient>quotient-bits>bit[data-css=one]{background:#0002}:root{--bg:#f6f1e8;--bg-deep:#efe3d0;--panel:#fffcf7db;--panel-strong:#fffaf2;--ink:#172433;--muted:#5d6670;--gold:#d88d1f;--gold-soft:#f5d8a5;--mint:#bfd7c2;--line:#17243324;--shadow:0 24px 80px #3721081f;--radius-xl:28px;--radius-lg:20px;--radius-md:14px;--radius-sm:10px;color:var(--ink);background:radial-gradient(circle at top left, #d88d1f29, transparent 28%), radial-gradient(circle at right center, #1724331f, transparent 30%), linear-gradient(180deg, var(--bg) 0%, var(--bg-deep) 100%);font-family:Iowan Old Style,Palatino Linotype,Book Antiqua,Palatino,serif}*{box-sizing:border-box}html,body,#app{min-height:100%;margin:0}body{min-height:100svh}button,input,select{font:inherit}button,select,input{border:1px solid var(--line);border-radius:var(--radius-sm)}button:hover{transform:translateY(-1px);box-shadow:0 12px 28px #17243324}button:disabled{cursor:not-allowed;opacity:.45;box-shadow:none;transform:none}button.secondary,button.ghost-button{color:var(--ink);background:0 0}button.secondary{border-style:dashed}button.ghost-button{padding-inline:.85rem}input,select{background:#ffffffbf;width:100%;padding:.75rem .85rem}code{font-family:SFMono-Regular,Cascadia Code,Fira Code,Menlo,Consolas,monospace;font-size:.9em}
@@ -1,10 +0,0 @@
1
- /* eslint-disable quotes */
2
- import type * as SolidJs from "solid-js"
3
-
4
- declare module "solid-js" {
5
- namespace JSX {
6
- interface IntrinsicElements {
7
- [tagname: string]: SolidJs.JSX.HTMLAttributes<HTMLDivElement>
8
- }
9
- }
10
- }