@almadar/patterns 1.0.14 → 1.1.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.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": "1.0.0",
3
- "exportedAt": "2026-02-10T05:45:36.769Z",
3
+ "exportedAt": "2026-02-10T15:35:56.769Z",
4
4
  "patterns": {
5
5
  "entity-table": {
6
6
  "type": "entity-table",
@@ -881,62 +881,188 @@
881
881
  "form-section": {
882
882
  "type": "form-section",
883
883
  "category": "form",
884
- "description": "Group of related input fields",
884
+ "description": "Alias for form Complete form with fields and actions",
885
885
  "suggestedFor": [
886
886
  "create forms",
887
887
  "edit forms",
888
- "settings"
888
+ "data entry"
889
889
  ],
890
- "typicalSize": "small",
890
+ "typicalSize": "medium",
891
891
  "propsSchema": {
892
+ "children": {
893
+ "types": [
894
+ "node"
895
+ ],
896
+ "description": "Form fields (traditional React children)"
897
+ },
898
+ "onSubmit": {
899
+ "types": [
900
+ "function",
901
+ "string"
902
+ ],
903
+ "description": "Submit handler - receives form data, or event name string for trait dispatch"
904
+ },
905
+ "onCancel": {
906
+ "types": [
907
+ "function",
908
+ "string"
909
+ ],
910
+ "description": "Cancel handler - function or event name string for trait dispatch"
911
+ },
912
+ "layout": {
913
+ "types": [
914
+ "string"
915
+ ],
916
+ "description": "Form layout"
917
+ },
918
+ "gap": {
919
+ "types": [
920
+ "string"
921
+ ],
922
+ "description": "Gap between fields"
923
+ },
924
+ "className": {
925
+ "types": [
926
+ "string"
927
+ ],
928
+ "description": "Additional CSS classes"
929
+ },
930
+ "entity": {
931
+ "types": [
932
+ "string"
933
+ ],
934
+ "description": "Schema-based props"
935
+ },
936
+ "mode": {
937
+ "types": [
938
+ "string"
939
+ ],
940
+ "description": "Form mode - 'create' for new records, 'edit' for updating existing"
941
+ },
942
+ "fields": {
943
+ "types": [
944
+ "unknown"
945
+ ],
946
+ "description": "Fields definition (schema format) - accepts readonly for generated const arrays"
947
+ },
948
+ "initialData": {
949
+ "types": [
950
+ "object",
951
+ "unknown"
952
+ ],
953
+ "description": "Initial form data"
954
+ },
955
+ "isLoading": {
956
+ "types": [
957
+ "boolean"
958
+ ],
959
+ "description": "Loading state"
960
+ },
961
+ "error": {
962
+ "types": [
963
+ "error"
964
+ ],
965
+ "description": "Error state"
966
+ },
967
+ "submitLabel": {
968
+ "types": [
969
+ "string"
970
+ ],
971
+ "description": "Submit button label"
972
+ },
973
+ "cancelLabel": {
974
+ "types": [
975
+ "string"
976
+ ],
977
+ "description": "Cancel button label (if provided, shows cancel button)"
978
+ },
979
+ "showCancel": {
980
+ "types": [
981
+ "boolean"
982
+ ],
983
+ "description": "Show cancel button (defaults to true for schema forms)"
984
+ },
892
985
  "title": {
893
986
  "types": [
894
987
  "string"
895
988
  ],
896
- "description": "Section title"
989
+ "description": "Form title (used by ModalSlot to extract title)"
897
990
  },
898
- "description": {
991
+ "submitEvent": {
899
992
  "types": [
900
993
  "string"
901
994
  ],
902
- "description": "Section description"
995
+ "description": "Event dispatch props (for trait state machine integration)"
903
996
  },
904
- "children": {
997
+ "cancelEvent": {
905
998
  "types": [
906
- "node"
999
+ "string"
907
1000
  ],
908
- "description": "Form fields",
909
- "required": true
1001
+ "description": "Event to dispatch on cancel (defaults to 'CANCEL')"
1002
+ },
1003
+ "relationsData": {
1004
+ "types": [
1005
+ "object"
1006
+ ],
1007
+ "description": "Relation data props"
1008
+ },
1009
+ "relationsLoading": {
1010
+ "types": [
1011
+ "object"
1012
+ ],
1013
+ "description": "Loading state for relation data: { fieldName: boolean }"
910
1014
  },
911
- "collapsible": {
1015
+ "conditionalFields": {
912
1016
  "types": [
1017
+ "object",
913
1018
  "boolean"
914
1019
  ],
915
- "description": "Collapsible"
1020
+ "description": "Inspection form extensions"
916
1021
  },
917
- "defaultCollapsed": {
1022
+ "hiddenCalculations": {
918
1023
  "types": [
1024
+ "array",
919
1025
  "boolean"
920
1026
  ],
921
- "description": "Default collapsed state"
1027
+ "description": "Hidden calculations that emit GLOBAL_VARIABLE_SET on field change (boolean true means enabled but config loaded separately)"
922
1028
  },
923
- "card": {
1029
+ "violationTriggers": {
924
1030
  "types": [
1031
+ "array",
925
1032
  "boolean"
926
1033
  ],
927
- "description": "Use card wrapper"
1034
+ "description": "Violation conditions that emit VIOLATION_DETECTED when met (boolean true means enabled but config loaded separately)"
928
1035
  },
929
- "columns": {
1036
+ "evaluationContext": {
930
1037
  "types": [
931
- "number"
1038
+ "formevaluationcontext",
1039
+ "object"
932
1040
  ],
933
- "description": "Grid columns for fields"
1041
+ "description": "Context for S-expression evaluation - accepts flexible types from generated code"
934
1042
  },
935
- "className": {
1043
+ "sections": {
1044
+ "types": [
1045
+ "array"
1046
+ ],
1047
+ "description": "Nested form sections with optional conditions"
1048
+ },
1049
+ "onFieldChange": {
1050
+ "types": [
1051
+ "function"
1052
+ ],
1053
+ "description": "Callback when any field value changes"
1054
+ },
1055
+ "configPath": {
936
1056
  "types": [
937
1057
  "string"
938
1058
  ],
939
- "description": "className prop"
1059
+ "description": "Config path for form configuration (schema-driven)"
1060
+ },
1061
+ "repeatable": {
1062
+ "types": [
1063
+ "boolean"
1064
+ ],
1065
+ "description": "Whether the form supports repeatable entries"
940
1066
  }
941
1067
  }
942
1068
  },
@@ -8182,7 +8308,7 @@
8182
8308
  "types": [
8183
8309
  "number"
8184
8310
  ],
8185
- "description": "Duration in ms before auto-dismiss (default 800)"
8311
+ "description": "Duration in ms before auto-dismiss (default 2000 for canvas, 800 for emoji)"
8186
8312
  },
8187
8313
  "intensity": {
8188
8314
  "types": [
@@ -8225,6 +8351,24 @@
8225
8351
  "string"
8226
8352
  ],
8227
8353
  "description": "Base URL for remote assets. Prepended to relative effectSpriteUrl paths."
8354
+ },
8355
+ "assetManifest": {
8356
+ "types": [
8357
+ "effectassetmanifest"
8358
+ ],
8359
+ "description": "Full effect asset manifest for the sprite particle engine. When provided, enables the canvas-based particle system."
8360
+ },
8361
+ "width": {
8362
+ "types": [
8363
+ "number"
8364
+ ],
8365
+ "description": "Canvas width (default 400)"
8366
+ },
8367
+ "height": {
8368
+ "types": [
8369
+ "number"
8370
+ ],
8371
+ "description": "Canvas height (default 300)"
8228
8372
  }
8229
8373
  }
8230
8374
  },
@@ -8420,6 +8564,589 @@
8420
8564
  "description": "Manifest mapping entity keys to relative sprite paths. Combined with assetBaseUrl to produce full URLs. Used as a fallback when inline URLs and callbacks don't resolve."
8421
8565
  }
8422
8566
  }
8567
+ },
8568
+ "battle-template": {
8569
+ "type": "battle-template",
8570
+ "category": "template",
8571
+ "description": "BattleTemplate Generalized tactical battle template composing IsometricCanvas from almadar-ui. Provides turn-based phase management, movement animation, valid-move/attack-target calculation, screen shake/flash, and a game-over overlay. Game-specific UI (combat log, trait viewer, damage popups, etc.) is injected via render-prop slots so this template remains project-agnostic.",
8572
+ "suggestedFor": [
8573
+ "battle",
8574
+ "template",
8575
+ "battle template"
8576
+ ],
8577
+ "typicalSize": "full",
8578
+ "propsSchema": {
8579
+ "initialUnits": {
8580
+ "types": [
8581
+ "array"
8582
+ ],
8583
+ "description": "Initial units for the battle",
8584
+ "required": true
8585
+ },
8586
+ "tiles": {
8587
+ "types": [
8588
+ "array"
8589
+ ],
8590
+ "description": "Isometric tiles (pre-resolved with terrainSprite)",
8591
+ "required": true
8592
+ },
8593
+ "scale": {
8594
+ "types": [
8595
+ "number"
8596
+ ],
8597
+ "description": "Canvas render scale"
8598
+ },
8599
+ "boardWidth": {
8600
+ "types": [
8601
+ "number"
8602
+ ],
8603
+ "description": "Board width for bounds checking"
8604
+ },
8605
+ "boardHeight": {
8606
+ "types": [
8607
+ "number"
8608
+ ],
8609
+ "description": "Board height for bounds checking"
8610
+ },
8611
+ "assetManifest": {
8612
+ "types": [
8613
+ "object"
8614
+ ],
8615
+ "description": "Asset manifest for IsometricCanvas"
8616
+ },
8617
+ "backgroundImage": {
8618
+ "types": [
8619
+ "string"
8620
+ ],
8621
+ "description": "Background image URL for canvas"
8622
+ },
8623
+ "unitScale": {
8624
+ "types": [
8625
+ "number"
8626
+ ],
8627
+ "description": "Unit draw-size multiplier"
8628
+ },
8629
+ "header": {
8630
+ "types": [
8631
+ "function"
8632
+ ],
8633
+ "description": "-- Slots --"
8634
+ },
8635
+ "sidebar": {
8636
+ "types": [
8637
+ "function"
8638
+ ],
8639
+ "description": "Sidebar content (combat log, unit roster, etc.)"
8640
+ },
8641
+ "actions": {
8642
+ "types": [
8643
+ "function"
8644
+ ],
8645
+ "description": "Floating action buttons"
8646
+ },
8647
+ "overlay": {
8648
+ "types": [
8649
+ "function"
8650
+ ],
8651
+ "description": "Floating overlays above the canvas (damage popups, tooltips)"
8652
+ },
8653
+ "gameOverOverlay": {
8654
+ "types": [
8655
+ "function"
8656
+ ],
8657
+ "description": "Game-over screen overlay"
8658
+ },
8659
+ "features": {
8660
+ "types": [
8661
+ "array"
8662
+ ],
8663
+ "description": "-- Obstacle features --"
8664
+ },
8665
+ "onAttack": {
8666
+ "types": [
8667
+ "function"
8668
+ ],
8669
+ "description": "-- Callbacks --"
8670
+ },
8671
+ "onGameEnd": {
8672
+ "types": [
8673
+ "function"
8674
+ ],
8675
+ "description": "Called when battle ends"
8676
+ },
8677
+ "onUnitMove": {
8678
+ "types": [
8679
+ "function"
8680
+ ],
8681
+ "description": "Called after a unit moves"
8682
+ },
8683
+ "calculateDamage": {
8684
+ "types": [
8685
+ "function"
8686
+ ],
8687
+ "description": "Custom combat damage calculator"
8688
+ },
8689
+ "onDrawEffects": {
8690
+ "types": [
8691
+ "function"
8692
+ ],
8693
+ "description": "-- Canvas pass-through --"
8694
+ },
8695
+ "hasActiveEffects": {
8696
+ "types": [
8697
+ "boolean"
8698
+ ],
8699
+ "description": "hasActiveEffects prop"
8700
+ },
8701
+ "effectSpriteUrls": {
8702
+ "types": [
8703
+ "array"
8704
+ ],
8705
+ "description": "effectSpriteUrls prop"
8706
+ },
8707
+ "resolveUnitFrame": {
8708
+ "types": [
8709
+ "function"
8710
+ ],
8711
+ "description": "resolveUnitFrame prop"
8712
+ },
8713
+ "className": {
8714
+ "types": [
8715
+ "string"
8716
+ ],
8717
+ "description": "className prop"
8718
+ }
8719
+ }
8720
+ },
8721
+ "castle-template": {
8722
+ "type": "castle-template",
8723
+ "category": "template",
8724
+ "description": "CastleTemplate Generalized castle / base-management template composing IsometricCanvas from almadar-ui. Renders an isometric courtyard/base view and exposes a side-panel area via slots for game-specific UI (building details, recruitment, garrison).",
8725
+ "suggestedFor": [
8726
+ "castle",
8727
+ "template",
8728
+ "castle template"
8729
+ ],
8730
+ "typicalSize": "full",
8731
+ "propsSchema": {
8732
+ "tiles": {
8733
+ "types": [
8734
+ "array"
8735
+ ],
8736
+ "description": "Isometric tiles (pre-resolved with terrainSprite)",
8737
+ "required": true
8738
+ },
8739
+ "features": {
8740
+ "types": [
8741
+ "array"
8742
+ ],
8743
+ "description": "Building features rendered on the grid"
8744
+ },
8745
+ "units": {
8746
+ "types": [
8747
+ "array"
8748
+ ],
8749
+ "description": "Garrison / stationed units on the grid"
8750
+ },
8751
+ "scale": {
8752
+ "types": [
8753
+ "number"
8754
+ ],
8755
+ "description": "Canvas render scale"
8756
+ },
8757
+ "assetManifest": {
8758
+ "types": [
8759
+ "object"
8760
+ ],
8761
+ "description": "Asset manifest for IsometricCanvas"
8762
+ },
8763
+ "backgroundImage": {
8764
+ "types": [
8765
+ "string"
8766
+ ],
8767
+ "description": "Background image URL"
8768
+ },
8769
+ "header": {
8770
+ "types": [
8771
+ "function"
8772
+ ],
8773
+ "description": "-- Slots --"
8774
+ },
8775
+ "sidePanel": {
8776
+ "types": [
8777
+ "function"
8778
+ ],
8779
+ "description": "Side panel content (buildings list, recruit tab, garrison tab)"
8780
+ },
8781
+ "overlay": {
8782
+ "types": [
8783
+ "function"
8784
+ ],
8785
+ "description": "Canvas overlay (hover tooltips, etc.)"
8786
+ },
8787
+ "footer": {
8788
+ "types": [
8789
+ "function"
8790
+ ],
8791
+ "description": "Bottom bar (income summary, etc.)"
8792
+ },
8793
+ "onFeatureClick": {
8794
+ "types": [
8795
+ "function"
8796
+ ],
8797
+ "description": "-- Callbacks --"
8798
+ },
8799
+ "onUnitClick": {
8800
+ "types": [
8801
+ "function"
8802
+ ],
8803
+ "description": "Called when a unit is clicked"
8804
+ },
8805
+ "onTileClick": {
8806
+ "types": [
8807
+ "function"
8808
+ ],
8809
+ "description": "Called when any tile is clicked"
8810
+ },
8811
+ "className": {
8812
+ "types": [
8813
+ "string"
8814
+ ],
8815
+ "description": "className prop"
8816
+ }
8817
+ }
8818
+ },
8819
+ "world-map-template": {
8820
+ "type": "world-map-template",
8821
+ "category": "template",
8822
+ "description": "WorldMapTemplate Generalized strategic world-map template composing IsometricCanvas from almadar-ui. Renders an isometric hex/iso map with hero selection, movement animation, and encounter callbacks. Game-specific panels (hero detail, hero lists, resource bars) are injected via render-prop slots.",
8823
+ "suggestedFor": [
8824
+ "world",
8825
+ "map",
8826
+ "template",
8827
+ "world map template"
8828
+ ],
8829
+ "typicalSize": "full",
8830
+ "propsSchema": {
8831
+ "hexes": {
8832
+ "types": [
8833
+ "array"
8834
+ ],
8835
+ "description": "All map hexes (with pre-resolved terrain sprites)",
8836
+ "required": true
8837
+ },
8838
+ "heroes": {
8839
+ "types": [
8840
+ "array"
8841
+ ],
8842
+ "description": "Heroes on the map",
8843
+ "required": true
8844
+ },
8845
+ "features": {
8846
+ "types": [
8847
+ "array"
8848
+ ],
8849
+ "description": "Features rendered on tiles"
8850
+ },
8851
+ "selectedHeroId": {
8852
+ "types": [
8853
+ "string"
8854
+ ],
8855
+ "description": "Currently selected hero ID"
8856
+ },
8857
+ "scale": {
8858
+ "types": [
8859
+ "number"
8860
+ ],
8861
+ "description": "Canvas render scale"
8862
+ },
8863
+ "unitScale": {
8864
+ "types": [
8865
+ "number"
8866
+ ],
8867
+ "description": "Unit draw-size multiplier"
8868
+ },
8869
+ "assetManifest": {
8870
+ "types": [
8871
+ "object"
8872
+ ],
8873
+ "description": "Asset manifest for IsometricCanvas"
8874
+ },
8875
+ "backgroundImage": {
8876
+ "types": [
8877
+ "string"
8878
+ ],
8879
+ "description": "Background image URL"
8880
+ },
8881
+ "allowMoveAllHeroes": {
8882
+ "types": [
8883
+ "boolean"
8884
+ ],
8885
+ "description": "Allow selecting / moving ALL heroes (including enemy). For testing."
8886
+ },
8887
+ "isInRange": {
8888
+ "types": [
8889
+ "function"
8890
+ ],
8891
+ "description": "Custom movement range validator"
8892
+ },
8893
+ "header": {
8894
+ "types": [
8895
+ "function"
8896
+ ],
8897
+ "description": "-- Slots --"
8898
+ },
8899
+ "sidePanel": {
8900
+ "types": [
8901
+ "function"
8902
+ ],
8903
+ "description": "Side panel (hero detail, hero lists, etc.)"
8904
+ },
8905
+ "overlay": {
8906
+ "types": [
8907
+ "function"
8908
+ ],
8909
+ "description": "Canvas overlay (tooltips, popups)"
8910
+ },
8911
+ "footer": {
8912
+ "types": [
8913
+ "function"
8914
+ ],
8915
+ "description": "Footer"
8916
+ },
8917
+ "onHeroSelect": {
8918
+ "types": [
8919
+ "function"
8920
+ ],
8921
+ "description": "-- Callbacks --"
8922
+ },
8923
+ "onHeroMove": {
8924
+ "types": [
8925
+ "function"
8926
+ ],
8927
+ "description": "onHeroMove prop"
8928
+ },
8929
+ "onBattleEncounter": {
8930
+ "types": [
8931
+ "function"
8932
+ ],
8933
+ "description": "Called when hero clicks an enemy hero tile"
8934
+ },
8935
+ "onFeatureEnter": {
8936
+ "types": [
8937
+ "function"
8938
+ ],
8939
+ "description": "Called when hero enters a feature hex (castle, resource, etc.)"
8940
+ },
8941
+ "effectSpriteUrls": {
8942
+ "types": [
8943
+ "array"
8944
+ ],
8945
+ "description": "-- Canvas pass-through --"
8946
+ },
8947
+ "resolveUnitFrame": {
8948
+ "types": [
8949
+ "function"
8950
+ ],
8951
+ "description": "resolveUnitFrame prop"
8952
+ },
8953
+ "className": {
8954
+ "types": [
8955
+ "string"
8956
+ ],
8957
+ "description": "className prop"
8958
+ }
8959
+ }
8960
+ },
8961
+ "heading": {
8962
+ "type": "heading",
8963
+ "category": "component",
8964
+ "description": "Alias for typography — Typography Atom Component Text elements following the KFlow design system with theme-aware styling.",
8965
+ "suggestedFor": [
8966
+ "typography"
8967
+ ],
8968
+ "typicalSize": "small",
8969
+ "propsSchema": {
8970
+ "variant": {
8971
+ "types": [
8972
+ "typographyvariant"
8973
+ ],
8974
+ "description": "Typography variant"
8975
+ },
8976
+ "level": {
8977
+ "types": [
8978
+ "number"
8979
+ ],
8980
+ "description": "Heading level (1-6) - alternative to variant for headings"
8981
+ },
8982
+ "color": {
8983
+ "types": [
8984
+ "string"
8985
+ ],
8986
+ "description": "Text color"
8987
+ },
8988
+ "align": {
8989
+ "types": [
8990
+ "string"
8991
+ ],
8992
+ "description": "Text alignment"
8993
+ },
8994
+ "weight": {
8995
+ "types": [
8996
+ "string"
8997
+ ],
8998
+ "description": "Font weight override"
8999
+ },
9000
+ "size": {
9001
+ "types": [
9002
+ "typographysize"
9003
+ ],
9004
+ "description": "Font size override"
9005
+ },
9006
+ "truncate": {
9007
+ "types": [
9008
+ "boolean"
9009
+ ],
9010
+ "description": "Truncate with ellipsis (single line)"
9011
+ },
9012
+ "overflow": {
9013
+ "types": [
9014
+ "string"
9015
+ ],
9016
+ "description": "Overflow handling mode"
9017
+ },
9018
+ "as": {
9019
+ "types": [
9020
+ "unknown"
9021
+ ],
9022
+ "description": "Custom HTML element"
9023
+ },
9024
+ "id": {
9025
+ "types": [
9026
+ "string"
9027
+ ],
9028
+ "description": "HTML id attribute"
9029
+ },
9030
+ "className": {
9031
+ "types": [
9032
+ "string"
9033
+ ],
9034
+ "description": "Additional class names"
9035
+ },
9036
+ "style": {
9037
+ "types": [
9038
+ "object"
9039
+ ],
9040
+ "description": "Inline style"
9041
+ },
9042
+ "content": {
9043
+ "types": [
9044
+ "node"
9045
+ ],
9046
+ "description": "Text content (alternative to children)"
9047
+ },
9048
+ "children": {
9049
+ "types": [
9050
+ "node"
9051
+ ],
9052
+ "description": "Children elements"
9053
+ }
9054
+ }
9055
+ },
9056
+ "text": {
9057
+ "type": "text",
9058
+ "category": "component",
9059
+ "description": "Alias for typography — Typography Atom Component Text elements following the KFlow design system with theme-aware styling.",
9060
+ "suggestedFor": [
9061
+ "typography"
9062
+ ],
9063
+ "typicalSize": "small",
9064
+ "propsSchema": {
9065
+ "variant": {
9066
+ "types": [
9067
+ "typographyvariant"
9068
+ ],
9069
+ "description": "Typography variant"
9070
+ },
9071
+ "level": {
9072
+ "types": [
9073
+ "number"
9074
+ ],
9075
+ "description": "Heading level (1-6) - alternative to variant for headings"
9076
+ },
9077
+ "color": {
9078
+ "types": [
9079
+ "string"
9080
+ ],
9081
+ "description": "Text color"
9082
+ },
9083
+ "align": {
9084
+ "types": [
9085
+ "string"
9086
+ ],
9087
+ "description": "Text alignment"
9088
+ },
9089
+ "weight": {
9090
+ "types": [
9091
+ "string"
9092
+ ],
9093
+ "description": "Font weight override"
9094
+ },
9095
+ "size": {
9096
+ "types": [
9097
+ "typographysize"
9098
+ ],
9099
+ "description": "Font size override"
9100
+ },
9101
+ "truncate": {
9102
+ "types": [
9103
+ "boolean"
9104
+ ],
9105
+ "description": "Truncate with ellipsis (single line)"
9106
+ },
9107
+ "overflow": {
9108
+ "types": [
9109
+ "string"
9110
+ ],
9111
+ "description": "Overflow handling mode"
9112
+ },
9113
+ "as": {
9114
+ "types": [
9115
+ "unknown"
9116
+ ],
9117
+ "description": "Custom HTML element"
9118
+ },
9119
+ "id": {
9120
+ "types": [
9121
+ "string"
9122
+ ],
9123
+ "description": "HTML id attribute"
9124
+ },
9125
+ "className": {
9126
+ "types": [
9127
+ "string"
9128
+ ],
9129
+ "description": "Additional class names"
9130
+ },
9131
+ "style": {
9132
+ "types": [
9133
+ "object"
9134
+ ],
9135
+ "description": "Inline style"
9136
+ },
9137
+ "content": {
9138
+ "types": [
9139
+ "node"
9140
+ ],
9141
+ "description": "Text content (alternative to children)"
9142
+ },
9143
+ "children": {
9144
+ "types": [
9145
+ "node"
9146
+ ],
9147
+ "description": "Children elements"
9148
+ }
9149
+ }
8423
9150
  }
8424
9151
  },
8425
9152
  "categories": [