@jahia/agentic 0.4.1 → 0.5.1

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 (178) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/dist/antigravity/.agents/rules/jahia.md +51 -0
  3. package/dist/antigravity/.agents/skills/jahia-cnd-author/SKILL.md +94 -0
  4. package/dist/antigravity/.agents/skills/jahia-cnd-author/references/cnd-area-types.md +55 -0
  5. package/dist/antigravity/.agents/skills/jahia-cnd-author/references/cnd-authoring-experience.md +92 -0
  6. package/dist/antigravity/.agents/skills/jahia-cnd-author/references/cnd-child-nodes.md +74 -0
  7. package/dist/antigravity/.agents/skills/jahia-cnd-author/references/cnd-jahia-mixins.md +510 -0
  8. package/dist/antigravity/.agents/skills/jahia-cnd-author/references/cnd-modeling-decisions.md +87 -0
  9. package/dist/antigravity/.agents/skills/jahia-cnd-author/references/cnd-numbers-dates.md +92 -0
  10. package/dist/antigravity/.agents/skills/jahia-cnd-author/references/cnd-string-selectors.md +133 -0
  11. package/dist/antigravity/.agents/skills/jahia-cnd-author/references/cnd-syntax.md +119 -0
  12. package/dist/antigravity/.agents/skills/jahia-cnd-author/references/types-ts-mapping.md +73 -0
  13. package/dist/antigravity/.agents/skills/jahia-dev-accessibility/SKILL.md +11 -0
  14. package/dist/antigravity/.agents/skills/jahia-dev-build-component/SKILL.md +133 -0
  15. package/dist/antigravity/.agents/skills/jahia-dev-create-page-template/SKILL.md +341 -0
  16. package/dist/antigravity/.agents/skills/jahia-dev-create-template-set/SKILL.md +205 -0
  17. package/dist/antigravity/.agents/skills/jahia-dev-create-view/SKILL.md +896 -0
  18. package/dist/antigravity/.agents/skills/jahia-dev-debug/SKILL.md +176 -0
  19. package/dist/antigravity/.agents/skills/jahia-dev-import-from/SKILL.md +244 -0
  20. package/dist/antigravity/.agents/skills/jahia-dev-jexperience/SKILL.md +269 -0
  21. package/dist/antigravity/.agents/skills/jahia-dev-ops/SKILL.md +50 -0
  22. package/dist/antigravity/.agents/skills/jahia-dev-ops/references/docker.md +151 -0
  23. package/dist/antigravity/.agents/skills/jahia-dev-ops/references/monitoring.md +195 -0
  24. package/dist/antigravity/.agents/skills/jahia-dev-ops/references/provisioning.md +269 -0
  25. package/dist/antigravity/.agents/skills/jahia-dev-properties/SKILL.md +147 -0
  26. package/dist/antigravity/.agents/skills/jahia-dev-properties/references/all-properties.md +231 -0
  27. package/dist/antigravity/.agents/skills/jahia-dev-query-content/SKILL.md +204 -0
  28. package/dist/antigravity/.agents/skills/jahia-dev-review-cnd/SKILL.md +79 -0
  29. package/dist/antigravity/.agents/skills/jahia-dev-review-cnd/scripts/check-cnd.d.mts +13 -0
  30. package/dist/antigravity/.agents/skills/jahia-dev-review-cnd/scripts/check-cnd.mjs +198 -0
  31. package/dist/antigravity/.agents/skills/jahia-dev-screenshot/SKILL.md +177 -0
  32. package/dist/antigravity/.agents/skills/jahia-dev-start-local/SKILL.md +121 -0
  33. package/dist/antigravity/.agents/skills/jahia-jcr-sql2/SKILL.md +257 -0
  34. package/dist/antigravity/.agents/skills/jahia-review/SKILL.md +63 -0
  35. package/dist/{claude/.claude/skills/jahia-dev-review → antigravity/.agents/skills/jahia-review-code}/SKILL.md +3 -3
  36. package/dist/antigravity/.agents/skills/jahia-review-site/SKILL.md +52 -0
  37. package/dist/antigravity/.agents/skills/jahia-review-site/scripts/review-pages.mjs +74 -0
  38. package/dist/antigravity/AGENTS.md +62 -0
  39. package/dist/claude/.claude/rules/jahia.md +1 -1
  40. package/dist/claude/.claude/skills/jahia-dev-build-component/SKILL.md +2 -2
  41. package/dist/claude/.claude/skills/jahia-dev-create-view/SKILL.md +2 -2
  42. package/dist/claude/.claude/skills/jahia-dev-import-from/SKILL.md +1 -1
  43. package/dist/claude/.claude/skills/jahia-dev-properties/SKILL.md +1 -1
  44. package/dist/claude/.claude/skills/jahia-dev-query-content/SKILL.md +1 -1
  45. package/dist/claude/.claude/skills/jahia-jcr-sql2/SKILL.md +1 -2
  46. package/dist/claude/.claude/skills/jahia-review/SKILL.md +63 -0
  47. package/dist/{copilot/.agents/skills/jahia-dev-review → claude/.claude/skills/jahia-review-code}/SKILL.md +3 -3
  48. package/dist/claude/.claude/skills/jahia-review-site/SKILL.md +52 -0
  49. package/dist/claude/.claude/skills/jahia-review-site/scripts/review-pages.mjs +74 -0
  50. package/dist/claude/.mcp.json +11 -0
  51. package/dist/claude/CLAUDE.md +2 -2
  52. package/dist/codex/.agents/skills/jahia-dev-build-component/SKILL.md +2 -2
  53. package/dist/codex/.agents/skills/jahia-dev-create-view/SKILL.md +2 -2
  54. package/dist/codex/.agents/skills/jahia-dev-import-from/SKILL.md +1 -1
  55. package/dist/codex/.agents/skills/jahia-dev-properties/SKILL.md +1 -1
  56. package/dist/codex/.agents/skills/jahia-dev-query-content/SKILL.md +1 -1
  57. package/dist/codex/.agents/skills/jahia-jcr-sql2/SKILL.md +1 -2
  58. package/dist/codex/.agents/skills/jahia-review/SKILL.md +63 -0
  59. package/dist/{cursor/.agents/skills/jahia-dev-review → codex/.agents/skills/jahia-review-code}/SKILL.md +3 -3
  60. package/dist/codex/.agents/skills/jahia-review-site/SKILL.md +52 -0
  61. package/dist/codex/.agents/skills/jahia-review-site/scripts/review-pages.mjs +74 -0
  62. package/dist/codex/AGENTS.md +2 -2
  63. package/dist/copilot/.agents/skills/jahia-dev-build-component/SKILL.md +2 -2
  64. package/dist/copilot/.agents/skills/jahia-dev-create-view/SKILL.md +2 -2
  65. package/dist/copilot/.agents/skills/jahia-dev-import-from/SKILL.md +1 -1
  66. package/dist/copilot/.agents/skills/jahia-dev-properties/SKILL.md +1 -1
  67. package/dist/copilot/.agents/skills/jahia-dev-query-content/SKILL.md +1 -1
  68. package/dist/copilot/.agents/skills/jahia-jcr-sql2/SKILL.md +1 -2
  69. package/dist/copilot/.agents/skills/jahia-review/SKILL.md +63 -0
  70. package/dist/{codex/.agents/skills/jahia-dev-review → copilot/.agents/skills/jahia-review-code}/SKILL.md +3 -3
  71. package/dist/copilot/.agents/skills/jahia-review-site/SKILL.md +52 -0
  72. package/dist/copilot/.agents/skills/jahia-review-site/scripts/review-pages.mjs +74 -0
  73. package/dist/copilot/AGENTS.md +2 -2
  74. package/dist/cursor/.agents/skills/jahia-dev-build-component/SKILL.md +2 -2
  75. package/dist/cursor/.agents/skills/jahia-dev-create-view/SKILL.md +2 -2
  76. package/dist/cursor/.agents/skills/jahia-dev-import-from/SKILL.md +1 -1
  77. package/dist/cursor/.agents/skills/jahia-dev-properties/SKILL.md +1 -1
  78. package/dist/cursor/.agents/skills/jahia-dev-query-content/SKILL.md +1 -1
  79. package/dist/cursor/.agents/skills/jahia-jcr-sql2/SKILL.md +1 -2
  80. package/dist/cursor/.agents/skills/jahia-review/SKILL.md +63 -0
  81. package/dist/cursor/.agents/skills/jahia-review-code/SKILL.md +228 -0
  82. package/dist/cursor/.agents/skills/jahia-review-site/SKILL.md +52 -0
  83. package/dist/cursor/.agents/skills/jahia-review-site/scripts/review-pages.mjs +74 -0
  84. package/dist/cursor/.cursor/mcp.json +11 -0
  85. package/dist/cursor/.cursor/rules/jahia.mdc +1 -1
  86. package/dist/gemini/.agents/skills/jahia-dev-build-component/SKILL.md +2 -2
  87. package/dist/gemini/.agents/skills/jahia-dev-create-view/SKILL.md +2 -2
  88. package/dist/gemini/.agents/skills/jahia-dev-import-from/SKILL.md +1 -1
  89. package/dist/gemini/.agents/skills/jahia-dev-properties/SKILL.md +1 -1
  90. package/dist/gemini/.agents/skills/jahia-dev-query-content/SKILL.md +1 -1
  91. package/dist/gemini/.agents/skills/jahia-jcr-sql2/SKILL.md +1 -2
  92. package/dist/gemini/.agents/skills/jahia-review/SKILL.md +63 -0
  93. package/dist/gemini/.agents/skills/jahia-review-code/SKILL.md +228 -0
  94. package/dist/gemini/.agents/skills/jahia-review-site/SKILL.md +52 -0
  95. package/dist/gemini/.agents/skills/jahia-review-site/scripts/review-pages.mjs +74 -0
  96. package/dist/gemini/.gemini/settings.json +10 -0
  97. package/dist/gemini/AGENTS.md +2 -2
  98. package/dist/index.js +14 -2
  99. package/dist/kiro/.kiro/settings/mcp.json +10 -0
  100. package/dist/kiro/.kiro/skills/jahia-cnd-author/SKILL.md +94 -0
  101. package/dist/kiro/.kiro/skills/jahia-cnd-author/references/cnd-area-types.md +55 -0
  102. package/dist/kiro/.kiro/skills/jahia-cnd-author/references/cnd-authoring-experience.md +92 -0
  103. package/dist/kiro/.kiro/skills/jahia-cnd-author/references/cnd-child-nodes.md +74 -0
  104. package/dist/kiro/.kiro/skills/jahia-cnd-author/references/cnd-jahia-mixins.md +510 -0
  105. package/dist/kiro/.kiro/skills/jahia-cnd-author/references/cnd-modeling-decisions.md +87 -0
  106. package/dist/kiro/.kiro/skills/jahia-cnd-author/references/cnd-numbers-dates.md +92 -0
  107. package/dist/kiro/.kiro/skills/jahia-cnd-author/references/cnd-string-selectors.md +133 -0
  108. package/dist/kiro/.kiro/skills/jahia-cnd-author/references/cnd-syntax.md +119 -0
  109. package/dist/kiro/.kiro/skills/jahia-cnd-author/references/types-ts-mapping.md +73 -0
  110. package/dist/kiro/.kiro/skills/jahia-dev-accessibility/SKILL.md +11 -0
  111. package/dist/kiro/.kiro/skills/jahia-dev-build-component/SKILL.md +133 -0
  112. package/dist/kiro/.kiro/skills/jahia-dev-create-page-template/SKILL.md +341 -0
  113. package/dist/kiro/.kiro/skills/jahia-dev-create-template-set/SKILL.md +205 -0
  114. package/dist/kiro/.kiro/skills/jahia-dev-create-view/SKILL.md +896 -0
  115. package/dist/kiro/.kiro/skills/jahia-dev-debug/SKILL.md +176 -0
  116. package/dist/kiro/.kiro/skills/jahia-dev-import-from/SKILL.md +244 -0
  117. package/dist/kiro/.kiro/skills/jahia-dev-jexperience/SKILL.md +269 -0
  118. package/dist/kiro/.kiro/skills/jahia-dev-ops/SKILL.md +50 -0
  119. package/dist/kiro/.kiro/skills/jahia-dev-ops/references/docker.md +151 -0
  120. package/dist/kiro/.kiro/skills/jahia-dev-ops/references/monitoring.md +195 -0
  121. package/dist/kiro/.kiro/skills/jahia-dev-ops/references/provisioning.md +269 -0
  122. package/dist/kiro/.kiro/skills/jahia-dev-properties/SKILL.md +147 -0
  123. package/dist/kiro/.kiro/skills/jahia-dev-properties/references/all-properties.md +231 -0
  124. package/dist/kiro/.kiro/skills/jahia-dev-query-content/SKILL.md +204 -0
  125. package/dist/kiro/.kiro/skills/jahia-dev-review-cnd/SKILL.md +79 -0
  126. package/dist/kiro/.kiro/skills/jahia-dev-review-cnd/scripts/check-cnd.d.mts +13 -0
  127. package/dist/kiro/.kiro/skills/jahia-dev-review-cnd/scripts/check-cnd.mjs +198 -0
  128. package/dist/kiro/.kiro/skills/jahia-dev-screenshot/SKILL.md +177 -0
  129. package/dist/kiro/.kiro/skills/jahia-dev-start-local/SKILL.md +121 -0
  130. package/dist/kiro/.kiro/skills/jahia-jcr-sql2/SKILL.md +257 -0
  131. package/dist/kiro/.kiro/skills/jahia-review/SKILL.md +63 -0
  132. package/dist/kiro/.kiro/skills/jahia-review-code/SKILL.md +228 -0
  133. package/dist/kiro/.kiro/skills/jahia-review-site/SKILL.md +52 -0
  134. package/dist/kiro/.kiro/skills/jahia-review-site/scripts/review-pages.mjs +74 -0
  135. package/dist/kiro/.kiro/steering/jahia.md +55 -0
  136. package/dist/kiro/AGENTS.md +62 -0
  137. package/dist/opencode/.agents/skills/jahia-dev-build-component/SKILL.md +2 -2
  138. package/dist/opencode/.agents/skills/jahia-dev-create-view/SKILL.md +2 -2
  139. package/dist/opencode/.agents/skills/jahia-dev-import-from/SKILL.md +1 -1
  140. package/dist/opencode/.agents/skills/jahia-dev-properties/SKILL.md +1 -1
  141. package/dist/opencode/.agents/skills/jahia-dev-query-content/SKILL.md +1 -1
  142. package/dist/opencode/.agents/skills/jahia-jcr-sql2/SKILL.md +1 -2
  143. package/dist/opencode/.agents/skills/jahia-review/SKILL.md +63 -0
  144. package/dist/opencode/.agents/skills/jahia-review-code/SKILL.md +228 -0
  145. package/dist/opencode/.agents/skills/jahia-review-site/SKILL.md +52 -0
  146. package/dist/opencode/.agents/skills/jahia-review-site/scripts/review-pages.mjs +74 -0
  147. package/dist/opencode/AGENTS.md +2 -2
  148. package/dist/opencode/opencode.json +12 -0
  149. package/dist/windsurf/.windsurf/rules/jahia.md +1 -1
  150. package/dist/windsurf/.windsurf/skills/jahia-dev-build-component/SKILL.md +2 -2
  151. package/dist/windsurf/.windsurf/skills/jahia-dev-create-view/SKILL.md +2 -2
  152. package/dist/windsurf/.windsurf/skills/jahia-dev-import-from/SKILL.md +1 -1
  153. package/dist/windsurf/.windsurf/skills/jahia-dev-properties/SKILL.md +1 -1
  154. package/dist/windsurf/.windsurf/skills/jahia-dev-query-content/SKILL.md +1 -1
  155. package/dist/windsurf/.windsurf/skills/jahia-jcr-sql2/SKILL.md +1 -2
  156. package/dist/windsurf/.windsurf/skills/jahia-review/SKILL.md +63 -0
  157. package/dist/windsurf/.windsurf/skills/jahia-review-code/SKILL.md +228 -0
  158. package/dist/windsurf/.windsurf/skills/jahia-review-site/SKILL.md +52 -0
  159. package/dist/windsurf/.windsurf/skills/jahia-review-site/scripts/review-pages.mjs +74 -0
  160. package/dist/windsurf/AGENTS.md +2 -2
  161. package/package.json +1 -1
  162. package/dist/claude/.claude/skills/jahia-dev-site-review/SKILL.md +0 -70
  163. package/dist/claude/.claude/skills/jahia-dev-site-review/scripts/review-pages.mjs +0 -85
  164. package/dist/codex/.agents/skills/jahia-dev-site-review/SKILL.md +0 -70
  165. package/dist/codex/.agents/skills/jahia-dev-site-review/scripts/review-pages.mjs +0 -85
  166. package/dist/copilot/.agents/skills/jahia-dev-site-review/SKILL.md +0 -70
  167. package/dist/copilot/.agents/skills/jahia-dev-site-review/scripts/review-pages.mjs +0 -85
  168. package/dist/cursor/.agents/skills/jahia-dev-site-review/SKILL.md +0 -70
  169. package/dist/cursor/.agents/skills/jahia-dev-site-review/scripts/review-pages.mjs +0 -85
  170. package/dist/gemini/.agents/skills/jahia-dev-review/SKILL.md +0 -228
  171. package/dist/gemini/.agents/skills/jahia-dev-site-review/SKILL.md +0 -70
  172. package/dist/gemini/.agents/skills/jahia-dev-site-review/scripts/review-pages.mjs +0 -85
  173. package/dist/opencode/.agents/skills/jahia-dev-review/SKILL.md +0 -228
  174. package/dist/opencode/.agents/skills/jahia-dev-site-review/SKILL.md +0 -70
  175. package/dist/opencode/.agents/skills/jahia-dev-site-review/scripts/review-pages.mjs +0 -85
  176. package/dist/windsurf/.windsurf/skills/jahia-dev-review/SKILL.md +0 -228
  177. package/dist/windsurf/.windsurf/skills/jahia-dev-site-review/SKILL.md +0 -70
  178. package/dist/windsurf/.windsurf/skills/jahia-dev-site-review/scripts/review-pages.mjs +0 -85
@@ -0,0 +1,510 @@
1
+ # Jahia Native Mixins & Types
2
+
3
+ Source: https://github.com/Jahia/jahia/tree/master/war/src/main/webapp/WEB-INF/etc/repository/nodetypes
4
+ Fetch this URL to verify before using any mixin not listed here.
5
+
6
+ ## Base types — always extend these
7
+
8
+ | Type | Purpose |
9
+ |---|---|
10
+ | `jnt:content` | Base for all user content nodes — **always include** |
11
+ | `jnt:page` | Page node — only for `jmix:mainResource` full-page types |
12
+ | `jnt:file` | File node — for file references |
13
+
14
+ ---
15
+
16
+ ## Component system mixins — define these in your module first
17
+
18
+ ### Two-tier component mixin pattern
19
+
20
+ Define these in `settings/definitions.cnd` before all other types:
21
+
22
+ ```cnd
23
+ [nsmix:component] > jmix:droppableContent, jmix:accessControllableContent mixin
24
+ [nsmix:pageComponent] > nsmix:component mixin
25
+ ```
26
+
27
+ | Component will be… | Extend |
28
+ |---|---|
29
+ | Dropped in page areas | `nsmix:pageComponent` |
30
+ | Child of another component | `nsmix:component` |
31
+ | Listed programmatically | `nsmix:component` |
32
+
33
+ ### `jmix:droppableContent` — base for droppable types
34
+
35
+ Extends `mix:referenceable`. Never extend directly — always wrap in a module mixin.
36
+
37
+ ### `jmix:accessControllableContent` — per-component access control
38
+
39
+ Extends `mix:referenceable`. Include in your base module mixin so all components support it.
40
+
41
+ ---
42
+
43
+ ## Title & metadata mixins
44
+
45
+ ### `mix:title` — preferred over a raw title property
46
+
47
+ Adds `jcr:title` (string). Jahia's UI, breadcrumbs, SEO, and sitemap generation all read `jcr:title`.
48
+ **Extend this instead of declaring `- title (string) i18n mandatory`.**
49
+
50
+ ```cnd
51
+ [ns:article] > jnt:content, nsmix:component, mix:title
52
+ ```
53
+
54
+ Access in view: `props["jcr:title"]`
55
+
56
+ ### `jmix:description` — description metadata
57
+
58
+ Marker/metadata mixin for content descriptions.
59
+
60
+ ### `jmix:tagged` — free-form tagging
61
+
62
+ Adds `j:tagList` (string, multiple) with autocomplete and `j:tags` (weakreference, multiple, hidden/deprecated).
63
+
64
+ ```cnd
65
+ [ns:article] > jnt:content, nsmix:component, mix:title, jmix:tagged
66
+ ```
67
+
68
+ CND definition:
69
+ ```cnd
70
+ [jmix:tagged] mixin
71
+ extends = nt:hierarchyNode, jnt:content, jnt:page
72
+ itemtype = metadata
73
+ - j:tagList (string, tag[autocomplete=10, separator=',']) facetable nofulltext multiple
74
+ - j:tags (weakreference) multiple hidden
75
+ ```
76
+
77
+ ### `jmix:categorized` — category classification
78
+
79
+ Adds `j:defaultCategory` (weakreference, multiple) pointing to taxonomy categories.
80
+
81
+ ```cnd
82
+ [ns:article] > jnt:content, nsmix:component, mix:title, jmix:categorized
83
+ ```
84
+
85
+ CND definition:
86
+ ```cnd
87
+ [jmix:categorized] mixin
88
+ extends = nt:hierarchyNode, jnt:content, jnt:page
89
+ itemtype = classification
90
+ - j:defaultCategory (weakreference, category[autoSelectParent=false]) facetable hierarchical multiple
91
+ ```
92
+
93
+ ### `jmix:keywords` — keyword metadata
94
+
95
+ Marker mixin for keyword support.
96
+
97
+ ### `jmix:thumbnail` — thumbnail support
98
+
99
+ Marker mixin for thumbnail images.
100
+
101
+ ### `jmix:basemetadata` — standard metadata with versioning
102
+
103
+ Extends `jmix:unversionedBasemetadata`. Adds standard authoring metadata (author, dates, etc.) with versioning support.
104
+
105
+ ### `jmix:unversionedBasemetadata` — standard metadata without versioning
106
+
107
+ Includes i18n support. Use `jmix:basemetadata` unless versioning must be excluded.
108
+
109
+ ---
110
+
111
+ ## Publication & workflow mixins
112
+
113
+ ### `jmix:autoPublish` — automatic live publication
114
+
115
+ Extends `jmix:observable`. Any change to the node is immediately published to the live workspace without going through a workflow.
116
+
117
+ ```cnd
118
+ [ns:config] > jnt:content, jmix:hiddenType, jmix:autoPublish
119
+ ```
120
+
121
+ ### `jmix:publication` — independent publication
122
+
123
+ Marker mixin. Enables a node to be published independently of its parent.
124
+
125
+ ### `jmix:nolive` — prevent live publication
126
+
127
+ Marker mixin. Node is never published to the live workspace (e.g. draft-only content).
128
+
129
+ ### `jmix:workflow` — workflow tracking
130
+
131
+ Adds `j:processId` (string, multiple, protected, hidden). Tracks active workflow processes. Do not extend manually — Jahia applies it during workflow execution.
132
+
133
+ ### `jmix:noImportExport` — exclude from import/export
134
+
135
+ Marker mixin. Node is skipped during content import/export operations.
136
+
137
+ ### `jmix:lastPublished` — publication timestamp tracking
138
+
139
+ Marker mixin for tracking last publication date.
140
+
141
+ ---
142
+
143
+ ## Access control & visibility mixins
144
+
145
+ ### `jmix:accessControlled` — node-level ACL
146
+
147
+ Adds a `j:acl` child node (jnt:acl, mandatory, autocreated). Enables fine-grained ACL management on a specific node. Usually inherited via `jmix:accessControllableContent` — do not add directly unless you need ACL on a non-content node.
148
+
149
+ ### `jmix:requiredPermissions` — permission-based rendering
150
+
151
+ Controls whether a component renders based on the visitor's login state or role.
152
+
153
+ ```cnd
154
+ [ns:memberOnly] > jnt:content, nsmix:component, jmix:requiredPermissions
155
+ ```
156
+
157
+ Properties:
158
+ ```cnd
159
+ [jmix:requiredPermissions] mixin
160
+ extends = jnt:content, jnt:area, jnt:mainResourceDisplay
161
+ itemtype = permissions
162
+ - j:requireLoggedUser (boolean)
163
+ - j:requirePrivilegedUser (boolean)
164
+ - j:requiredMode (string, choicelist[renderModes]) nofulltext
165
+ ```
166
+
167
+ ### `jmix:lockable` — node locking
168
+
169
+ Marker mixin. Enables JCR locking on a node.
170
+
171
+ ### `jmix:conditionalVisibility` — conditional visibility rules
172
+
173
+ Marker mixin. Enables conditional visibility configuration (by date range, segment, etc.) in Page Builder.
174
+
175
+ ---
176
+
177
+ ## Rendering & template mixins
178
+
179
+ ### `jmix:mainResource` — full-page content types only
180
+
181
+ Makes a node accessible at its own URL. Use **only** for content that needs both a listing card AND a detail page (e.g. blog posts, team members, events). Do not add to navigation or visual composition types.
182
+
183
+ ```cnd
184
+ [ns:blogPost] > jnt:content, mix:title, jmix:mainResource, nsmix:component
185
+ ```
186
+
187
+ ### `jmix:renderableMainResource` — specify main resource view
188
+
189
+ Adds `j:mainResourceView` (string) to select which view template renders the detail page.
190
+
191
+ ```cnd
192
+ [jmix:renderableMainResource] mixin
193
+ - j:mainResourceView (string, choicelist[templates=mainresource, resourceBundle, image]) nofulltext
194
+ ```
195
+
196
+ ### `jmix:renderable` — renderable content
197
+
198
+ Marker mixin for content that can be rendered.
199
+
200
+ ### `jmix:hasTemplateNode` — template node association
201
+
202
+ Marker mixin. Associates a node with a specific template node.
203
+
204
+ ### `jmix:canBeUseAsTemplateModel` — template model
205
+
206
+ Marker mixin. Enables the node type to be used as a template model.
207
+
208
+ ### `jmix:createdFromPageModel` — page model origin
209
+
210
+ Marker mixin. Tracks that a page was created from a page model.
211
+
212
+ ### `jmix:templateMixin` — template property inheritance
213
+
214
+ Marker mixin. Enables template-specific property inheritance.
215
+
216
+ ### `jmix:dynamicFieldset` — dynamic fieldsets
217
+
218
+ Extends `jmix:templateMixin`. Enables dynamic fieldsets (properties that appear/disappear based on other selections) in the edit UI.
219
+
220
+ ### `jmix:theme` — theme support
221
+
222
+ Marker mixin for theming.
223
+
224
+ ### `jmix:useUILocale` — UI locale
225
+
226
+ Marker mixin. Renders content using the UI locale rather than the site locale.
227
+
228
+ ### `jmix:rbTitle` — resource bundle title
229
+
230
+ Marker mixin. Title comes from a resource bundle key rather than a stored string.
231
+
232
+ ---
233
+
234
+ ## Content organisation & type mixins
235
+
236
+ ### `jmix:hiddenType` — hide from Page Builder picker
237
+
238
+ Structural/container types editors should not add manually:
239
+
240
+ ```cnd
241
+ [ns:ctaContainer] > jnt:content, jmix:hiddenType orderable
242
+ ```
243
+
244
+ **Never use `jmix:studioOnly`** — it causes silent rendering issues.
245
+
246
+ ### `jmix:hiddenNode` — hide node from UI
247
+
248
+ Marker mixin. Hides a specific node instance from all UI displays (not the type — the node itself).
249
+
250
+ ### `jmix:studioOnly` — studio-only content
251
+
252
+ **Avoid.** Can cause silent rendering issues. Use `jmix:hiddenType` instead.
253
+
254
+ ### `jmix:listContent` — list content type
255
+
256
+ Extends `jmix:droppableContent, jmix:accessControllableContent`. Use for droppable list containers.
257
+
258
+ ### `jmix:basicContent` — basic content type
259
+
260
+ Extends `jmix:droppableContent, jmix:accessControllableContent`. Base for simple droppable components.
261
+
262
+ ### `jmix:structuredContent` — structured content
263
+
264
+ Marker mixin for structured data content types.
265
+
266
+ ### `jmix:editorialContent` — editorial content
267
+
268
+ Marker mixin. Identifies content managed editorially.
269
+
270
+ ### `jmix:siteContent` — site content
271
+
272
+ Marker mixin. Content scoped to a specific site.
273
+
274
+ ### `jmix:socialComponent` — social component
275
+
276
+ Marker mixin for social feature components.
277
+
278
+ ### `jmix:multimediaContent` — multimedia content
279
+
280
+ Marker mixin for audio/video content types.
281
+
282
+ ### `jmix:layoutComponentContent` — layout component
283
+
284
+ Marker mixin for layout/structural components.
285
+
286
+ ### `jmix:siteComponent` — site component
287
+
288
+ Marker mixin for site-level components.
289
+
290
+ ### `jmix:formContent` — form content
291
+
292
+ Marker mixin for form-related components.
293
+
294
+ ### `jmix:queryContent` — query content
295
+
296
+ Marker mixin for content that runs JCR queries.
297
+
298
+ ### `jmix:userProfileComponents` — user profile components
299
+
300
+ Marker mixin for user profile display components.
301
+
302
+ ### `jmix:browsableInEditorialPicker` — editorial picker navigation
303
+
304
+ Marker mixin. Makes nodes of this type appear as navigable folders in the editorial content picker UI.
305
+
306
+ ---
307
+
308
+ ## Ordering mixins
309
+
310
+ ### `jmix:manuallyOrderable` — manual child ordering
311
+
312
+ Marker mixin. Enables editors to manually reorder child nodes via drag-and-drop.
313
+
314
+ ```cnd
315
+ [ns:gallery] > jnt:content, nsmix:component, jmix:manuallyOrderable
316
+ ```
317
+
318
+ ### `jmix:automaticallyOrderable` — automatic ordering base
319
+
320
+ Marker mixin. Base for types that support automatic ordering.
321
+
322
+ ### `jmix:orderedList` — field-based automatic ordering
323
+
324
+ Extends `jmix:automaticallyOrderable`. Adds sort field/direction configuration to a content list.
325
+
326
+ ```cnd
327
+ [jmix:orderedList] mixin
328
+ itemtype = listOrdering
329
+ extends = jnt:contentList, jnt:area, jmix:automaticallyOrderable
330
+ - ignoreCase (boolean) = true autocreated
331
+ - firstField (string, choicelist[sortableFieldnames]) indexed=no
332
+ - firstDirection (string, choicelist[resourceBundle]) = 'asc' autocreated indexed=no < 'asc','desc'
333
+ ```
334
+
335
+ ---
336
+
337
+ ## Internationalisation & search
338
+
339
+ ### `jmix:i18n` — multilingual node support
340
+
341
+ Adds `j:invalidLanguages` (string, multiple) and child `jnt:translation` nodes. Jahia automatically applies this when a property is declared `i18n` — you do not extend it manually.
342
+
343
+ ```cnd
344
+ [jmix:i18n] mixin
345
+ - j:invalidLanguages (string) multiple nofulltext hidden
346
+ + * (jnt:translation)
347
+ ```
348
+
349
+ ### `jmix:searchable` — search indexing
350
+
351
+ Marker mixin. Identifies nodes that should be discoverable via search.
352
+
353
+ ---
354
+
355
+ ## File & document mixins
356
+
357
+ ### `jmix:image` — image type constraint
358
+
359
+ Use as a constraint on image weakreference properties:
360
+
361
+ ```cnd
362
+ - backgroundImage (weakreference, picker[type='image']) < jmix:image
363
+ ```
364
+
365
+ **Never use `< 'jnt:file'`** — it does not enforce image type correctly.
366
+
367
+ **Never declare `imageAlt (string) i18n`** alongside an image weakreference. Use the image node's `jcr:title` as alt text:
368
+
369
+ ```tsx
370
+ const imageAlt = props.image?.getPropertyAsString("jcr:title") ?? "";
371
+ ```
372
+
373
+ ### `jmix:document` — document metadata
374
+
375
+ Metadata mixin for documents (page count, word count, etc.).
376
+
377
+ ### `jmix:exif` — EXIF image data
378
+
379
+ Adds EXIF metadata properties to image file nodes.
380
+
381
+ ### `jmix:photo` — photo properties
382
+
383
+ Photo-specific metadata mixin.
384
+
385
+ ### `jmix:size` — width/height properties
386
+
387
+ Adds height and width properties.
388
+
389
+ ### `jmix:extension` — file extension marker
390
+
391
+ Marker mixin for file type extension tracking.
392
+
393
+ ---
394
+
395
+ ## Link & reference mixins
396
+
397
+ ### `jmix:link` — built-in link type
398
+
399
+ Provides `j:linkType`, `j:linknode`, `j:url`, `j:linkTitle`. Extend this mixin for types that need link behaviour without declaring `j:linkType` directly.
400
+
401
+ ### `jmix:nodeReference` — node reference support
402
+
403
+ Marker mixin for types that reference other nodes.
404
+
405
+ ### `jmix:referencesInField` — field-level references
406
+
407
+ Marker mixin. Enables reference tracking at the field level.
408
+
409
+ ### `jmix:bindedComponent` — component binding
410
+
411
+ Marker mixin for components bound to other components.
412
+
413
+ ### `jmix:externalReference` — external references
414
+
415
+ Marker mixin for types referencing external (non-JCR) resources.
416
+
417
+ ---
418
+
419
+ ## Navigation mixins
420
+
421
+ ### `jmix:navMenu` — navigation menu
422
+
423
+ Marker mixin for navigation menu containers.
424
+
425
+ ### `jmix:navMenuItem` — navigation menu item
426
+
427
+ Marker mixin for individual navigation menu entries.
428
+
429
+ ### `jmix:visibleInPagesTree` — pages tree visibility
430
+
431
+ Marker mixin. Makes nodes visible in the pages tree navigation.
432
+
433
+ ### `jmix:visibleInContentTree` — content tree visibility
434
+
435
+ Marker mixin. Makes nodes visible in the content tree navigation.
436
+
437
+ ---
438
+
439
+ ## Caching & performance mixins
440
+
441
+ ### `jmix:cache` — cache configuration
442
+
443
+ Marker mixin for configuring component-level caching behaviour.
444
+
445
+ ---
446
+
447
+ ## System & structural mixins (do not extend unless building infrastructure)
448
+
449
+ | Mixin | Purpose |
450
+ |---|---|
451
+ | `jmix:nodenameInfo` | System node identification marker |
452
+ | `jmix:systemNode` | System node marker |
453
+ | `jmix:observable` | Event-based monitoring (observable pattern) |
454
+ | `jmix:list` | Identifies container/collection nodes |
455
+ | `jmix:isAreaList` | Area list marker |
456
+ | `jmix:shareable` | Shareable content (shared nodes across paths) |
457
+ | `jmix:unstructured` | Unstructured content (accepts any child) |
458
+ | `jmix:hasIcon` | Icon support |
459
+ | `jmix:systemNameReadonly` | Prevents renaming via UI |
460
+ | `jmix:blockUiMove` | Prevents drag-move in UI |
461
+ | `jmix:skipConstraintCheck` | Bypasses node type constraint checks |
462
+ | `jmix:contributeMode` | Contribute mode support |
463
+ | `jmix:listRestrictions` | List restrictions configuration |
464
+ | `jmix:studioLayout` | Studio layout marker |
465
+ | `jmix:listedInRestrictions` | Listed-in-restrictions marker |
466
+ | `jmix:markedForDeletion` | Deletion marker (internal) |
467
+ | `jmix:markedForDeletionRoot` | Deletion root marker (internal) |
468
+ | `jmix:autoSplitFolders` | Auto-splits folders when child count is high |
469
+ | `jmix:hideDeleteAction` | Hides delete action in UI |
470
+ | `jmix:htmlSettings` | HTML settings |
471
+ | `jmix:viewProperties` | View properties |
472
+ | `jmix:mockupStyle` | Mockup styling |
473
+ | `jmix:requireLicense` | License requirement marker |
474
+ | `jmix:hasExternalProviderExtension` | External provider extension support |
475
+ | `jmix:sourceControl` | Source control integration |
476
+ | `jmix:moduleImportFile` | Module import file marker |
477
+ | `jmix:originWS` | Workspace origin tracking |
478
+ | `jmix:liveProperties` | Live workspace properties |
479
+ | `jmix:deletedChildren` | Deleted children tracking |
480
+
481
+ ---
482
+
483
+ ## Legacy/compatibility mixins (do not use in new modules)
484
+
485
+ | Mixin | Notes |
486
+ |---|---|
487
+ | `jmix:filemetadata` | Replaced by `jmix:basemetadata` |
488
+ | `jmix:hierarchyNode` | Legacy hierarchy marker |
489
+ | `jmix:collection` | Legacy collection marker |
490
+ | `jmix:usersFolder` | Legacy users folder (extends `nt:base`) |
491
+ | `jmix:groupsFolder` | Legacy groups folder |
492
+ | `jmix:virtualsitesFolder` | Legacy virtual sites folder |
493
+ | `jmix:mountPointFactory` | Mount point factory |
494
+ | `jmix:legacyContent` | Legacy content marker |
495
+ | `jmix:legacyPage` | Legacy page marker |
496
+ | `jmix:legacyFile` | Legacy file marker |
497
+
498
+ ---
499
+
500
+ ## picker[] selector
501
+
502
+ | Selector | Use |
503
+ |---|---|
504
+ | `picker[type='image']` | Image assets only |
505
+ | `picker[type='file']` | Any file asset |
506
+
507
+ ```cnd
508
+ - backgroundImage (weakreference, picker[type='image']) < jmix:image
509
+ - attachment (weakreference, picker[type='file']) < jnt:file
510
+ ```
@@ -0,0 +1,87 @@
1
+ # CND Content Modeling Decisions
2
+
3
+ ## Scale of thumbs
4
+
5
+ A well-scoped module has: **1–4 page templates, 5–10 content types, 2–5 mixins, 1–4 views per type.**
6
+ If a request exceeds this, flag it and split work into sessions.
7
+
8
+ ---
9
+
10
+ ## Semantic vs generic types
11
+
12
+ | Use semantic types for… | Use generic types for… |
13
+ |---|---|
14
+ | Business entities: articles, team members, events | Visual composition: banners, feature rows |
15
+ | Items that appear in listings/collections | One-off sections, layout containers |
16
+ | Content with business logic or user restrictions | Reusable UI blocks without meaning |
17
+ | Content that needs a detail page (`jmix:mainResource`) | |
18
+
19
+ When in doubt, prefer semantic — its evolutions are easier to design.
20
+
21
+ ---
22
+
23
+ ## Weakreference vs children
24
+
25
+ | Use children when… | Use weakreference when… |
26
+ |---|---|
27
+ | Parent is a visual container (CTAs inside a hero) | Internal links (call to action targets, page links) |
28
+ | Children have no life outside the parent | Many-to-many relationships (author ↔ blog post) |
29
+ | Always created together | Content managed/reused elsewhere |
30
+ | Each child has multiple properties (label + link) | Each item is just a reference to an existing node |
31
+
32
+ - Many-to-many = MUST use `weakreference multiple`
33
+ - One-to-many = prefer children when parent is the container
34
+
35
+ ---
36
+
37
+ ## Mixin vs child node vs inheritance
38
+
39
+ | Use mixin when… | Use child nodes when… | Use inheritance when… |
40
+ |---|---|---|
41
+ | Reusing properties across unrelated types | Multiple instances needed (multiple CTAs) | Retaining original views + adding fields in new views |
42
+ | At most one instance per component | | |
43
+
44
+ **Avoid inheritance in general** — it duplicates types in the editor picker.
45
+
46
+ Never extend anything other than `jnt:content` (or your base mixin). To add fields to a type you don't control, use a mixin with `extends`:
47
+
48
+ ```cnd
49
+ [nsmix:morePageFields] mixin extends=jnt:page
50
+ - myField (string) i18n
51
+ ```
52
+
53
+ ---
54
+
55
+ ## Pages vs jmix:mainResource
56
+
57
+ | Use pages when… | Use jmix:mainResource when… |
58
+ |---|---|
59
+ | Content is a standalone page with no structured data | Content needs both a listing card AND a detail page |
60
+ | No programmatic listing/filtering needed | Content collections (blog posts, events, team members) |
61
+
62
+ ---
63
+
64
+ ## Common reusable mixin patterns
65
+
66
+ | Mixin name | Properties | When to use |
67
+ |---|---|---|
68
+ | `nsmix:cta` | `label (string) i18n`, `j:linkType (string, choicelist[linkTypeInitializer])` | Any type with a button/link |
69
+ | `nsmix:media` | `image (weakreference, picker[type='image']) < jmix:image` | Any type with an image |
70
+ | `nsmix:seo` | `metaTitle (string) i18n`, `metaDescription (string, textarea) i18n` | Any `jmix:mainResource` type |
71
+ | `nsmix:badge` | `badgeText (string) i18n`, `badgeColor (string, color)` | Cards, teasers |
72
+
73
+ Always extract to a mixin when the same set of properties appears on 2+ types.
74
+
75
+ ---
76
+
77
+ ## Spec template (interactive mode)
78
+
79
+ ```
80
+ Component: [PascalCase name]
81
+ Description: [what editors create with this]
82
+ Fields:
83
+ - name: data type, i18n?, mandatory?, multiple?
84
+ Views: [default / card / fullPage / small]
85
+ Used where: [page area / content folder / child of <Parent>]
86
+ Repeatable children: [no / yes: describe]
87
+ ```
@@ -0,0 +1,92 @@
1
+ # CND Numeric, Date & Boolean Properties
2
+
3
+ ## Types
4
+
5
+ | Type | Editor widget | Notes |
6
+ |---|---|---|
7
+ | `long` | Integer number input | Counts, limits, columns |
8
+ | `double` | Decimal number input | Coordinates, prices, ratios |
9
+ | `boolean` | Checkbox | Feature flags, toggles |
10
+ | `date` | Date picker | ISO 8601 stored, string in TypeScript |
11
+ | `date, datepicker` | Date-only picker | Same storage, date-only widget |
12
+ | `date, datetimepicker` | Date + time picker | Use when time precision is needed |
13
+
14
+ ## Types to avoid
15
+
16
+ | Avoid | Use instead | Reason |
17
+ |---|---|---|
18
+ | `path` | `weakreference` | weakreference is the preferred reference type |
19
+ | `reference` | `weakreference` | Not properly implemented |
20
+ | `uri` | `string` | No added value |
21
+ | `decimal` | `double` | Use double for decimal numbers |
22
+ | `name` | `string` | JCR node type name; use string instead |
23
+ | `binary` | — | Binary data; rarely needed in practice |
24
+ | `undefined` | — | Unknown type; avoid |
25
+
26
+ ## Default values with `autocreated`
27
+
28
+ Always combine `autocreated` with `= 'value'`:
29
+
30
+ ```cnd
31
+ - columns (long) = '3' autocreated mandatory < '1', '2', '3', '4'
32
+ - isHighlighted (boolean) = 'false' autocreated
33
+ - country (string, choicelist[country]) = 'US' autocreated mandatory
34
+ ```
35
+
36
+ ### `date` default — `now()`
37
+
38
+ Use `now()` (no quotes) to default a date to the current time at node creation:
39
+
40
+ ```cnd
41
+ - publishDate (date, datepicker) = now() autocreated
42
+ ```
43
+
44
+ ## Range constraints
45
+
46
+ ```cnd
47
+ // Numeric range — inclusive brackets
48
+ - latitude (double) mandatory < "[-90,90]"
49
+ - longitude (double) mandatory < "[-180,180]"
50
+ - rating (long) mandatory < "[1,5]"
51
+ ```
52
+
53
+ **Star ratings always need a range constraint.** Never write `rating (long)` without `< "[1,5]"`:
54
+
55
+ ```cnd
56
+ // WRONG
57
+ - rating (long) = 5 indexed=no
58
+
59
+ // CORRECT
60
+ - rating (long) = '3' autocreated mandatory < "[1,5]"
61
+ ```
62
+
63
+ ## Date range constraints
64
+
65
+ Parentheses = exclusive bound, brackets = inclusive. Leave a side empty for open-ended:
66
+
67
+ ```cnd
68
+ // Any date after 2020-01-01 (exclusive)
69
+ - eventDate (date, datepicker) < '(2020-01-01T00:00:00.000,)'
70
+
71
+ // Bounded campaign window
72
+ - campaignDate (date, datepicker) < '(2020-01-01T00:00:00.000,2030-12-31T00:00:00.000)'
73
+ ```
74
+
75
+ ## `datetimepicker` vs `datepicker`
76
+
77
+ ```cnd
78
+ // Date only
79
+ - publishDate (date, datepicker) = now() autocreated
80
+
81
+ // Date + time
82
+ - eventDateTime (date, datetimepicker) i18n mandatory
83
+ ```
84
+
85
+ ## TypeScript mapping
86
+
87
+ | CND type | TypeScript |
88
+ |---|---|
89
+ | `long` | `number` |
90
+ | `double` | `number` |
91
+ | `boolean` | `boolean` |
92
+ | `date` | `string` (ISO 8601) |