mosaic-headless 1.30.1 → 1.31.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 (48) hide show
  1. package/README.ja.md +4 -2
  2. package/README.ko.md +4 -2
  3. package/README.md +5 -3
  4. package/README.zh-TW.md +4 -2
  5. package/SKILL.md +84 -36
  6. package/assets/templates/platforms/claude-ai.json +1 -1
  7. package/assets/templates/platforms/claude-code.json +1 -1
  8. package/assets/templates/platforms/codex-cli.json +1 -1
  9. package/assets/templates/platforms/copilot.json +1 -1
  10. package/assets/templates/platforms/gemini-cli.json +1 -1
  11. package/data/browser-verification/moksa.csv +12 -12
  12. package/data/component-wall-verification.csv +1 -1
  13. package/data/condition-comparators.csv +2 -2
  14. package/data/content-loop-verification.csv +4 -1
  15. package/data/data-class-hierarchy.csv +1 -0
  16. package/data/dialog-form-verification.csv +2 -2
  17. package/data/dialog-verification.csv +1 -1
  18. package/data/form-surface-verification.csv +3 -0
  19. package/data/interaction-types.csv +1 -0
  20. package/data/intro-verification.csv +16 -16
  21. package/data/mobile-audit.csv +22 -19
  22. package/data/navigation-verification.csv +16 -13
  23. package/data/node-properties.csv +8 -3
  24. package/data/node-types.csv +1 -0
  25. package/data/node-verification.csv +3 -0
  26. package/data/placement-rules.csv +1 -0
  27. package/data/pluggables.csv +16 -4
  28. package/data/popover-verification.csv +38 -0
  29. package/data/style-states.csv +1 -0
  30. package/data/token-verification.csv +2 -2
  31. package/package.json +2 -1
  32. package/references/custom-fields.md +24 -1
  33. package/references/dialog-and-triggers.md +199 -8
  34. package/references/dynamic-content.md +19 -0
  35. package/references/failure-modes.md +47 -4
  36. package/references/styling.md +9 -0
  37. package/references/upgrading.md +46 -1
  38. package/scripts/check-release.mjs +7 -6
  39. package/sites/_dialogs.py +18 -8
  40. package/sites/_moksa.py +69 -39
  41. package/sites/_popovers.py +570 -0
  42. package/tools/audit_mobile.py +1 -1
  43. package/tools/build_page.py +13 -0
  44. package/tools/sweep_node_types.py +55 -6
  45. package/tools/verify_dialog.py +3 -2
  46. package/tools/verify_dialog_lab.py +11 -11
  47. package/tools/verify_intro.py +5 -3
  48. package/tools/verify_popovers.py +348 -0
@@ -64,6 +64,7 @@ NavigationElementMResourceData,ElementMResourceDataAbstract,no,Mosaic/NodeTypes/
64
64
  NodeMResourceDataAbstract,MResourceDataAbstract,yes,Mosaic/NodeTypes/NodeAbstract/NodeMResourceDataAbstract.php
65
65
  OpenStreetMapElementMResourceData,ElementMResourceDataAbstract,no,Mosaic/NodeTypes/OpenStreetMap/OpenStreetMapElementMResourceData.php
66
66
  OptionElementMResourceData,ElementMResourceDataAbstract,no,Mosaic/NodeTypes/Pro/Form/Form/MElements/Select/Option/OptionElementMResourceData.php
67
+ PopoverElementMResourceData,ElementMResourceDataAbstract,no,Mosaic/NodeTypes/Popover/PopoverElementMResourceData.php
67
68
  RadioInputElementMResourceData,ElementMResourceDataAbstract,no,Mosaic/NodeTypes/Pro/Form/Form/MElements/Radio/RadioInput/RadioInputElementMResourceData.php
68
69
  RecaptchaElementMResourceData,ElementMResourceDataAbstract,no,Mosaic/NodeTypes/Pro/Form/Form/MElements/Recaptcha/RecaptchaElementMResourceData.php
69
70
  RootElementMResourceData,ElementMResourceDataAbstract,no,Mosaic/NodeTypes/Root/RootElementMResourceData.php
@@ -31,9 +31,9 @@ GATE/button-closes,PASS,the modalClose inside is the only exit
31
31
  DEPTH/shut-at-rest,PASS,
32
32
  DEPTH/opens-past-75,PASS,scrollDepth threshold 75%
33
33
  EXIT/opens,PASS,exitIntent is desktop-only and synthetic leave is approximate
34
- LATCH/record-abb,PASS,"{""counter"":1,""firstAt"":1791103196338,""lastAt"":1791103196338,""lastID"":""75cb0b1a-7"
34
+ LATCH/record-abb,PASS,"{""counter"":1,""firstAt"":1791303948906,""lastAt"":1791303948906,""lastID"":""403cc438-0"
35
35
  LATCH/B-first-wins,PASS,"6/6 as predicted, 0 lost clicks {'abb>abb,aba>none': 6}"
36
- LATCH/record-aba,PASS,"{""counter"":1,""firstAt"":1791103249401,""lastAt"":1791103249401,""lastID"":""fbc055d4-7"
36
+ LATCH/record-aba,PASS,"{""counter"":1,""firstAt"":1791303994070,""lastAt"":1791303994070,""lastID"":""7ddba850-2"
37
37
  LATCH/A-first-wins,PASS,"6/6 as predicted, 0 lost clicks {'aba>aba,abb>none': 6}"
38
38
  LATCH/order-decides,PASS,"the winner flips with click order, so it is the first EVALUATED, not the first authored"
39
39
  FIT390/centre,PASS,scrollW=349/349 childOverflow=0 pageScrollsSideways=False
@@ -3,7 +3,7 @@ HOST,PASS,renders <dialog>
3
3
  STRUCTURE,PASS,overlay and window children present
4
4
  ARIA,PASS,aria-modal=true aria-label='Feature probe dialog' role=dialog
5
5
  CLOSED_AT_REST,PASS,dialog.open=False display=none
6
- OPENS,PASS,dialog.open=True display=grid top-layer=False
6
+ OPENS,PASS,dialog.open=True display=grid top-layer=True
7
7
  CLOSES,PASS,dialog.open=False
8
8
  CLOSEDBY_ESC,PASS,"closedby=everything, Esc closed it"
9
9
  KEYBOARD,PASS,the opening control takes focus
@@ -6,6 +6,9 @@ FORM/required,PASS,required is set on 8 of them
6
6
  FORM/honeypot,PASS,"Mosaic adds its own spam trap: ['mosaic_hp_url', 'mosaic_hp_ts']"
7
7
  FORM/option_labels,PASS,"5 options, all labelled"
8
8
  FORM/required_blocks,PASS,"empty form reports invalid: ['name', 'email', 'kind', 'kind']"
9
+ NAVBAR,SKIPPED,not on this page
10
+ MEDIA,SKIPPED,not on this page
11
+ WORDPRESS,SKIPPED,not on this page
9
12
  MULTISTEP/one_at_rest,PASS,visible steps: [0]
10
13
  MULTISTEP/next,PASS,NEXT -> [1]
11
14
  MULTISTEP/back,PASS,BACK -> [0]
@@ -10,6 +10,7 @@ formSubmit,timed,Element events,Runs when the form reaches a submission outcome.
10
10
  hover,timed,Mouse,Animate when the cursor hovers the element.,Mosaic/Plugins/InteractionTypes/timed/hover/InteractionTypeHover.php
11
11
  modal,timed,Element events,Animates the modal as it opens and closes.,Mosaic/Plugins/InteractionTypes/timed/modal/InteractionTypeModal.php
12
12
  pageLoad,timed,Page & scroll,Activates when the page finishes loading.,Mosaic/Plugins/InteractionTypes/timed/pageload/InteractionTypePageLoad.php
13
+ popover,timed,Element events,Animates the popover as it opens and closes.,Mosaic/Plugins/InteractionTypes/timed/popover/InteractionTypePopover.php
13
14
  scrollDepth,timed,Page & scroll,Activates when the visitor scrolls this far down the page.,Mosaic/Plugins/InteractionTypes/timed/scrolldepth/InteractionTypeScrollDepth.php
14
15
  scrollDirectionChange,timed,Page & scroll,Animate when the scroll direction changes.,Mosaic/Plugins/InteractionTypes/timed/scrolldirectionchange/InteractionTypeScrollDirectionChange.php
15
16
  slideChange,timed,Element events,Animate when the slide slides in or out.,Mosaic/Plugins/InteractionTypes/timed/slidechange/InteractionTypeSlideChange.php
@@ -1,26 +1,26 @@
1
1
  check,result,detail
2
2
  PLAYS,PASS,43 of 43 intro elements changed state
3
3
  COUNTS,PASS,--mk-n reached 100
4
- ENDS,PASS,veil is out of hit-testing from 8900ms
4
+ ENDS,PASS,veil is out of hit-testing from 3400ms
5
5
  NO_TRAP,PASS,"0 content elements still at opacity 0 in the viewport (1 below the fold and 0 on a scroll timeline awaiting it, 1 mid-blink)"
6
6
  CLEARS,PASS,a real click landed on 'mk-caret-row'
7
- AMBIENT,PASS,"7 elements still moving between 11000ms and 13000ms with no input: mk-board-city-s, mk-board-utc-s, mk-clock-s, mk-flap-0-s, mk-flap-1-s, mk-flap-2-s"
7
+ AMBIENT,PASS,"8 elements still moving between 5000ms and 7000ms with no input: mk-board-city-s, mk-board-utc-s, mk-caret, mk-clock-s, mk-flap-0-s, mk-flap-1-s"
8
8
  DEGRADES,PASS,with reduced motion the veil is display:none throughout
9
9
  READABLE,PASS,0 elements invisible at 120ms with reduced motion
10
10
 
11
11
  t_ms,counter,veil_visibility,veil_clip,veil_covers_centre,hit_centre,invisible_content
12
12
  120,,,,False,html.no-js,0
13
- 700,--mk-n=0;--mk-s=0;--mk-m=0,visible,none,True,mk-boot-num,7
14
- 1400,--mk-n=5;--mk-s=0;--mk-m=0,visible,none,True,mk-boot-num,7
15
- 2200,--mk-n=40;--mk-s=0;--mk-m=0,visible,none,True,mk-boot-num,3
16
- 3000,--mk-n=71;--mk-s=0;--mk-m=0,visible,none,True,mk-boot-num,3
17
- 3800,--mk-n=87;--mk-s=0;--mk-m=0,visible,none,True,mk-boot-num,3
18
- 4600,--mk-n=95;--mk-s=0;--mk-m=0,visible,none,True,mk-boot-num,3
19
- 5400,--mk-n=98;--mk-s=0;--mk-m=0,visible,none,True,mk-boot-num,3
20
- 6200,--mk-n=100;--mk-s=0;--mk-m=0,visible,none,True,mk-boot-num,3
21
- 7000,--mk-n=100;--mk-s=0;--mk-m=0,visible,none,True,mk-boot-num,3
22
- 7800,--mk-n=100;--mk-s=0;--mk-m=0,visible,none,True,p.m-text,2
23
- 8300,--mk-n=100;--mk-s=0;--mk-m=0,visible,none,False,mk-caret-row,1
24
- 8900,--mk-n=0;--mk-s=0;--mk-m=0,hidden,none,False,mk-caret-row,0
25
- 11000,--mk-n=0;--mk-s=0;--mk-m=0,hidden,none,False,mk-caret-row,0
26
- 13000,--mk-n=0;--mk-s=0;--mk-m=0,hidden,none,False,mk-caret-row,0
13
+ 400,--mk-n=0;--mk-s=0;--mk-m=0,visible,none,True,mk-boot-num,7
14
+ 700,--mk-n=9;--mk-s=0;--mk-m=0,visible,none,True,mk-boot-num,7
15
+ 1000,--mk-n=52;--mk-s=0;--mk-m=0,visible,none,True,mk-boot-num,3
16
+ 1300,--mk-n=82;--mk-s=0;--mk-m=0,visible,none,True,mk-boot-num,3
17
+ 1600,--mk-n=94;--mk-s=0;--mk-m=0,visible,none,True,mk-boot-num,3
18
+ 1900,--mk-n=98;--mk-s=0;--mk-m=0,visible,none,True,mk-boot-num,3
19
+ 2200,--mk-n=100;--mk-s=0;--mk-m=0,visible,none,True,mk-boot-num,3
20
+ 2500,--mk-n=100;--mk-s=0;--mk-m=0,visible,none,True,mk-boot-num,3
21
+ 2800,--mk-n=100;--mk-s=0;--mk-m=0,visible,none,True,mk-boot,0
22
+ 3100,--mk-n=100;--mk-s=0;--mk-m=0,visible,none,False,mk-caret-row,0
23
+ 3400,--mk-n=0;--mk-s=0;--mk-m=0,hidden,none,False,mk-caret-row,0
24
+ 3800,--mk-n=0;--mk-s=0;--mk-m=0,hidden,none,False,mk-caret-row,0
25
+ 5000,--mk-n=0;--mk-s=0;--mk-m=0,hidden,none,False,mk-caret-row,0
26
+ 7000,--mk-n=0;--mk-s=0;--mk-m=0,hidden,none,False,mk-caret-row,0
@@ -1,9 +1,14 @@
1
1
  path,width,finding,element,detail
2
2
  components/,390,GRID_NOT_COLLAPSED,cp-tabs-menu,2 columns at 390px
3
3
  components/,390,GRID_NOT_COLLAPSED,mk-f-links,2 columns at 390px
4
- forms/,390,GRID_NOT_COLLAPSED,mk-f-links,2 columns at 390px
5
4
  content/,390,GRID_NOT_COLLAPSED,mk-f-links,2 columns at 390px
5
+ conversion/,390,GRID_NOT_COLLAPSED,mk-f-links,2 columns at 390px
6
6
  dialogs/,390,GRID_NOT_COLLAPSED,mk-f-links,2 columns at 390px
7
+ dynamic/,390,GRID_NOT_COLLAPSED,mk-f-links,2 columns at 390px
8
+ forms/,390,GRID_NOT_COLLAPSED,mk-f-links,2 columns at 390px
9
+ popovers/,390,GRID_NOT_COLLAPSED,pp-cells,3 columns at 390px
10
+ popovers/,390,GRID_NOT_COLLAPSED,pp-tour-row,3 columns at 390px
11
+ popovers/,390,GRID_NOT_COLLAPSED,mk-f-links,2 columns at 390px
7
12
  sliders/,390,SMALL_TARGET,sl-main-nav-dot,34x28:
8
13
  sliders/,390,SMALL_TARGET,sl-main-nav-dot,34x28:
9
14
  sliders/,390,SMALL_TARGET,sl-main-nav-dot,34x28:
@@ -16,18 +21,30 @@ sliders/,390,SMALL_TARGET,sl-carousel-nav-dot,34x28:
16
21
  sliders/,390,SMALL_TARGET,sl-carousel-nav-dot,34x28:
17
22
  sliders/,390,GRID_NOT_COLLAPSED,mk-f-links,2 columns at 390px
18
23
  tokens/,390,GRID_NOT_COLLAPSED,mk-f-links,2 columns at 390px
19
- dynamic/,390,GRID_NOT_COLLAPSED,mk-f-links,2 columns at 390px
20
- conversion/,390,GRID_NOT_COLLAPSED,mk-f-links,2 columns at 390px
21
24
  components/,768,LONG_MEASURE,m-text,44 chars/line
22
25
  components/,768,LONG_MEASURE,m-text,56 chars/line
23
26
  components/,768,LONG_MEASURE,m-text,56 chars/line
24
- forms/,768,LONG_MEASURE,m-text,59 chars/line
25
- forms/,768,LONG_MEASURE,m-text,59 chars/line
26
27
  content/,768,LONG_MEASURE,m-text,43 chars/line
27
28
  content/,768,LONG_MEASURE,m-text,58 chars/line
29
+ conversion/,768,LONG_MEASURE,m-text,46 chars/line
30
+ conversion/,768,LONG_MEASURE,m-text,47 chars/line
31
+ conversion/,768,LONG_MEASURE,m-text,45 chars/line
32
+ conversion/,768,LONG_MEASURE,m-text,49 chars/line
33
+ conversion/,768,LONG_MEASURE,m-text,55 chars/line
34
+ conversion/,768,LONG_MEASURE,m-text,55 chars/line
35
+ conversion/,768,LONG_MEASURE,m-text,55 chars/line
28
36
  dialogs/,768,LONG_MEASURE,m-text,46 chars/line
29
37
  dialogs/,768,LONG_MEASURE,m-text,45 chars/line
30
38
  dialogs/,768,LONG_MEASURE,m-text,45 chars/line
39
+ dynamic/,768,LONG_MEASURE,m-text,43 chars/line
40
+ dynamic/,768,LONG_MEASURE,m-text,57 chars/line
41
+ dynamic/,768,LONG_MEASURE,m-text,49 chars/line
42
+ dynamic/,768,LONG_MEASURE,m-text,55 chars/line
43
+ dynamic/,768,LONG_MEASURE,m-text,55 chars/line
44
+ dynamic/,768,LONG_MEASURE,m-text,55 chars/line
45
+ dynamic/,768,LONG_MEASURE,m-text,55 chars/line
46
+ forms/,768,LONG_MEASURE,m-text,59 chars/line
47
+ forms/,768,LONG_MEASURE,m-text,59 chars/line
31
48
  sliders/,768,SMALL_TARGET,sl-main-nav-dot,34x28:
32
49
  sliders/,768,SMALL_TARGET,sl-main-nav-dot,34x28:
33
50
  sliders/,768,SMALL_TARGET,sl-main-nav-dot,34x28:
@@ -50,17 +67,3 @@ tokens/,768,LONG_MEASURE,m-text,49 chars/line
50
67
  tokens/,768,LONG_MEASURE,m-text,55 chars/line
51
68
  tokens/,768,LONG_MEASURE,m-text,55 chars/line
52
69
  tokens/,768,LONG_MEASURE,m-text,55 chars/line
53
- dynamic/,768,LONG_MEASURE,m-text,43 chars/line
54
- dynamic/,768,LONG_MEASURE,m-text,57 chars/line
55
- dynamic/,768,LONG_MEASURE,m-text,49 chars/line
56
- dynamic/,768,LONG_MEASURE,m-text,55 chars/line
57
- dynamic/,768,LONG_MEASURE,m-text,55 chars/line
58
- dynamic/,768,LONG_MEASURE,m-text,55 chars/line
59
- dynamic/,768,LONG_MEASURE,m-text,55 chars/line
60
- conversion/,768,LONG_MEASURE,m-text,46 chars/line
61
- conversion/,768,LONG_MEASURE,m-text,47 chars/line
62
- conversion/,768,LONG_MEASURE,m-text,45 chars/line
63
- conversion/,768,LONG_MEASURE,m-text,49 chars/line
64
- conversion/,768,LONG_MEASURE,m-text,55 chars/line
65
- conversion/,768,LONG_MEASURE,m-text,55 chars/line
66
- conversion/,768,LONG_MEASURE,m-text,55 chars/line
@@ -1,18 +1,19 @@
1
1
  check,result,detail
2
- FRONT_PAGE,PASS,"HTTP 200, 240832 bytes"
2
+ FRONT_PAGE,PASS,"HTTP 200, 241886 bytes"
3
3
  MENU_IS_LINKS,PASS,1 real <a href> in #mk-nav
4
- NAV 首頁,PASS,"/ -> HTTP 200, 240834 bytes"
5
- PAGE moksa,PASS,"HTTP 200, 240832 bytes"
6
- PAGE my-account,PASS,"HTTP 200, 101036 bytes"
7
- PAGE intro,PASS,"HTTP 200, 134746 bytes"
8
- PAGE content,PASS,"HTTP 200, 102378 bytes"
9
- PAGE forms,PASS,"HTTP 200, 126731 bytes"
10
- PAGE components,PASS,"HTTP 200, 135123 bytes"
11
- PAGE conversion,PASS,"HTTP 200, 103204 bytes"
12
- PAGE dynamic,PASS,"HTTP 200, 113003 bytes"
13
- PAGE tokens,PASS,"HTTP 200, 125413 bytes"
14
- PAGE sliders,PASS,"HTTP 200, 152191 bytes"
15
- PAGE dialogs,PASS,"HTTP 200, 207349 bytes"
4
+ NAV 首頁,PASS,"/ -> HTTP 200, 241885 bytes"
5
+ PAGE moksa,PASS,"HTTP 200, 241885 bytes"
6
+ PAGE my-account,PASS,"HTTP 200, 102024 bytes"
7
+ PAGE intro,PASS,"HTTP 200, 135353 bytes"
8
+ PAGE content,PASS,"HTTP 200, 103366 bytes"
9
+ PAGE forms,PASS,"HTTP 200, 127717 bytes"
10
+ PAGE components,PASS,"HTTP 200, 136111 bytes"
11
+ PAGE conversion,PASS,"HTTP 200, 104190 bytes"
12
+ PAGE dynamic,PASS,"HTTP 200, 113610 bytes"
13
+ PAGE tokens,PASS,"HTTP 200, 126780 bytes"
14
+ PAGE sliders,PASS,"HTTP 200, 152797 bytes"
15
+ PAGE popovers,PASS,"HTTP 200, 191166 bytes"
16
+ PAGE dialogs,PASS,"HTTP 200, 208778 bytes"
16
17
  ANCHORS moksa,PASS,every in-page link resolves
17
18
  ANCHORS my-account,PASS,every in-page link resolves
18
19
  ANCHORS intro,PASS,every in-page link resolves
@@ -23,6 +24,7 @@ ANCHORS conversion,PASS,every in-page link resolves
23
24
  ANCHORS dynamic,PASS,every in-page link resolves
24
25
  ANCHORS tokens,PASS,every in-page link resolves
25
26
  ANCHORS sliders,PASS,every in-page link resolves
27
+ ANCHORS popovers,PASS,every in-page link resolves
26
28
  ANCHORS dialogs,PASS,every in-page link resolves
27
29
  WIDTH moksa,PASS,"no sideways scroll at 390,768,1280"
28
30
  WIDTH my-account,PASS,"no sideways scroll at 390,768,1280"
@@ -34,4 +36,5 @@ WIDTH conversion,PASS,"no sideways scroll at 390,768,1280"
34
36
  WIDTH dynamic,PASS,"no sideways scroll at 390,768,1280"
35
37
  WIDTH tokens,PASS,"no sideways scroll at 390,768,1280"
36
38
  WIDTH sliders,PASS,"no sideways scroll at 390,768,1280"
39
+ WIDTH popovers,PASS,"no sideways scroll at 390,768,1280"
37
40
  WIDTH dialogs,PASS,"no sideways scroll at 390,768,1280"
@@ -9,9 +9,9 @@ ButtonElementMResourceData,ElementMResourceDataAbstract,free,createDataSimple,in
9
9
  ButtonElementMResourceData,ElementMResourceDataAbstract,free,createDataSimple,url,ValidateAllowUndefined|ValidatorDynamicCodeObject|ValidatorSanitizeEmptyString|ValidatorURL|ValidatorURLObject|Validators,,true,,type|href|target|rel,Mosaic/NodeTypes/Button/ButtonElementMResourceData.php
10
10
  ButtonElementMResourceData,ElementMResourceDataAbstract,free,createDataSimple,target,ValidateAllowUndefined|ValidatorAcceptedValues|Validators,_self|_blank|_parent|_top,true,,type|href|target|rel,Mosaic/NodeTypes/Button/ButtonElementMResourceData.php
11
11
  ButtonElementMResourceData,ElementMResourceDataAbstract,free,createDataSimple,rel,ValidateAllowUndefined|ValidatorArray|ValidatorString|Validators,,true,,type|href|target|rel,Mosaic/NodeTypes/Button/ButtonElementMResourceData.php
12
- ModalElementMResourceData,ElementMResourceDataAbstract,free,createDataSimple,role,ValidateAllowUndefined|ValidatorString|Validators,,true,,role|aria-label|aria-modal|tabindex|data-mosaic-modal-closedby,Mosaic/NodeTypes/Dialog/Modal/ModalElementMResourceData.php
13
- ModalElementMResourceData,ElementMResourceDataAbstract,free,createDataSimple,accessibleLabel,ValidateAllowUndefined|ValidatorString|Validators,,true,,role|aria-label|aria-modal|tabindex|data-mosaic-modal-closedby,Mosaic/NodeTypes/Dialog/Modal/ModalElementMResourceData.php
14
- ModalElementMResourceData,ElementMResourceDataAbstract,free,createDataSimple,closedby,ValidateAllowUndefined|ValidatorAcceptedValues|Validators,everything|clickOutside|esc|nothing,true,,role|aria-label|aria-modal|tabindex|data-mosaic-modal-closedby,Mosaic/NodeTypes/Dialog/Modal/ModalElementMResourceData.php
12
+ ModalElementMResourceData,ElementMResourceDataAbstract,free,createDataSimple,role,ValidateAllowUndefined|ValidatorString|Validators,,true,,role|aria-label|aria-modal|tabindex|popover|open|data-mosaic-modal-closedby|data-mosaic-modal-screenshot-open,Mosaic/NodeTypes/Dialog/Modal/ModalElementMResourceData.php
13
+ ModalElementMResourceData,ElementMResourceDataAbstract,free,createDataSimple,accessibleLabel,ValidateAllowUndefined|ValidatorString|Validators,,true,,role|aria-label|aria-modal|tabindex|popover|open|data-mosaic-modal-closedby|data-mosaic-modal-screenshot-open,Mosaic/NodeTypes/Dialog/Modal/ModalElementMResourceData.php
14
+ ModalElementMResourceData,ElementMResourceDataAbstract,free,createDataSimple,closedby,ValidateAllowUndefined|ValidatorAcceptedValues|Validators,everything|clickOutside|esc|nothing,true,,role|aria-label|aria-modal|tabindex|popover|open|data-mosaic-modal-closedby|data-mosaic-modal-screenshot-open,Mosaic/NodeTypes/Dialog/Modal/ModalElementMResourceData.php
15
15
  DivElementMResourceData,ElementMResourceDataAbstract,free,createDataSimple,tagName,ValidateAllowUndefined|ValidatorTagName|Validators,,true,,,Mosaic/NodeTypes/Div/DivElementMResourceData.php
16
16
  DivElementMResourceData,ElementMResourceDataAbstract,free,createDataArray,dynamicSources,,,true,,,Mosaic/NodeTypes/Div/DivElementMResourceData.php
17
17
  ElementMResourceDataAbstract,NodeMResourceDataAbstract,free,createDataSimple,name,ValidateAllowUndefined|ValidatorName|ValidatorSanitizeEmptyString|Validators,,true,,,Mosaic/NodeTypes/ElementAbstract/ElementMResourceDataAbstract.php
@@ -67,6 +67,11 @@ OpenStreetMapElementMResourceData,ElementMResourceDataAbstract,free,createDataSi
67
67
  OpenStreetMapElementMResourceData,ElementMResourceDataAbstract,free,createDataSimple,zoom,ValidateAllowUndefined|ValidatorDynamicCodeObject|ValidatorInteger|ValidatorIntegerAsString|Validators,,true,,,Mosaic/NodeTypes/OpenStreetMap/OpenStreetMapElementMResourceData.php
68
68
  OpenStreetMapElementMResourceData,ElementMResourceDataAbstract,free,createDataSimple,layer,ValidateAllowUndefined|ValidatorAcceptedValues|Validators,mapnik|cyclosm|cyclemap|transportmap|hot,true,,,Mosaic/NodeTypes/OpenStreetMap/OpenStreetMapElementMResourceData.php
69
69
  OpenStreetMapElementMResourceData,ElementMResourceDataAbstract,free,createDataSimple,lazyLoad,ValidateAllowUndefined|ValidatorAcceptedValues|Validators,0|1,true,,,Mosaic/NodeTypes/OpenStreetMap/OpenStreetMapElementMResourceData.php
70
+ PopoverElementMResourceData,ElementMResourceDataAbstract,free,createDataSimple,role,ValidateAllowUndefined|ValidatorString|Validators,,true,,role|aria-label|aria-live|aria-modal|tabindex|popover|open|data-mosaic-popover-anchor|data-mosaic-popover-placement|data-mosaic-popover-screen-position|data-mosaic-popover-keep-in-view|data-mosaic-popover-anchored|data-mosaic-popover-flip|data-mosaic-popover-screenshot-open|data-mosaic-popover-closedby,Mosaic/NodeTypes/Popover/PopoverElementMResourceData.php
71
+ PopoverElementMResourceData,ElementMResourceDataAbstract,free,createDataSimple,ariaLive,ValidateAllowUndefined|ValidatorAcceptedValues|Validators,off|polite|assertive,true,,role|aria-label|aria-live|aria-modal|tabindex|popover|open|data-mosaic-popover-anchor|data-mosaic-popover-placement|data-mosaic-popover-screen-position|data-mosaic-popover-keep-in-view|data-mosaic-popover-anchored|data-mosaic-popover-flip|data-mosaic-popover-screenshot-open|data-mosaic-popover-closedby,Mosaic/NodeTypes/Popover/PopoverElementMResourceData.php
72
+ PopoverElementMResourceData,ElementMResourceDataAbstract,free,createDataSimple,accessibleLabel,ValidateAllowUndefined|ValidatorString|Validators,,true,,role|aria-label|aria-live|aria-modal|tabindex|popover|open|data-mosaic-popover-anchor|data-mosaic-popover-placement|data-mosaic-popover-screen-position|data-mosaic-popover-keep-in-view|data-mosaic-popover-anchored|data-mosaic-popover-flip|data-mosaic-popover-screenshot-open|data-mosaic-popover-closedby,Mosaic/NodeTypes/Popover/PopoverElementMResourceData.php
73
+ PopoverElementMResourceData,ElementMResourceDataAbstract,free,createDataSimple,closedby,ValidateAllowUndefined|ValidatorAcceptedValues|Validators,everything|clickOutside|esc|nothing,true,,role|aria-label|aria-live|aria-modal|tabindex|popover|open|data-mosaic-popover-anchor|data-mosaic-popover-placement|data-mosaic-popover-screen-position|data-mosaic-popover-keep-in-view|data-mosaic-popover-anchored|data-mosaic-popover-flip|data-mosaic-popover-screenshot-open|data-mosaic-popover-closedby,Mosaic/NodeTypes/Popover/PopoverElementMResourceData.php
74
+ PopoverElementMResourceData,ElementMResourceDataAbstract,free,createDataGroup,positioning,,,true,,role|aria-label|aria-live|aria-modal|tabindex|popover|open|data-mosaic-popover-anchor|data-mosaic-popover-placement|data-mosaic-popover-screen-position|data-mosaic-popover-keep-in-view|data-mosaic-popover-anchored|data-mosaic-popover-flip|data-mosaic-popover-screenshot-open|data-mosaic-popover-closedby,Mosaic/NodeTypes/Popover/PopoverElementMResourceData.php
70
75
  CodeElementMResourceData,ElementMResourceDataAbstract,pro,createDataSimple,insertLocation,ValidateAllowUndefined|ValidatorAcceptedValues|Validators,inPlace|head|bodyStart|bodyEnd,true,,,Mosaic/NodeTypes/Pro/Code/CodeElementMResourceData.php
71
76
  CodeElementMResourceData,ElementMResourceDataAbstract,pro,createDataSimple,content,ValidateAllowUndefined|ValidatorString|Validators,,true,,,Mosaic/NodeTypes/Pro/Code/CodeElementMResourceData.php
72
77
  CodeElementMResourceData,ElementMResourceDataAbstract,pro,createDataSimple,processShortcodes,ValidateAllowUndefined|ValidatorAcceptedValues|Validators,0|1,true,,,Mosaic/NodeTypes/Pro/Code/CodeElementMResourceData.php
@@ -41,6 +41,7 @@ navbar,Navbar,NavbarElementTypeFactory,ElementTypeFactoryAbstract,no,free,,,,,Na
41
41
  navbar-toggle,Mobile menu toggle,NavbarToggleElementTypeFactory,ElementTypeFactoryAbstract,no,free,,true,true,,NavbarToggleElementMResourceData,ElementMResourceDataAbstract,Mosaic/NodeTypes/Navbar/NavbarToggle/NavbarToggleElementTypeFactory.php
42
42
  navigation,Navigation,NavigationElementTypeFactory,ElementTypeFactoryAbstract,no,free,,,true,,NavigationElementMResourceData,ElementMResourceDataAbstract,Mosaic/NodeTypes/Navbar/Navigation/NavigationElementTypeFactory.php
43
43
  openstreetmap,,OpenStreetMapElementTypeFactory,ElementTypeFactoryAbstract,no,free,,,,,OpenStreetMapElementMResourceData,ElementMResourceDataAbstract,Mosaic/NodeTypes/OpenStreetMap/OpenStreetMapElementTypeFactory.php
44
+ popover,Popover,PopoverElementTypeFactory,ElementTypeFactoryAbstract,no,free,,,true,,PopoverElementMResourceData,ElementMResourceDataAbstract,Mosaic/NodeTypes/Popover/PopoverElementTypeFactory.php
44
45
  code,Code,CodeElementTypeFactory,ElementTypeFactoryAbstract,no,pro,,,,,CodeElementMResourceData,ElementMResourceDataAbstract,Mosaic/NodeTypes/Pro/Code/CodeElementTypeFactory.php
45
46
  form-wrapper,Form,FormWrapperElementTypeFactory,ElementTypeFactoryAbstract,no,pro,,,,,FormWrapperElementMResourceData,ElementMResourceDataAbstract,Mosaic/NodeTypes/Pro/Form/FormWrapperElementTypeFactory.php
46
47
  form,Form,FormElementTypeFactory,ElementTypeFactoryAbstract,no,pro,,,true,,FormElementMResourceData,ElementMResourceDataAbstract,Mosaic/NodeTypes/Pro/Form/Form/FormElementTypeFactory.php
@@ -125,3 +125,6 @@ wysiwyg-span,RENDERED,span,m-span,,27396,
125
125
  wysiwyg-text,COMMITTED,,,,27344,
126
126
  wysiwyg-variable,BROKE_PAGE,,,,54,NodeMResourceFilterFunctionInterface parent is missing
127
127
  youtube,RENDERED,mosaic-youtube,m-youtube,,27993,
128
+ popover,RENDERED,div,m-popover M_Dialog M_IJ,,28043,
129
+ fieldset-legend,RENDERED,div,m-fieldset-legend m-wysiwyg,,27401,
130
+ fieldset-content,RENDERED,div,m-fieldset-content,,27357,
@@ -67,6 +67,7 @@ navbar,none,,yes,yes,navbar,Mosaic/NodeTypes/Navbar/NavbarElementTypeFactory.php
67
67
  navbar-toggle,any,,yes,yes,navbar|navbar-toggle|navigation,Mosaic/NodeTypes/Navbar/NavbarToggle/NavbarToggleElementTypeFactory.php
68
68
  navigation,any,,yes,yes,navbar|navbar-toggle|navigation,Mosaic/NodeTypes/Navbar/Navigation/NavigationElementTypeFactory.php
69
69
  openstreetmap,none,,,,,Mosaic/NodeTypes/OpenStreetMap/OpenStreetMapElementTypeFactory.php
70
+ popover,any,,,,,Mosaic/NodeTypes/Popover/PopoverElementTypeFactory.php
70
71
  radio-input,none,,yes,,choice,Mosaic/NodeTypes/Pro/Form/Form/MElements/Radio/RadioInput/RadioInputElementTypeFactory.php
71
72
  recaptcha,none,,yes,,choice-field|field|form,Mosaic/NodeTypes/Pro/Form/Form/MElements/Recaptcha/RecaptchaElementTypeFactory.php
72
73
  section,any,,yes,,section,Mosaic/NodeTypes/Section/SectionElementTypeFactory.php
@@ -34,8 +34,6 @@ EvaluatorEngine,starts-with,,Mosaic\Plugins\EvaluatorEngine\Filters\Subject,Mosa
34
34
  EvaluatorEngine,regexp,,Mosaic\Plugins\EvaluatorEngine\Filters\Subject,Mosaic/Plugins/EvaluatorEngine/Filters/Subject/FilterSubjectPostTypes.php
35
35
  EvaluatorEngine,number,,Mosaic\Plugins\EvaluatorEngine\Filters\Subject,Mosaic/Plugins/EvaluatorEngine/Filters/Subject/FilterSubjectPostTypes.php
36
36
  EvaluatorEngine,date,,Mosaic\Plugins\EvaluatorEngine\Filters\Subject,Mosaic/Plugins/EvaluatorEngine/Filters/Subject/FilterSubjectPostTypes.php
37
- EvaluatorEngine,after,,Mosaic\Plugins\EvaluatorEngine\Filters\Subject,Mosaic/Plugins/EvaluatorEngine/Filters/Subject/FilterSubjectPostTypes.php
38
- EvaluatorEngine,before,,Mosaic\Plugins\EvaluatorEngine\Filters\Subject,Mosaic/Plugins/EvaluatorEngine/Filters/Subject/FilterSubjectPostTypes.php
39
37
  EvaluatorEngine,includes,,Mosaic\Plugins\EvaluatorEngine\Filters\Subject,Mosaic/Plugins/EvaluatorEngine/Filters/Subject/FilterSubjectTaxonomies.php
40
38
  EvaluatorEngine,excludes,,Mosaic\Plugins\EvaluatorEngine\Filters\Subject,Mosaic/Plugins/EvaluatorEngine/Filters/Subject/FilterSubjectTaxonomies.php
41
39
  EvaluatorEngine,text,,Mosaic\Plugins\EvaluatorEngine\Filters\Subject,Mosaic/Plugins/EvaluatorEngine/Filters/Subject/FilterSubjectTaxonomies.php
@@ -67,8 +65,6 @@ EvaluatorEngine,greater-than-or-equal,,Mosaic\Plugins\EvaluatorEngine\Filters\Su
67
65
  EvaluatorEngine,less-than,,Mosaic\Plugins\EvaluatorEngine\Filters\Subject,Mosaic/Plugins/EvaluatorEngine/Filters/Subject/FilterSubjectUsers.php
68
66
  EvaluatorEngine,less-than-or-equal,,Mosaic\Plugins\EvaluatorEngine\Filters\Subject,Mosaic/Plugins/EvaluatorEngine/Filters/Subject/FilterSubjectUsers.php
69
67
  EvaluatorEngine,date,,Mosaic\Plugins\EvaluatorEngine\Filters\Subject,Mosaic/Plugins/EvaluatorEngine/Filters/Subject/FilterSubjectUsers.php
70
- EvaluatorEngine,after,,Mosaic\Plugins\EvaluatorEngine\Filters\Subject,Mosaic/Plugins/EvaluatorEngine/Filters/Subject/FilterSubjectUsers.php
71
- EvaluatorEngine,before,,Mosaic\Plugins\EvaluatorEngine\Filters\Subject,Mosaic/Plugins/EvaluatorEngine/Filters/Subject/FilterSubjectUsers.php
72
68
  EvaluatorEngine,wpUsersUserMeta,,Mosaic\Plugins\EvaluatorEngine\Filters\Subject,Mosaic/Plugins/EvaluatorEngine/Filters/Subject/FilterSubjectUsers.php
73
69
  EvaluatorEngine,wpMenu,,Mosaic\Plugins\EvaluatorEngine\Filters\Subject,Mosaic/Plugins/EvaluatorEngine/Filters/Subject/FilterSubjectWPMenu.php
74
70
  EvaluatorEngine,includes,,Mosaic\Plugins\EvaluatorEngine\Filters\Subject,Mosaic/Plugins/EvaluatorEngine/Filters/Subject/FilterSubjectWPMenu.php
@@ -147,6 +143,15 @@ InteractionActions,playerPause,,Mosaic\Plugins\InteractionActions\Simple\Player\
147
143
  InteractionActions,elementAction,,Mosaic\Plugins\InteractionActions\Simple\Player\Play,Mosaic/Plugins/InteractionActions/Simple/Player/Play/InteractionSimpleActionPlayerPlay.php
148
144
  InteractionActions,player,,Mosaic\Plugins\InteractionActions\Simple\Player\Play,Mosaic/Plugins/InteractionActions/Simple/Player/Play/InteractionSimpleActionPlayerPlay.php
149
145
  InteractionActions,playerPlay,,Mosaic\Plugins\InteractionActions\Simple\Player\Play,Mosaic/Plugins/InteractionActions/Simple/Player/Play/InteractionSimpleActionPlayerPlay.php
146
+ InteractionActions,elementAction,,Mosaic\Plugins\InteractionActions\Simple\Popover\PopoverClose,Mosaic/Plugins/InteractionActions/Simple/Popover/PopoverClose/InteractionSimpleActionPopoverClose.php
147
+ InteractionActions,popover,,Mosaic\Plugins\InteractionActions\Simple\Popover\PopoverClose,Mosaic/Plugins/InteractionActions/Simple/Popover/PopoverClose/InteractionSimpleActionPopoverClose.php
148
+ InteractionActions,popoverClose,,Mosaic\Plugins\InteractionActions\Simple\Popover\PopoverClose,Mosaic/Plugins/InteractionActions/Simple/Popover/PopoverClose/InteractionSimpleActionPopoverClose.php
149
+ InteractionActions,elementAction,,Mosaic\Plugins\InteractionActions\Simple\Popover\PopoverOpen,Mosaic/Plugins/InteractionActions/Simple/Popover/PopoverOpen/InteractionSimpleActionPopoverOpen.php
150
+ InteractionActions,popover,,Mosaic\Plugins\InteractionActions\Simple\Popover\PopoverOpen,Mosaic/Plugins/InteractionActions/Simple/Popover/PopoverOpen/InteractionSimpleActionPopoverOpen.php
151
+ InteractionActions,popoverOpen,,Mosaic\Plugins\InteractionActions\Simple\Popover\PopoverOpen,Mosaic/Plugins/InteractionActions/Simple/Popover/PopoverOpen/InteractionSimpleActionPopoverOpen.php
152
+ InteractionActions,elementAction,,Mosaic\Plugins\InteractionActions\Simple\Popover\PopoverToggle,Mosaic/Plugins/InteractionActions/Simple/Popover/PopoverToggle/InteractionSimpleActionPopoverToggle.php
153
+ InteractionActions,popover,,Mosaic\Plugins\InteractionActions\Simple\Popover\PopoverToggle,Mosaic/Plugins/InteractionActions/Simple/Popover/PopoverToggle/InteractionSimpleActionPopoverToggle.php
154
+ InteractionActions,popoverToggle,,Mosaic\Plugins\InteractionActions\Simple\Popover\PopoverToggle,Mosaic/Plugins/InteractionActions/Simple/Popover/PopoverToggle/InteractionSimpleActionPopoverToggle.php
150
155
  InteractionActions,script,,Mosaic\Plugins\InteractionActions\Simple\RunScript,Mosaic/Plugins/InteractionActions/Simple/RunScript/InteractionSimpleActionScript.php
151
156
  InteractionActions,setCookie,,Mosaic\Plugins\InteractionActions\Simple\SetCookie,Mosaic/Plugins/InteractionActions/Simple/SetCookie/InteractionSimpleActionSetCookie.php
152
157
  InteractionTypes,pointerMove,,Mosaic\Plugins\InteractionTypes\progress\pointermove,Mosaic/Plugins/InteractionTypes/progress/pointermove/InteractionTypePointerMove.php
@@ -195,11 +200,18 @@ InteractionTypes,pageLoad,,Mosaic\Plugins\InteractionTypes\timed\pageload,Mosaic
195
200
  InteractionTypes,pageScroll,,Mosaic\Plugins\InteractionTypes\timed\pageload,Mosaic/Plugins/InteractionTypes/timed/pageload/InteractionTypePageLoad.php
196
201
  InteractionTypes,s,,Mosaic\Plugins\InteractionTypes\timed\pageload,Mosaic/Plugins/InteractionTypes/timed/pageload/InteractionTypePageLoad.php
197
202
  InteractionTypes,ms,,Mosaic\Plugins\InteractionTypes\timed\pageload,Mosaic/Plugins/InteractionTypes/timed/pageload/InteractionTypePageLoad.php
203
+ InteractionTypes,popover,,Mosaic\Plugins\InteractionTypes\timed\popover,Mosaic/Plugins/InteractionTypes/timed/popover/InteractionTypePopover.php
204
+ InteractionTypes,elementEvent,,Mosaic\Plugins\InteractionTypes\timed\popover,Mosaic/Plugins/InteractionTypes/timed/popover/InteractionTypePopover.php
205
+ InteractionTypes,show,,Mosaic\Plugins\InteractionTypes\timed\popover,Mosaic/Plugins/InteractionTypes/timed/popover/InteractionTypePopover.php
206
+ InteractionTypes,beforeClose,,Mosaic\Plugins\InteractionTypes\timed\popover,Mosaic/Plugins/InteractionTypes/timed/popover/InteractionTypePopover.php
207
+ InteractionTypes,afterClose,,Mosaic\Plugins\InteractionTypes\timed\popover,Mosaic/Plugins/InteractionTypes/timed/popover/InteractionTypePopover.php
198
208
  InteractionTypes,scrollDepth,,Mosaic\Plugins\InteractionTypes\timed\scrolldepth,Mosaic/Plugins/InteractionTypes/timed/scrolldepth/InteractionTypeScrollDepth.php
199
209
  InteractionTypes,pageScroll,,Mosaic\Plugins\InteractionTypes\timed\scrolldepth,Mosaic/Plugins/InteractionTypes/timed/scrolldepth/InteractionTypeScrollDepth.php
200
210
  InteractionTypes,%,,Mosaic\Plugins\InteractionTypes\timed\scrolldepth,Mosaic/Plugins/InteractionTypes/timed/scrolldepth/InteractionTypeScrollDepth.php
201
211
  InteractionTypes,px,,Mosaic\Plugins\InteractionTypes\timed\scrolldepth,Mosaic/Plugins/InteractionTypes/timed/scrolldepth/InteractionTypeScrollDepth.php
202
212
  InteractionTypes,vh,,Mosaic\Plugins\InteractionTypes\timed\scrolldepth,Mosaic/Plugins/InteractionTypes/timed/scrolldepth/InteractionTypeScrollDepth.php
213
+ InteractionTypes,reached,,Mosaic\Plugins\InteractionTypes\timed\scrolldepth,Mosaic/Plugins/InteractionTypes/timed/scrolldepth/InteractionTypeScrollDepth.php
214
+ InteractionTypes,returned,,Mosaic\Plugins\InteractionTypes\timed\scrolldepth,Mosaic/Plugins/InteractionTypes/timed/scrolldepth/InteractionTypeScrollDepth.php
203
215
  InteractionTypes,scrollDirectionChange,,Mosaic\Plugins\InteractionTypes\timed\scrolldirectionchange,Mosaic/Plugins/InteractionTypes/timed/scrolldirectionchange/InteractionTypeScrollDirectionChange.php
204
216
  InteractionTypes,pageScroll,,Mosaic\Plugins\InteractionTypes\timed\scrolldirectionchange,Mosaic/Plugins/InteractionTypes/timed/scrolldirectionchange/InteractionTypeScrollDirectionChange.php
205
217
  InteractionTypes,down,,Mosaic\Plugins\InteractionTypes\timed\scrolldirectionchange,Mosaic/Plugins/InteractionTypes/timed/scrolldirectionchange/InteractionTypeScrollDirectionChange.php
@@ -0,0 +1,38 @@
1
+ check,result,detail
2
+ FOUND,PASS,19 popovers on the page
3
+ HOST,PASS,"every one is <div popover=manual>, none carries `open`"
4
+ NOTICE/pageLoad,PASS,open after load
5
+ NOTICE/aria,PASS,role=status aria-live=polite aria-modal=None
6
+ NOTICE/non_blocking,PASS,centre hit-tests to the page; wheel scrolled 0 -> 600
7
+ NOTICE/page_usable,PASS,"open while the notice shows: ['pp-menu', 'pp-notice']"
8
+ NOTICE/closedby_nothing,PASS,Esc left it open
9
+ NOTICE/close_button,PASS,popoverClose closed it
10
+ CLOSED_IS_HIDDEN,PASS,every closed popover measures 0x0
11
+ MENU/placement,PASS,"flipped above: menu 224..627 high, trigger 627..671, left edges 685 / 685"
12
+ MENU/toggle,PASS,the same button closed it
13
+ MENU/esc,PASS,closedby=everything: Esc closed it
14
+ INFO/placement,PASS,"inline-end: card 949..1209, trigger 905..949; centres 449 / 449"
15
+ INFO/esc_ignored,PASS,closedby=clickOutside: Esc left it open
16
+ INFO/click_outside,PASS,a click outside closed it
17
+ POINTER/anchor,PASS,popover bottom 300 vs card top 300; centres 950 / 949
18
+ GRID/top-left,PASS,"box 12,12 240x112 in 1280x900"
19
+ GRID/top-center,PASS,"box 520,12 240x112 in 1280x900"
20
+ GRID/top-right,PASS,"box 1028,12 240x112 in 1280x900"
21
+ GRID/center-left,PASS,"box 12,393 240x112 in 1280x900"
22
+ GRID/center-center,PASS,"box 520,393 240x112 in 1280x900"
23
+ GRID/center-right,PASS,"box 1028,393 240x112 in 1280x900"
24
+ GRID/bottom-left,PASS,"box 12,775 240x112 in 1280x900"
25
+ GRID/bottom-center,PASS,"box 520,775 240x112 in 1280x900"
26
+ GRID/bottom-right,PASS,"box 1028,775 240x112 in 1280x900"
27
+ TOUR/steps,PASS,pp-tour-brief > pp-tour-quote > pp-tour-launch > pp-tour-done
28
+ TOUR/anchored,PASS,3 of 3 steps sit beside the box they explain
29
+ TOUR/esc_ignored,PASS,open after Esc on step 2: pp-tour-quote
30
+ TOUR/quit_ends,PASS,open after 結束導覽 on step 2: none
31
+ TOUR/restart_resumes,PASS,"restarted, two steps on: pp-tour-launch"
32
+ SNAP/flips,PASS,flipped=True; popover right 1069 vs trigger left 1069
33
+ SNAP/flipped_state,PASS,"background while flipped: rgb(22, 24, 28)"
34
+ SNAP/off_shifted,PASS,"keepInView=0, not flipped: popover 1020..1280 inside a 1280 viewport, over its trigger 1069..1231"
35
+ FLEXMODAL/closed,PASS,"authored display:flex, closed it computes display:none 0x0"
36
+ FLEXMODAL/open,PASS,"display:flex top-layer=True window centre 633,450 in 1280x900"
37
+ NO_JS_ERRORS,PASS,none
38
+ PHONE/menu_fits,PASS,menu 43..318 in a 390 viewport
@@ -37,6 +37,7 @@ ___navbar--dropdown-mode,"&:where(.m-navbar.dropdown-mode,.m-navbar.dropdown-mod
37
37
  ___navbar--opened,.dropdown-mode:where(.m-navbar.dropdown--opened) &,600,node-type,Mosaic/NodeTypes/Navbar/NavbarElementTypeFactory.php
38
38
  ___navbar--opening,.dropdown-mode:where(.m-navbar.dropdown--opening) &,600,node-type,Mosaic/NodeTypes/Navbar/NavbarElementTypeFactory.php
39
39
  ___nested_dropdown_mode,"&:where(.dropdown-mode .m-navbar-navigation .m-dropdown &, .m-dropdown .m-dropdown &):not(x)",600,node-type,Mosaic/NodeTypes/Menu/Dropdown/DropdownElementTypeFactoryAbstract.php
40
+ ___popover--flipped,"&:where(.m-popover[data-mosaic-popover-flipped],.m-popover[data-mosaic-popover-flipped] &)",600,node-type,Mosaic/NodeTypes/Popover/PopoverElementTypeFactory.php
40
41
  ___radio-input--checked,&:checked,500,node-type,Mosaic/NodeTypes/Pro/Form/Form/MElements/Radio/RadioInput/RadioInputElementTypeFactory.php
41
42
  ___radio-input--checkmark,&:checked::before,500,node-type,Mosaic/NodeTypes/Pro/Form/Form/MElements/Radio/RadioInput/RadioInputElementTypeFactory.php
42
43
  ___select-input-option,"&.m-select:where(:has(option:not(:disabled):checked)), &.m-select :where(option)",500,node-type,Mosaic/NodeTypes/Pro/Form/Form/MElements/Select/SelectElementTypeFactory.php
@@ -9,8 +9,8 @@ USED/--mk-accent,PASS,"5 element(s), e.g. mk-progress-track, mk-progress, mk-clo
9
9
  USED/--mk-accent-ink,PASS,"2 element(s), e.g. mk-header-cta, tk-chip-mk-accent-ink"
10
10
  USED/--mk-ai,PASS,"1 element(s), e.g. tk-chip-mk-ai"
11
11
  USED/--mk-faint,PASS,"1 element(s), e.g. tk-chip-mk-faint"
12
- USED/--mk-ink,PASS,"76 element(s), e.g. mk-clock-m, mk-clock-m, mk-clock-s"
12
+ USED/--mk-ink,PASS,"66 element(s), e.g. mk-clock-m, mk-clock-m, mk-clock-s"
13
13
  USED/--mk-muted,PASS,"1 element(s), e.g. tk-chip-mk-muted"
14
14
  USED/--mk-panel,PASS,"3 element(s), e.g. tk-sw, tk-chip-mk-panel, tk-props"
15
- USED/--mk-paper,PASS,"7 element(s), e.g. tk-head, tk-chip-mk-paper, tk-pipe"
15
+ USED/--mk-paper,PASS,"9 element(s), e.g. mk-cap-g0-menu, mk-cap-g1-menu, tk-head"
16
16
  USED/--mk-rule,PASS,"1 element(s), e.g. tk-chip-mk-rule"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mosaic-headless",
3
- "version": "1.30.1",
3
+ "version": "1.31.1",
4
4
  "description": "AI-agent skill: build Mosaic Pro (Nextend) WordPress sites by writing the underlying data model directly - 23 custom tables, no visual editor, no DOM. Every node type, style property and node property swept against a live install and asserted on the delivered HTML and compiled CSS. Installs into Claude Code, Cursor, Codex CLI, Gemini CLI, Copilot, Continue, Windsurf and Claude.ai.",
5
5
  "keywords": [
6
6
  "wordpress",
@@ -42,6 +42,7 @@
42
42
  "sites/_dialogs.py",
43
43
  "sites/_dynamic.py",
44
44
  "sites/_forms.py",
45
+ "sites/_popovers.py",
45
46
  "sites/_sliders.py",
46
47
  "sites/_tokens.py",
47
48
  "tools/*.py",
@@ -81,13 +81,36 @@ the source on the loop node:
81
81
  ```json
82
82
  {"type": "loop",
83
83
  "data": {"loopType": "localContext",
84
- "localContextOptions": {"loopSource": {"v": "@LOOP('post/loopacf_rel')"}}},
84
+ "localContextOptions": {"loopSource": {"v": "@VAR('post/loopacf_rel')"}}},
85
85
  "children": [{"type": "loop-items", "children": [{"type": "loop-item", "children": [
86
86
  {"type": "text", "data": {"tagName": "p"},
87
87
  "children": [{"type": "wysiwyg-variable", "data": {"dynamicCode": "@VAR('item/value__label')"}}]}
88
88
  ]}]}]}
89
89
  ```
90
90
 
91
+ **The `loopSource` is `@VAR('<namespace>/<loop>')`, never `@LOOP(…)`.** This page
92
+ used to show `@LOOP('post/loopacf_rel')` here, and that form breaks the editor while
93
+ the front end renders it fine - the worst kind of split, because the page looks done:
94
+
95
+ - the front end (`LoopEvaluator.php`) takes the first string argument of whatever
96
+ function call it is given and ignores the function's name, so `@LOOP('post/x')`
97
+ and `@VAR('post/x')` resolve to the same loop;
98
+ - the editor (`evaluateLoop` in `AppMosaicEditor-bundle.js`, 1.0.10) builds its
99
+ expression evaluator with the loop lookup as the VARIABLE evaluator and `null` as
100
+ the loop evaluator, so `@VAR` resolves the loop and `@LOOP` calls `null`:
101
+ `TypeError: this._loopEvaluatorFunction is not a function`, the canvas renders
102
+ for a long time and never finishes. Mosaic's own callers write
103
+ `evaluateLoop("@VAR('<menu>/loop')")`.
104
+
105
+ Reported from a client build (a Meta Box `image_advanced` gallery as the source):
106
+ changing the source to `@VAR('post/loopwork_gallery')` cleared the editor error and
107
+ the front end still rendered all 35 images. `@LOOP(…)` *inside text* goes through a
108
+ different evaluator that is given both functions, and is fine in the editor too -
109
+ measured on the same build: a loop item's image `alt` of
110
+ `@concat(@VAR('post/title'), '|', @LOOP('post/work_category', 1, 'term_name'), '作品照片 ', @VAR('item/index'))`
111
+ opens with zero console errors and delivers `墨竹|住宅設計作品照片 1`. The table
112
+ above stays valid there.
113
+
91
114
  `loopType:"localContext"` is the built-in source that evaluates an expression in the
92
115
  page's context; the sweep's `loop` COMMIT_500 is what happens without it. The loop
93
116
  rendered exactly the rows the field holds for every family above (2, 2, 1, 1, 2, 2,