@synopackageland/templates 0.11.0 → 0.12.2

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/README.md CHANGED
@@ -38,12 +38,12 @@ calls each one from the generated script of the same name (`synopkgland skill sh
38
38
  The placeholders `__PACKAGE__` (also the Go module path), `__DISPLAY_NAME__` and
39
39
  `__BACKGROUND_ENABLED__` are substituted by `init`.
40
40
 
41
- `backend/go.mod` requires `github.com/synopackageland/syno-pkg-land-sdk v0.11.0`; that line is
41
+ `backend/go.mod` requires `github.com/synopackageland/syno-pkg-land-sdk v0.12.2`; that line is
42
42
  the single source of the SDK version and `frontend/package.json` pins
43
43
  `@synopackageland/sdk` to the same version. Python and Node.js name it in
44
44
  `backend.sdk`, Rust in the `syno-pkg-land-app` tag of `backend/Cargo.toml`
45
- (and `Cargo.lock`); all of them pin 0.11.0. The Vue frontend pins
46
- `@synopackageland/ui` 0.9.10.
45
+ (and `Cargo.lock`); all of them pin 0.12.2. The Vue frontend pins
46
+ `@synopackageland/ui` 0.10.3.
47
47
 
48
48
  ## Notice writer
49
49
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@synopackageland/templates",
3
- "version": "0.11.0",
3
+ "version": "0.12.2",
4
4
  "description": "Project templates for synopkgland init: native-go, native-python, native-node and native-rust (plain or Vue, with jobs, delegate and root-ops overlays), binary and compose.",
5
5
  "license": "MIT",
6
6
  "repository": {"type": "git", "url": "git+https://github.com/synopackageland/syno-pkg-land-templates.git"},
@@ -1,6 +1,6 @@
1
1
  Native Go package build dependencies
2
2
 
3
- github.com/synopackageland/syno-pkg-land-sdk v0.11.0 (MIT)
3
+ github.com/synopackageland/syno-pkg-land-sdk v0.12.2 (MIT)
4
4
 
5
5
  Copyright (c) 2026 synopkgland
6
6
 
@@ -4,6 +4,6 @@ go 1.25.0
4
4
 
5
5
  toolchain go1.26.9
6
6
 
7
- require github.com/synopackageland/syno-pkg-land-sdk v0.11.0
7
+ require github.com/synopackageland/syno-pkg-land-sdk v0.12.2
8
8
 
9
9
  require golang.org/x/sys v0.44.0 // indirect
@@ -1,4 +1,4 @@
1
- github.com/synopackageland/syno-pkg-land-sdk v0.11.0 h1:/YdyhH7dL7aBDGzlNDAkhIX74lhy1yHZWbyiFz+mPL0=
2
- github.com/synopackageland/syno-pkg-land-sdk v0.11.0/go.mod h1:hlsvaVuH2wsAoR8jzI1Rg/NeejQSFpAaN6zpIWsVbjI=
1
+ github.com/synopackageland/syno-pkg-land-sdk v0.12.2 h1:RDC2Pyl1/yBEj61CDUMM5ica8i1YmUhk89TR6yQd8Es=
2
+ github.com/synopackageland/syno-pkg-land-sdk v0.12.2/go.mod h1:hlsvaVuH2wsAoR8jzI1Rg/NeejQSFpAaN6zpIWsVbjI=
3
3
  golang.org/x/sys v0.44.0 h1:ildZl3J4uzeKP07r2F++Op7E9B29JRUy+a27EibtBTQ=
4
4
  golang.org/x/sys v0.44.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw=
@@ -7,8 +7,8 @@
7
7
  "name": "native-dsm-vue-app",
8
8
  "dependencies": {
9
9
  "@lucide/vue": "1.48.0",
10
- "@synopackageland/sdk": "0.11.0",
11
- "@synopackageland/ui": "0.9.10",
10
+ "@synopackageland/sdk": "0.12.2",
11
+ "@synopackageland/ui": "0.10.3",
12
12
  "vue": "3.5.43"
13
13
  },
14
14
  "devDependencies": {
@@ -1148,13 +1148,13 @@
1148
1148
  }
1149
1149
  },
1150
1150
  "node_modules/@synopackageland/sdk": {
1151
- "version": "0.11.0",
1152
- "resolved": "https://registry.npmjs.org/@synopackageland/sdk/-/sdk-0.11.0.tgz",
1153
- "integrity": "sha512-1Tu6zCosa90SC6IQW8C6NxYikw1Se/Jp/Tw3Lv//5Evj0+007UT2YSSbG8hvR+l9PSs5IAvoRSUwp8hFL2BDhQ==",
1151
+ "version": "0.12.2",
1152
+ "resolved": "https://registry.npmjs.org/@synopackageland/sdk/-/sdk-0.12.2.tgz",
1153
+ "integrity": "sha512-5SltdOZya34YqxJThM/Usa+cFmhBkN14eu+ZN4FYUqBz55mubW0gG+GkC2Q3Dx5IVi2+iV5HH3pMI3gnWyv/VQ==",
1154
1154
  "license": "MIT",
1155
1155
  "peerDependencies": {
1156
1156
  "@lucide/vue": "^1.48.0",
1157
- "@synopackageland/ui": "^0.9.10",
1157
+ "@synopackageland/ui": "^0.10.1",
1158
1158
  "vue": "^3.5.0"
1159
1159
  },
1160
1160
  "peerDependenciesMeta": {
@@ -1167,9 +1167,9 @@
1167
1167
  }
1168
1168
  },
1169
1169
  "node_modules/@synopackageland/ui": {
1170
- "version": "0.9.10",
1171
- "resolved": "https://registry.npmjs.org/@synopackageland/ui/-/ui-0.9.10.tgz",
1172
- "integrity": "sha512-CUGEefYXsUlKwCeNp9r14oDAkOTlEeLADD5gs93SUopNQQwTiFL8NcL0xvPVQlY+lU1UecX+IbvZgt/Mhe/+Ng==",
1170
+ "version": "0.10.3",
1171
+ "resolved": "https://registry.npmjs.org/@synopackageland/ui/-/ui-0.10.3.tgz",
1172
+ "integrity": "sha512-WrbrA5HgqIdlTJpHEAEt9JNdLElDZP0rPZdx9bweTneJDUngtMrYUTcISEeKA10FGRCcefN4FtSECWY4oe11Ug==",
1173
1173
  "license": "MIT",
1174
1174
  "dependencies": {
1175
1175
  "@internationalized/date": "3.12.4",
@@ -8,8 +8,8 @@
8
8
  },
9
9
  "dependencies": {
10
10
  "@lucide/vue": "1.48.0",
11
- "@synopackageland/sdk": "0.11.0",
12
- "@synopackageland/ui": "0.9.10",
11
+ "@synopackageland/sdk": "0.12.2",
12
+ "@synopackageland/ui": "0.10.3",
13
13
  "vue": "3.5.43"
14
14
  },
15
15
  "devDependencies": {
@@ -1,27 +1,7 @@
1
1
  .dsmapp-vue-root {height: 100%; min-height: 0; width: 100%; overflow: hidden;}
2
2
  [data-ui-app] .integration-app {padding: 0 var(--ui-page-padding-x, 16px); color: var(--ui-text); font-family: var(--ui-font-sans); font-size: 13px; line-height: 1.5;}
3
- [data-ui-app] .integration-app section {margin-top: var(--ui-space-4, 16px);}
4
- [data-ui-app] .integration-status h2 {font-size: 15px; font-weight: 600; margin: 0;}
5
- [data-ui-app] .integration-status p {margin: 6px 0;}
6
- [data-ui-app] .integration-status dl {display: grid; grid-template-columns: max-content 1fr; gap: 4px 16px; margin: 12px 0;}
7
- [data-ui-app] .integration-status dt, [data-ui-app] .integration-help {color: var(--ui-text);}
8
- [data-ui-app] .integration-status dd {margin: 0;}
9
- [data-ui-app] .integration-actions {display: flex; flex-wrap: wrap; gap: 8px; margin-top: 16px;}
10
- [data-ui-app] .integration-notice {color: var(--ui-text);}
11
- [data-ui-app] .nas-summary {display: grid; grid-template-columns: minmax(6ch, max-content) minmax(0, 1fr); gap: var(--ui-space-2, 8px) var(--ui-space-4, 16px);}
12
- [data-ui-app] .nas-summary dd {margin: 0; overflow-wrap: anywhere;}
13
- [data-ui-app] .nas-breadcrumb {display: flex; flex-wrap: wrap; gap: var(--ui-space-2, 8px); margin-block: var(--ui-space-3, 12px);}
14
- [data-ui-app] .nas-browser {display: grid; grid-template-columns: minmax(0, 1fr); gap: var(--ui-space-3, 12px);}
15
- [data-ui-app] .nas-tree {display: none;}
16
- [data-ui-app] .nas-folder-list {min-width: 0; overflow: auto;}
17
- [data-ui-app] .nas-folder-name {white-space: normal; overflow-wrap: anywhere; text-align: start;}
18
- [data-ui-app] .nas-folder-action {white-space: normal; max-width: 100%;}
3
+ /* The App's pages and their sections stack at the UI section gap, as PageContent's children do. */
4
+ [data-ui-app] .integration-app, [data-ui-app] .integration-app > [data-page] {display: flex; flex-direction: column; gap: var(--ui-section-gap);}
5
+ [data-ui-app] .integration-help {color: var(--ui-text);}
6
+ [data-ui-app] .integration-actions {display: flex; flex-wrap: wrap; gap: 8px;}
19
7
  [data-ui-app] .nas-picker {max-height: 55vh; overflow: auto; overflow-wrap: anywhere;}
20
- [data-ui-app] .nas-grants {list-style: none; padding: 0;}
21
- [data-ui-app] .nas-grants > li {padding-block: var(--ui-space-4, 16px); border-bottom: 1px solid var(--ui-border);}
22
- [data-ui-app] .nas-grant-heading {display: flex; align-items: start; justify-content: space-between; gap: var(--ui-space-3, 12px);}
23
- [data-ui-app] .nas-grant-heading strong {overflow-wrap: anywhere;}
24
- @media (min-width: 960px) {
25
- [data-ui-app] .nas-browser {grid-template-columns: minmax(8ch, 1fr) minmax(0, 3fr);}
26
- [data-ui-app] .nas-tree {display: block; overflow: auto;}
27
- }
@@ -0,0 +1,15 @@
1
+ import {readFileSync} from 'node:fs'
2
+ import {join} from 'node:path'
3
+ import {expect,test} from 'vitest'
4
+ // UI 0.10 spaces page sections with --ui-section-gap; the App adds no margins of its own.
5
+ const css=readFileSync(join(__dirname,'../src/style.css'),'utf8')
6
+ const rules=[...css.matchAll(/([^{}]+)\{([^}]*)\}/g)].map(([,selector,body])=>({selector:selector!.trim(),body:body!}))
7
+ test('the App stacks its pages and their sections at the UI section gap',()=>{
8
+ const stack=rules.find(rule=>rule.selector.split(',').map(s=>s.trim()).includes('[data-ui-app] .integration-app > [data-page]'))
9
+ expect(stack?.body).toMatch(/display:\s*flex/)
10
+ expect(stack?.body).toMatch(/flex-direction:\s*column/)
11
+ expect(stack?.body).toMatch(/gap:\s*var\(--ui-section-gap\)/)
12
+ })
13
+ test('no rule spaces sections or action rows with hand-written margins',()=>{
14
+ expect(rules.filter(rule=>/margin/.test(rule.body)).map(rule=>rule.selector)).toEqual([])
15
+ })
@@ -49,7 +49,7 @@ backend:
49
49
  runtime: node
50
50
  dir: backend/app
51
51
  entry: main.js
52
- sdk: 0.11.0
52
+ sdk: 0.12.2
53
53
  node: { package: Node.js_v20 }
54
54
 
55
55
  ui:
@@ -47,7 +47,7 @@ backend:
47
47
  runtime: python
48
48
  dir: backend/app
49
49
  entry: main.py
50
- sdk: 0.11.0
50
+ sdk: 0.12.2
51
51
 
52
52
  ui:
53
53
  # Static files served at /webman/3rdparty/<package>/app/. app.js and app.css
@@ -104,8 +104,8 @@ dependencies = [
104
104
 
105
105
  [[package]]
106
106
  name = "syno-pkg-land-app"
107
- version = "0.11.0"
108
- source = "git+https://github.com/synopackageland/syno-pkg-land-sdk?tag=v0.11.0#bbef5c765fdb73d2c24c9b124c9f9ed89abb1a06"
107
+ version = "0.12.2"
108
+ source = "git+https://github.com/synopackageland/syno-pkg-land-sdk?tag=v0.12.2#75ff12a9f48c95b6db15d409700b470ca27bcb27"
109
109
  dependencies = [
110
110
  "libc",
111
111
  "serde",
@@ -9,7 +9,7 @@ libc = "0.2"
9
9
  serde = { version = "1", features = ["derive"] }
10
10
  serde_json = "1"
11
11
  # The SDK version is the tag; `synopkgland check` reads it from Cargo.lock.
12
- syno-pkg-land-app = { git = "https://github.com/synopackageland/syno-pkg-land-sdk", tag = "v0.11.0" }
12
+ syno-pkg-land-app = { git = "https://github.com/synopackageland/syno-pkg-land-sdk", tag = "v0.12.2" }
13
13
 
14
14
  [profile.release]
15
15
  # A handler panic becomes an "internal" reply; abort would end the App without one.