@conduction/nextcloud-vue 2.2.0-vue3.14 → 2.2.0-vue3.15

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 (2) hide show
  1. package/package.json +2 -1
  2. package/stylelint/index.js +61 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@conduction/nextcloud-vue",
3
- "version": "2.2.0-vue3.14",
3
+ "version": "2.2.0-vue3.15",
4
4
  "description": "Shared Vue component library for Conduction Nextcloud apps — complements @nextcloud/vue with higher-level components, OpenRegister integration, and NL Design System support",
5
5
  "license": "EUPL-1.2",
6
6
  "author": "Conduction B.V. <info@conduction.nl>",
@@ -24,6 +24,7 @@
24
24
  "src/",
25
25
  "css/",
26
26
  "eslint/",
27
+ "stylelint/",
27
28
  "l10n/",
28
29
  "scripts/",
29
30
  "testing/",
@@ -0,0 +1,61 @@
1
+ /**
2
+ * SPDX-License-Identifier: EUPL-1.2
3
+ * SPDX-FileCopyrightText: 2026 Conduction B.V.
4
+ *
5
+ * `@conduction/nextcloud-vue/stylelint` — the shared Stylelint preset for every
6
+ * Conduction Nextcloud app.
7
+ *
8
+ * WHY THIS LIVES HERE
9
+ * -------------------
10
+ * The same reason the ESLint preset does, and the same reason the PHP ruleset
11
+ * moved to `conduction/hydra-gates`: a copied config is not a shared config.
12
+ *
13
+ * Measured across the 18 core apps on 2026-08-12, `stylelint.config.js` existed
14
+ * in six variants. Ten apps were byte-identical to this file; the other eight
15
+ * had each drifted separately. None of that drift was a decision.
16
+ *
17
+ * Stylelint cannot be homed the way PHPCS was, through a path into `vendor/`,
18
+ * because a Stylelint config resolves `extends` against `node_modules` relative
19
+ * to itself. An npm package is the only channel that works — and every app
20
+ * already depends on this one.
21
+ *
22
+ * WHAT IT IS
23
+ * ----------
24
+ * `@nextcloud/stylelint-config`, plus exactly one addition.
25
+ *
26
+ * That is deliberate and it mirrors `conduction/coding-standard` on the PHP
27
+ * side: Conduction code must pass Nextcloud's own checks unchanged. We may be
28
+ * STRICTER than Nextcloud; we may not be DIFFERENT from it. Anything here that
29
+ * contradicted `@nextcloud/stylelint-config` would put an app in the position
30
+ * the PHP toolchain was in until this week — two tools with overlapping
31
+ * jurisdiction demanding opposite things, and no way to satisfy both.
32
+ *
33
+ * THE ONE ADDITION
34
+ * ----------------
35
+ * `::v-deep` is a Vue SFC scoped-style selector, not a CSS pseudo-element.
36
+ * Stylelint's `selector-pseudo-element-no-unknown` does not know it and flags
37
+ * every use. Nextcloud's config does not carry the exception because Nextcloud
38
+ * core does not use `::v-deep`; this fleet does, in every app that restyles a
39
+ * child component's internals.
40
+ *
41
+ * This is additive in the strict sense — it relaxes a rule on a token Nextcloud
42
+ * never emits — so a file that satisfies this preset still satisfies theirs.
43
+ *
44
+ * USAGE
45
+ * -----
46
+ * // stylelint.config.js
47
+ * module.exports = require('@conduction/nextcloud-vue/stylelint')
48
+ *
49
+ * To add an app-specific rule, spread it — do not redefine `extends`:
50
+ *
51
+ * const base = require('@conduction/nextcloud-vue/stylelint')
52
+ * module.exports = { ...base, rules: { ...base.rules, 'my/rule': true } }
53
+ */
54
+ module.exports = {
55
+ extends: '@nextcloud/stylelint-config',
56
+ rules: {
57
+ 'selector-pseudo-element-no-unknown': [true, {
58
+ ignorePseudoElements: ['v-deep'],
59
+ }],
60
+ },
61
+ }