@smartsoft001-mobilems/claude-plugins 2.92.0 → 2.94.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/package.json +1 -1
- package/plugins/mobilems/.claude-plugin/plugin.json +1 -1
- package/plugins/mobilems/skills/mobilems-articles/references/module-and-routes.md +7 -2
- package/plugins/mobilems/skills/mobilems-articles/scripts/verify-module.sh +9 -0
- package/plugins/mobilems/skills/mobilems-events/references/module-and-routes.md +7 -2
- package/plugins/mobilems/skills/mobilems-events/scripts/verify-module.sh +9 -0
- package/plugins/mobilems/skills/mobilems-object-collections/references/module-and-routes.md +7 -4
- package/plugins/mobilems/skills/mobilems-object-collections/scripts/verify-module.sh +9 -0
- package/plugins/mobilems/skills/mobilems-objects/references/module-and-routes.md +7 -2
- package/plugins/mobilems/skills/mobilems-objects/scripts/verify-module.sh +9 -0
- package/plugins/mobilems/skills/mobilems-partners/references/module-and-routes.md +7 -2
- package/plugins/mobilems/skills/mobilems-partners/scripts/verify-module.sh +9 -0
- package/plugins/mobilems/skills/mobilems-search/SKILL.md +7 -4
- package/plugins/mobilems/skills/mobilems-static-pages/SKILL.md +7 -3
- package/plugins/mobilems/skills/mobilems-thematic-publications/references/module-and-routes.md +7 -4
- package/plugins/mobilems/skills/mobilems-thematic-publications/scripts/verify-module.sh +9 -0
package/package.json
CHANGED
|
@@ -73,14 +73,19 @@ The list page renders the grid like this — copy this shape, it is the required
|
|
|
73
73
|
<ng-template #masonryContentTpl>
|
|
74
74
|
<div class="masonry-grid-sizer"></div>
|
|
75
75
|
@for (item of list(); track item.id) {
|
|
76
|
-
<
|
|
76
|
+
<smart-<name>-grid-item [item]="item" />
|
|
77
77
|
}
|
|
78
78
|
</ng-template>
|
|
79
79
|
</smart-mobilems-masonry-grid>
|
|
80
80
|
```
|
|
81
81
|
|
|
82
82
|
`.masonry-grid-sizer` and `.masonry-item` are required — they are the component's default
|
|
83
|
-
`columnWidth` / `itemSelector`. The
|
|
83
|
+
`columnWidth` / `itemSelector`. The grid item CARRIES `masonry-item` on its own root element (host class — exactly like
|
|
84
|
+
`news-grid-item` / `objects-grid-item` in the template's shared components; for a module-local
|
|
85
|
+
card, put `class="masonry-item ..."` on the card's root yourself). **NEVER wrap a card in an
|
|
86
|
+
extra `<div class="masonry-item">`** — masonry itemizes matching descendants too, so the card
|
|
87
|
+
would be laid out twice, collapse to a fraction of the column width and overlap its neighbours
|
|
88
|
+
(this exact defect scored I6b=40 in benchmark batch H s3). The card (shared-components.md) is the only module-specific part. Inputs,
|
|
84
89
|
public methods and the SSR provider are documented in the framework catalog,
|
|
85
90
|
[`packages/shared/angular/README.md`](https://github.com/smartsoft001/mobilems-framework/blob/main/packages/shared/angular/README.md#masonrygridcomponent)
|
|
86
91
|
(installed as `node_modules/@smartsoft001-mobilems/angular/README.md`).
|
|
@@ -86,6 +86,15 @@ if [ -n "$LISTP" ]; then
|
|
|
86
86
|
bad "list page does not render <smart-mobilems-masonry-grid> (README.md#masonrygridcomponent)"
|
|
87
87
|
fi
|
|
88
88
|
fi
|
|
89
|
+
# 3b. cards carry .masonry-item on their OWN root — wrapping them in another
|
|
90
|
+
# .masonry-item element makes masonry itemize BOTH (fizzy-ui-utils matches
|
|
91
|
+
# descendants too): the inner card goes position:absolute inside the outer one
|
|
92
|
+
# and collapses to a fraction of the column width (batch H s3, gate I6b=40).
|
|
93
|
+
if [ -n "$LISTP" ] && grep -rqE '<div[^>]*class="[^"]*masonry-item' $LISTP 2>/dev/null; then
|
|
94
|
+
bad "list page template wraps cards in <div class=\"masonry-item\"> — the card carries the class itself; render it directly"
|
|
95
|
+
else
|
|
96
|
+
pass "no nested .masonry-item wrappers"
|
|
97
|
+
fi
|
|
89
98
|
# 4. filters must EXTEND the framework base class — `context.` alone proves nothing, and a
|
|
90
99
|
# differently-named dir must not silently skip the check
|
|
91
100
|
FILT="$(find "$LIBDIR/components" -maxdepth 1 -type d \( -name 'filters*' -o -name 'search*' -o -name 'facet*' \) 2>/dev/null || true)"
|
|
@@ -101,14 +101,19 @@ The list page renders the grid like this — copy this shape, it is the required
|
|
|
101
101
|
<ng-template #masonryContentTpl>
|
|
102
102
|
<div class="masonry-grid-sizer"></div>
|
|
103
103
|
@for (item of list(); track item.id) {
|
|
104
|
-
<
|
|
104
|
+
<app-events-grid-item [item]="item" />
|
|
105
105
|
}
|
|
106
106
|
</ng-template>
|
|
107
107
|
</smart-mobilems-masonry-grid>
|
|
108
108
|
```
|
|
109
109
|
|
|
110
110
|
`.masonry-grid-sizer` and `.masonry-item` are required — they are the component's default
|
|
111
|
-
`columnWidth` / `itemSelector`. The
|
|
111
|
+
`columnWidth` / `itemSelector`. The grid item CARRIES `masonry-item` on its own root element (host class — exactly like
|
|
112
|
+
`news-grid-item` / `objects-grid-item` in the template's shared components; for a module-local
|
|
113
|
+
card, put `class="masonry-item ..."` on the card's root yourself). **NEVER wrap a card in an
|
|
114
|
+
extra `<div class="masonry-item">`** — masonry itemizes matching descendants too, so the card
|
|
115
|
+
would be laid out twice, collapse to a fraction of the column width and overlap its neighbours
|
|
116
|
+
(this exact defect scored I6b=40 in benchmark batch H s3). The card (lib-contents.md) is the only module-specific part. Inputs,
|
|
112
117
|
public methods and the SSR provider are documented in the framework catalog,
|
|
113
118
|
[`packages/shared/angular/README.md`](https://github.com/smartsoft001/mobilems-framework/blob/main/packages/shared/angular/README.md#masonrygridcomponent)
|
|
114
119
|
(installed as `node_modules/@smartsoft001-mobilems/angular/README.md`).
|
|
@@ -83,6 +83,15 @@ if [ -n "$LISTP" ]; then
|
|
|
83
83
|
bad "list page does not render <smart-mobilems-masonry-grid> (README.md#masonrygridcomponent)"
|
|
84
84
|
fi
|
|
85
85
|
fi
|
|
86
|
+
# 3b. cards carry .masonry-item on their OWN root — wrapping them in another
|
|
87
|
+
# .masonry-item element makes masonry itemize BOTH (fizzy-ui-utils matches
|
|
88
|
+
# descendants too): the inner card goes position:absolute inside the outer one
|
|
89
|
+
# and collapses to a fraction of the column width (batch H s3, gate I6b=40).
|
|
90
|
+
if [ -n "$LISTP" ] && grep -rqE '<div[^>]*class="[^"]*masonry-item' $LISTP 2>/dev/null; then
|
|
91
|
+
bad "list page template wraps cards in <div class=\"masonry-item\"> — the card carries the class itself; render it directly"
|
|
92
|
+
else
|
|
93
|
+
pass "no nested .masonry-item wrappers"
|
|
94
|
+
fi
|
|
86
95
|
# 4. filters must EXTEND the framework base class — `context.` alone proves nothing, and a
|
|
87
96
|
# differently-named dir must not silently skip the check
|
|
88
97
|
FILT="$(find "$LIBDIR/components" -maxdepth 1 -type d \( -name 'filters*' -o -name 'search*' -o -name 'facet*' \) 2>/dev/null || true)"
|
|
@@ -80,16 +80,19 @@ The list page renders the grid like this — copy this shape, it is the required
|
|
|
80
80
|
<ng-template #masonryContentTpl>
|
|
81
81
|
<div class="masonry-grid-sizer"></div>
|
|
82
82
|
@for (item of list(); track item.id) {
|
|
83
|
-
<
|
|
84
|
-
<smart-collections-grid-item [item]="item" />
|
|
85
|
-
</div>
|
|
83
|
+
<smart-collections-grid-item [item]="item" />
|
|
86
84
|
}
|
|
87
85
|
</ng-template>
|
|
88
86
|
</smart-mobilems-masonry-grid>
|
|
89
87
|
```
|
|
90
88
|
|
|
91
89
|
`.masonry-grid-sizer` and `.masonry-item` are required — they are the component's default
|
|
92
|
-
`columnWidth` / `itemSelector`. The
|
|
90
|
+
`columnWidth` / `itemSelector`. The grid item CARRIES `masonry-item` on its own root element (host class — exactly like
|
|
91
|
+
`news-grid-item` / `objects-grid-item` in the template's shared components; for a module-local
|
|
92
|
+
card, put `class="masonry-item ..."` on the card's root yourself). **NEVER wrap a card in an
|
|
93
|
+
extra `<div class="masonry-item">`** — masonry itemizes matching descendants too, so the card
|
|
94
|
+
would be laid out twice, collapse to a fraction of the column width and overlap its neighbours
|
|
95
|
+
(this exact defect scored I6b=40 in benchmark batch H s3). The card (shared-components.md) is the only module-specific part. Inputs,
|
|
93
96
|
public methods and the SSR provider are documented in the framework catalog,
|
|
94
97
|
[`packages/shared/angular/README.md`](https://github.com/smartsoft001/mobilems-framework/blob/main/packages/shared/angular/README.md#masonrygridcomponent)
|
|
95
98
|
(installed as `node_modules/@smartsoft001-mobilems/angular/README.md`).
|
|
@@ -70,6 +70,15 @@ if [ -n "$ITEMP" ]; then
|
|
|
70
70
|
bad "item page does not render <smart-mobilems-masonry-grid> (README.md#masonrygridcomponent)"
|
|
71
71
|
fi
|
|
72
72
|
fi
|
|
73
|
+
# 3b. cards carry .masonry-item on their OWN root — wrapping them in another
|
|
74
|
+
# .masonry-item element makes masonry itemize BOTH (fizzy-ui-utils matches
|
|
75
|
+
# descendants too): the inner card goes position:absolute inside the outer one
|
|
76
|
+
# and collapses to a fraction of the column width (batch H s3, gate I6b=40).
|
|
77
|
+
if [ -n "$ITEMP" ] && grep -rqE '<div[^>]*class="[^"]*masonry-item' $ITEMP 2>/dev/null; then
|
|
78
|
+
bad "item page template wraps cards in <div class=\"masonry-item\"> — the card carries the class itself; render it directly"
|
|
79
|
+
else
|
|
80
|
+
pass "no nested .masonry-item wrappers"
|
|
81
|
+
fi
|
|
73
82
|
# 4. filters must EXTEND the framework base class — `context.` alone proves nothing, and a
|
|
74
83
|
# differently-named dir must not silently skip the check
|
|
75
84
|
FILT="$(find "$LIBDIR/components" -maxdepth 1 -type d \( -name 'filters*' -o -name 'search*' -o -name 'facet*' \) 2>/dev/null || true)"
|
|
@@ -74,14 +74,19 @@ The list page renders the grid like this — copy this shape, it is the required
|
|
|
74
74
|
<ng-template #masonryContentTpl>
|
|
75
75
|
<div class="masonry-grid-sizer"></div>
|
|
76
76
|
@for (item of list(); track item.id) {
|
|
77
|
-
<
|
|
77
|
+
<smart-objects-grid-item [item]="item" />
|
|
78
78
|
}
|
|
79
79
|
</ng-template>
|
|
80
80
|
</smart-mobilems-masonry-grid>
|
|
81
81
|
```
|
|
82
82
|
|
|
83
83
|
`.masonry-grid-sizer` and `.masonry-item` are required — they are the component's default
|
|
84
|
-
`columnWidth` / `itemSelector`. The
|
|
84
|
+
`columnWidth` / `itemSelector`. The grid item CARRIES `masonry-item` on its own root element (host class — exactly like
|
|
85
|
+
`news-grid-item` / `objects-grid-item` in the template's shared components; for a module-local
|
|
86
|
+
card, put `class="masonry-item ..."` on the card's root yourself). **NEVER wrap a card in an
|
|
87
|
+
extra `<div class="masonry-item">`** — masonry itemizes matching descendants too, so the card
|
|
88
|
+
would be laid out twice, collapse to a fraction of the column width and overlap its neighbours
|
|
89
|
+
(this exact defect scored I6b=40 in benchmark batch H s3). The card (shared-components.md) is the only module-specific part. Inputs,
|
|
85
90
|
public methods and the SSR provider are documented in the framework catalog,
|
|
86
91
|
[`packages/shared/angular/README.md`](https://github.com/smartsoft001/mobilems-framework/blob/main/packages/shared/angular/README.md#masonrygridcomponent)
|
|
87
92
|
(installed as `node_modules/@smartsoft001-mobilems/angular/README.md`).
|
|
@@ -76,6 +76,15 @@ if [ -n "$LISTP" ]; then
|
|
|
76
76
|
bad "list page does not render <smart-mobilems-masonry-grid> (README.md#masonrygridcomponent)"
|
|
77
77
|
fi
|
|
78
78
|
fi
|
|
79
|
+
# 3b. cards carry .masonry-item on their OWN root — wrapping them in another
|
|
80
|
+
# .masonry-item element makes masonry itemize BOTH (fizzy-ui-utils matches
|
|
81
|
+
# descendants too): the inner card goes position:absolute inside the outer one
|
|
82
|
+
# and collapses to a fraction of the column width (batch H s3, gate I6b=40).
|
|
83
|
+
if [ -n "$LISTP" ] && grep -rqE '<div[^>]*class="[^"]*masonry-item' $LISTP 2>/dev/null; then
|
|
84
|
+
bad "list page template wraps cards in <div class=\"masonry-item\"> — the card carries the class itself; render it directly"
|
|
85
|
+
else
|
|
86
|
+
pass "no nested .masonry-item wrappers"
|
|
87
|
+
fi
|
|
79
88
|
# 4. filters must EXTEND the framework base class — `context.` alone proves nothing, and a
|
|
80
89
|
# differently-named dir must not silently skip the check
|
|
81
90
|
FILT="$(find "$LIBDIR/components" -maxdepth 1 -type d \( -name 'filters*' -o -name 'search*' -o -name 'facet*' \) 2>/dev/null || true)"
|
|
@@ -78,14 +78,19 @@ The list page renders the grid like this — copy this shape, it is the required
|
|
|
78
78
|
<ng-template #masonryContentTpl>
|
|
79
79
|
<div class="masonry-grid-sizer"></div>
|
|
80
80
|
@for (item of list(); track item.id) {
|
|
81
|
-
<
|
|
81
|
+
<app-partners-grid-item [item]="item" />
|
|
82
82
|
}
|
|
83
83
|
</ng-template>
|
|
84
84
|
</smart-mobilems-masonry-grid>
|
|
85
85
|
```
|
|
86
86
|
|
|
87
87
|
`.masonry-grid-sizer` and `.masonry-item` are required — they are the component's default
|
|
88
|
-
`columnWidth` / `itemSelector`. The
|
|
88
|
+
`columnWidth` / `itemSelector`. The grid item CARRIES `masonry-item` on its own root element (host class — exactly like
|
|
89
|
+
`news-grid-item` / `objects-grid-item` in the template's shared components; for a module-local
|
|
90
|
+
card, put `class="masonry-item ..."` on the card's root yourself). **NEVER wrap a card in an
|
|
91
|
+
extra `<div class="masonry-item">`** — masonry itemizes matching descendants too, so the card
|
|
92
|
+
would be laid out twice, collapse to a fraction of the column width and overlap its neighbours
|
|
93
|
+
(this exact defect scored I6b=40 in benchmark batch H s3). The card (lib-contents.md) is the only module-specific part. Inputs,
|
|
89
94
|
public methods and the SSR provider are documented in the framework catalog,
|
|
90
95
|
[`packages/shared/angular/README.md`](https://github.com/smartsoft001/mobilems-framework/blob/main/packages/shared/angular/README.md#masonrygridcomponent)
|
|
91
96
|
(installed as `node_modules/@smartsoft001-mobilems/angular/README.md`).
|
|
@@ -84,6 +84,15 @@ if [ -n "$LISTP" ]; then
|
|
|
84
84
|
bad "list page does not render <smart-mobilems-masonry-grid> (README.md#masonrygridcomponent)"
|
|
85
85
|
fi
|
|
86
86
|
fi
|
|
87
|
+
# 3b. cards carry .masonry-item on their OWN root — wrapping them in another
|
|
88
|
+
# .masonry-item element makes masonry itemize BOTH (fizzy-ui-utils matches
|
|
89
|
+
# descendants too): the inner card goes position:absolute inside the outer one
|
|
90
|
+
# and collapses to a fraction of the column width (batch H s3, gate I6b=40).
|
|
91
|
+
if [ -n "$LISTP" ] && grep -rqE '<div[^>]*class="[^"]*masonry-item' $LISTP 2>/dev/null; then
|
|
92
|
+
bad "list page template wraps cards in <div class=\"masonry-item\"> — the card carries the class itself; render it directly"
|
|
93
|
+
else
|
|
94
|
+
pass "no nested .masonry-item wrappers"
|
|
95
|
+
fi
|
|
87
96
|
# 4. filters must EXTEND the framework base class — `context.` alone proves nothing, and a
|
|
88
97
|
# differently-named dir must not silently skip the check
|
|
89
98
|
FILT="$(find "$LIBDIR/components" -maxdepth 1 -type d \( -name 'filters*' -o -name 'search*' -o -name 'facet*' \) 2>/dev/null || true)"
|
|
@@ -41,10 +41,13 @@ representations of the same object.
|
|
|
41
41
|
|
|
42
42
|
## Steps
|
|
43
43
|
|
|
44
|
-
1. **Read the mockup** in `docs/mockups/`
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
the
|
|
44
|
+
1. **Read the mockup — once** in `docs/mockups/` and write
|
|
45
|
+
`.ai/tasks/<issue>/mockup-notes.md` (layout, spacing, colours as token names,
|
|
46
|
+
typography, field order, states) before styling; work from the note and do
|
|
47
|
+
not re-read the image in this step. The searchbar and the result list item
|
|
48
|
+
are usually exported as separate design-system components rather than a full
|
|
49
|
+
screen, so match the component and keep the page layout consistent with the
|
|
50
|
+
rest of the portal.
|
|
48
51
|
2. **Tabs come from modules.** Each feature module registers a child route under
|
|
49
52
|
`wyszukaj/:text` (its search module) and the page builds its tab list from
|
|
50
53
|
what is registered. When a tab is missing, fix it in that module's skill
|
|
@@ -39,9 +39,13 @@ exists. Re-implementing it is a defect, not a shortcut:
|
|
|
39
39
|
|
|
40
40
|
## Steps
|
|
41
41
|
|
|
42
|
-
1. **Read the mockup.** Exports live in `docs/mockups/`; read them (Read)
|
|
43
|
-
than guessing from the Figma link
|
|
44
|
-
|
|
42
|
+
1. **Read the mockup — once.** Exports live in `docs/mockups/`; read them (Read)
|
|
43
|
+
rather than guessing from the Figma link, then immediately write
|
|
44
|
+
`.ai/tasks/<issue>/mockup-notes.md` (layout order, grid and spacing, colours
|
|
45
|
+
as token names, typography, field order, states, header and footer) and work
|
|
46
|
+
from the note. Note the container width, heading scale, spacing rhythm and
|
|
47
|
+
how the page header/hero differs from the module pages. Do not re-read the
|
|
48
|
+
image later in this step; `/flow:impl` reads it once more in its comparison.
|
|
45
49
|
2. **CMS data — render everything the API sends.** The page payload carries more
|
|
46
50
|
than a title and body: `image`, `backgroundImage`, `links`, `slides`.
|
|
47
51
|
A field that arrives and is not rendered reads to the client as a missing
|
package/plugins/mobilems/skills/mobilems-thematic-publications/references/module-and-routes.md
CHANGED
|
@@ -81,16 +81,19 @@ The list page renders the grid like this — copy this shape, it is the required
|
|
|
81
81
|
<ng-template #masonryContentTpl>
|
|
82
82
|
<div class="masonry-grid-sizer"></div>
|
|
83
83
|
@for (item of list(); track item.id) {
|
|
84
|
-
<
|
|
85
|
-
<app-thematic-paths-list-item [item]="item" />
|
|
86
|
-
</div>
|
|
84
|
+
<app-thematic-paths-list-item [item]="item" />
|
|
87
85
|
}
|
|
88
86
|
</ng-template>
|
|
89
87
|
</smart-mobilems-masonry-grid>
|
|
90
88
|
```
|
|
91
89
|
|
|
92
90
|
`.masonry-grid-sizer` and `.masonry-item` are required — they are the component's default
|
|
93
|
-
`columnWidth` / `itemSelector`. The
|
|
91
|
+
`columnWidth` / `itemSelector`. The grid item CARRIES `masonry-item` on its own root element (host class — exactly like
|
|
92
|
+
`news-grid-item` / `objects-grid-item` in the template's shared components; for a module-local
|
|
93
|
+
card, put `class="masonry-item ..."` on the card's root yourself). **NEVER wrap a card in an
|
|
94
|
+
extra `<div class="masonry-item">`** — masonry itemizes matching descendants too, so the card
|
|
95
|
+
would be laid out twice, collapse to a fraction of the column width and overlap its neighbours
|
|
96
|
+
(this exact defect scored I6b=40 in benchmark batch H s3). The card (lib-contents.md) is the only module-specific part. Inputs,
|
|
94
97
|
public methods and the SSR provider are documented in the framework catalog,
|
|
95
98
|
[`packages/shared/angular/README.md`](https://github.com/smartsoft001/mobilems-framework/blob/main/packages/shared/angular/README.md#masonrygridcomponent)
|
|
96
99
|
(installed as `node_modules/@smartsoft001-mobilems/angular/README.md`).
|
|
@@ -80,6 +80,15 @@ if [ -n "$LISTP" ]; then
|
|
|
80
80
|
bad "list page does not render <smart-mobilems-masonry-grid> (README.md#masonrygridcomponent)"
|
|
81
81
|
fi
|
|
82
82
|
fi
|
|
83
|
+
# 3b. cards carry .masonry-item on their OWN root — wrapping them in another
|
|
84
|
+
# .masonry-item element makes masonry itemize BOTH (fizzy-ui-utils matches
|
|
85
|
+
# descendants too): the inner card goes position:absolute inside the outer one
|
|
86
|
+
# and collapses to a fraction of the column width (batch H s3, gate I6b=40).
|
|
87
|
+
if [ -n "$LISTP" ] && grep -rqE '<div[^>]*class="[^"]*masonry-item' $LISTP 2>/dev/null; then
|
|
88
|
+
bad "list page template wraps cards in <div class=\"masonry-item\"> — the card carries the class itself; render it directly"
|
|
89
|
+
else
|
|
90
|
+
pass "no nested .masonry-item wrappers"
|
|
91
|
+
fi
|
|
83
92
|
# 4. filters must EXTEND the framework base class — `context.` alone proves nothing, and a
|
|
84
93
|
# differently-named dir must not silently skip the check
|
|
85
94
|
FILT="$(find "$LIBDIR/components" -maxdepth 1 -type d \( -name 'filters*' -o -name 'search*' -o -name 'facet*' \) 2>/dev/null || true)"
|