@nsis/dent-ui 0.2.5 → 0.3.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.
package/.gitignore ADDED
@@ -0,0 +1,12 @@
1
+ # Package Manager
2
+ bower_components/
3
+ node_modules/
4
+ npm-debug.log*
5
+ vendor/
6
+ package-lock.json
7
+ yarn-error.log
8
+ yarn.lock
9
+ bin/
10
+
11
+ # Build
12
+ dist/
package/CHANGELOG.md CHANGED
@@ -1,5 +1,27 @@
1
1
  # @nsis/dent-ui
2
2
 
3
+ ## 0.3.0
4
+
5
+ ### Minor Changes
6
+
7
+ - 5e3783a: add property that allows passing default script
8
+
9
+ ### Patch Changes
10
+
11
+ - Updated dependencies [a7e61df]
12
+ - Updated dependencies [29fec7f]
13
+ - Updated dependencies [4792830]
14
+ - @nsis/codemirror@0.14.5
15
+ - @nsis/dent@0.14.1
16
+
17
+ ## 0.2.6
18
+
19
+ ### Patch Changes
20
+
21
+ - Updated dependencies [862c327]
22
+ - Updated dependencies [c91e1bb]
23
+ - @nsis/dent@0.14.0
24
+
3
25
  ## 0.2.5
4
26
 
5
27
  ### Patch Changes
package/index.html CHANGED
@@ -3,7 +3,7 @@
3
3
  <head>
4
4
  <meta charset="utf-8" />
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover" />
6
- <title>Dent UI</title>
6
+ <title>Playground | @nsis/dent-ui</title>
7
7
  </head>
8
8
  <body>
9
9
  <div id="app"></div>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nsis/dent-ui",
3
- "version": "0.2.5",
3
+ "version": "0.3.0",
4
4
  "description": "Web UI for the Dent NSIS code formatter",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -28,19 +28,19 @@
28
28
  "@codemirror/commands": "^6.10.4",
29
29
  "@codemirror/language": "^6.12.4",
30
30
  "@codemirror/state": "^6.7.1",
31
- "@codemirror/view": "^6.43.7",
31
+ "@codemirror/view": "^6.43.8",
32
32
  "@lezer/highlight": "^1.2.3",
33
- "svelte": "^5.56.8",
34
- "@nsis/codemirror": "0.14.4",
35
- "@nsis/dent": "0.13.1"
33
+ "@nsis/codemirror": "0.14.5",
34
+ "@nsis/dent": "0.14.1",
35
+ "svelte": "^5.56.9"
36
36
  },
37
37
  "devDependencies": {
38
- "@sveltejs/vite-plugin-svelte": "^7.2.0",
38
+ "@sveltejs/vite-plugin-svelte": "^7.3.0",
39
39
  "@vitest/browser": "^4.1.10",
40
40
  "@vitest/browser-playwright": "^4.1.10",
41
- "playwright": "^1.62.0",
42
- "svelte-check": "^4.7.4",
43
- "vite": "^8.1.5",
41
+ "playwright": "^1.62.1",
42
+ "svelte-check": "^4.7.6",
43
+ "vite": "^8.2.1",
44
44
  "vitest": "^4.1.10",
45
45
  "vitest-browser-svelte": "^3.0.0"
46
46
  },
@@ -51,6 +51,7 @@
51
51
  "lint:biome": "biome check",
52
52
  "lint:biome:ci": "biome ci",
53
53
  "check": "svelte-check --tsconfig ./tsconfig.json",
54
+ "pretest": "playwright install chromium",
54
55
  "test": "vitest run"
55
56
  }
56
57
  }
package/src/App.svelte CHANGED
@@ -7,7 +7,7 @@ import { createFormatter } from '@nsis/dent';
7
7
  import { onDestroy, onMount } from 'svelte';
8
8
  import Editor from './Editor.svelte';
9
9
 
10
- let { strict = false }: { strict?: boolean } = $props();
10
+ let { strict = false, sample = '' }: { strict?: boolean; sample?: string } = $props();
11
11
 
12
12
  let dark = $state(document.documentElement.dataset.theme !== 'light');
13
13
  let themePreference = $state(localStorage.getItem('theme') || 'system');
@@ -35,6 +35,12 @@ function handleColorSchemeChange() {
35
35
 
36
36
  onMount(() => {
37
37
  mql.addEventListener('change', handleColorSchemeChange);
38
+
39
+ // Child editors have mounted by now, so both views exist. CodeMirror's
40
+ // updateListener doesn't fire for the initial document, which means a
41
+ // seeded input never triggers the auto-format path on its own.
42
+ if (sample) formatInput();
43
+
38
44
  return () => mql.removeEventListener('change', handleColorSchemeChange);
39
45
  });
40
46
 
@@ -136,7 +142,7 @@ const outputExtensions = [EditorState.readOnly.of(true), EditorView.editable.of(
136
142
  </script>
137
143
 
138
144
  <header>
139
- <h1>Dent UI</h1>
145
+ <h1>Dent</h1>
140
146
  <fieldset class="settings" aria-label="Formatter settings">
141
147
  <label
142
148
  ><input
@@ -204,6 +210,7 @@ const outputExtensions = [EditorState.readOnly.of(true), EditorView.editable.of(
204
210
  <Editor
205
211
  {dark}
206
212
  {strict}
213
+ doc={sample}
207
214
  extensions={inputExtensions}
208
215
  label="NSIS input editor"
209
216
  oncreate={(v) => {
package/src/Editor.svelte CHANGED
@@ -7,12 +7,14 @@ import { darkTheme, editorTheme, lightTheme } from './themes.ts';
7
7
 
8
8
  let {
9
9
  dark = true,
10
+ doc = '',
10
11
  extensions = [],
11
12
  label = '',
12
13
  strict = false,
13
14
  oncreate,
14
15
  }: {
15
16
  dark?: boolean;
17
+ doc?: string;
16
18
  extensions?: Extension[];
17
19
  label?: string;
18
20
  strict?: boolean;
@@ -27,7 +29,7 @@ const langCompartment = new Compartment();
27
29
  onMount(() => {
28
30
  view = new EditorView({
29
31
  state: EditorState.create({
30
- doc: '',
32
+ doc,
31
33
  extensions: [
32
34
  themeCompartment.of(dark ? darkTheme : lightTheme),
33
35
  langCompartment.of(nsis({ strict })),
package/test/App.test.ts CHANGED
@@ -7,7 +7,7 @@ describe('App', () => {
7
7
  it('renders the heading', async () => {
8
8
  render(App);
9
9
 
10
- await expect.element(page.getByRole('heading', { name: 'Dent UI' })).toBeVisible();
10
+ await expect.element(page.getByRole('heading', { name: 'Dent' })).toBeVisible();
11
11
  });
12
12
 
13
13
  it('renders formatter settings fieldset', async () => {
@@ -46,6 +46,14 @@ describe('App', () => {
46
46
  await expect.element(page.getByRole('checkbox', { name: 'Auto-format' })).toBeChecked();
47
47
  });
48
48
 
49
+ it('formats a seeded sample on mount, enabling Copy', async () => {
50
+ render(App, {
51
+ props: { sample: "name 'x'\nSection\nnop\nSectionEnd\n" },
52
+ });
53
+
54
+ await expect.element(page.getByRole('button', { name: 'Copy' })).toBeEnabled();
55
+ });
56
+
49
57
  it('renders both editor panes', async () => {
50
58
  render(App);
51
59
 
@@ -35,4 +35,15 @@ describe('Editor', () => {
35
35
  const view = oncreate.mock.calls[0]?.[0];
36
36
  expect(view?.state.doc.toString()).toBe('');
37
37
  });
38
+
39
+ it('initialises with the doc prop', () => {
40
+ const oncreate = vi.fn();
41
+
42
+ render(Editor, {
43
+ props: { label: 'Test editor', doc: 'Name "Test"', oncreate },
44
+ });
45
+
46
+ const view = oncreate.mock.calls[0]?.[0];
47
+ expect(view?.state.doc.toString()).toBe('Name "Test"');
48
+ });
38
49
  });
@@ -1,15 +0,0 @@
1
- $ vite build
2
- 9:16:02 PM [vite-plugin-svelte] no Svelte config found at /home/runner/work/nsis-org/nsis-org/packages/dent-ui - using default configuration.
3
- vite v8.1.5 building client environment for production...
4
- 
5
- rendering chunks...
6
- computing gzip size...
7
- dist/index.html 0.32 kB │ gzip: 0.23 kB
8
- dist/assets/index-DYnH3B34.js 552.69 kB │ gzip: 180.43 kB
9
-
10
- ✓ built in 338ms
11
- [plugin builtin:vite-reporter]
12
- (!) Some chunks are larger than 500 kB after minification. Consider:
13
- - Using dynamic import() to code-split the application
14
- - Use build.rolldownOptions.output.codeSplitting to improve chunking: https://rolldown.rs/reference/OutputOptions.codeSplitting
15
- - Adjust chunk size limit for this warning via build.chunkSizeWarningLimit.