le-kit 0.1.12 → 0.1.13

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 (121) hide show
  1. package/custom-elements.json +1268 -1268
  2. package/dist/collection/assets/custom-elements.json +750 -750
  3. package/dist/components/index.d.ts +33 -0
  4. package/dist/components/index.js +113 -0
  5. package/dist/components/index.js.map +1 -0
  6. package/dist/components/le-box.d.ts +11 -0
  7. package/dist/components/le-box.js +257 -0
  8. package/dist/components/le-box.js.map +1 -0
  9. package/dist/components/le-button.d.ts +11 -0
  10. package/dist/components/le-button.js +9 -0
  11. package/dist/components/le-button.js.map +1 -0
  12. package/dist/components/le-button2.js +1149 -0
  13. package/dist/components/le-button2.js.map +1 -0
  14. package/dist/components/le-card.d.ts +11 -0
  15. package/dist/components/le-card.js +84 -0
  16. package/dist/components/le-card.js.map +1 -0
  17. package/dist/components/le-checkbox.d.ts +11 -0
  18. package/dist/components/le-checkbox.js +9 -0
  19. package/dist/components/le-checkbox.js.map +1 -0
  20. package/dist/components/le-component.d.ts +11 -0
  21. package/dist/components/le-component.js +9 -0
  22. package/dist/components/le-component.js.map +1 -0
  23. package/dist/components/le-number-input.d.ts +11 -0
  24. package/dist/components/le-number-input.js +272 -0
  25. package/dist/components/le-number-input.js.map +1 -0
  26. package/dist/components/le-popover.d.ts +11 -0
  27. package/dist/components/le-popover.js +9 -0
  28. package/dist/components/le-popover.js.map +1 -0
  29. package/dist/components/le-popover2.js +382 -0
  30. package/dist/components/le-popover2.js.map +1 -0
  31. package/dist/components/le-popup.d.ts +11 -0
  32. package/dist/components/le-popup.js +279 -0
  33. package/dist/components/le-popup.js.map +1 -0
  34. package/dist/components/le-round-progress.d.ts +11 -0
  35. package/dist/components/le-round-progress.js +135 -0
  36. package/dist/components/le-round-progress.js.map +1 -0
  37. package/dist/components/le-slot.d.ts +11 -0
  38. package/dist/components/le-slot.js +9 -0
  39. package/dist/components/le-slot.js.map +1 -0
  40. package/dist/components/le-stack.d.ts +11 -0
  41. package/dist/components/le-stack.js +199 -0
  42. package/dist/components/le-stack.js.map +1 -0
  43. package/dist/components/le-string-input.d.ts +11 -0
  44. package/dist/components/le-string-input.js +9 -0
  45. package/dist/components/le-string-input.js.map +1 -0
  46. package/dist/components/le-text.d.ts +11 -0
  47. package/dist/components/le-text.js +399 -0
  48. package/dist/components/le-text.js.map +1 -0
  49. package/dist/components/le-turntable.d.ts +11 -0
  50. package/dist/components/le-turntable.js +164 -0
  51. package/dist/components/le-turntable.js.map +1 -0
  52. package/dist/components/utils.js +310 -0
  53. package/dist/components/utils.js.map +1 -0
  54. package/dist/core/collection/assets/custom-elements.json +4305 -0
  55. package/dist/core/collection/themes/base.css +89 -0
  56. package/dist/core/collection/themes/dark.css +100 -0
  57. package/dist/core/collection/themes/default.css +108 -0
  58. package/dist/core/collection/themes/gradient.css +100 -0
  59. package/dist/core/collection/themes/index.css +413 -0
  60. package/dist/core/collection/themes/minimal.css +100 -0
  61. package/dist/core/collection/themes/warm.css +100 -0
  62. package/dist/core/components/index.d.ts +33 -0
  63. package/dist/core/components/index.js +113 -0
  64. package/dist/core/components/index.js.map +1 -0
  65. package/dist/core/components/le-box.d.ts +11 -0
  66. package/dist/core/components/le-box.js +225 -0
  67. package/dist/core/components/le-box.js.map +1 -0
  68. package/dist/core/components/le-button.d.ts +11 -0
  69. package/dist/core/components/le-button.js +9 -0
  70. package/dist/core/components/le-button.js.map +1 -0
  71. package/dist/core/components/le-button2.js +121 -0
  72. package/dist/core/components/le-button2.js.map +1 -0
  73. package/dist/core/components/le-card.d.ts +11 -0
  74. package/dist/core/components/le-card.js +52 -0
  75. package/dist/core/components/le-card.js.map +1 -0
  76. package/dist/core/components/le-checkbox.d.ts +11 -0
  77. package/dist/core/components/le-checkbox.js +87 -0
  78. package/dist/core/components/le-checkbox.js.map +1 -0
  79. package/dist/core/components/le-number-input.d.ts +11 -0
  80. package/dist/core/components/le-number-input.js +246 -0
  81. package/dist/core/components/le-number-input.js.map +1 -0
  82. package/dist/core/components/le-popover.d.ts +11 -0
  83. package/dist/core/components/le-popover.js +385 -0
  84. package/dist/core/components/le-popover.js.map +1 -0
  85. package/dist/core/components/le-popup.d.ts +11 -0
  86. package/dist/core/components/le-popup.js +253 -0
  87. package/dist/core/components/le-popup.js.map +1 -0
  88. package/dist/core/components/le-round-progress.d.ts +11 -0
  89. package/dist/core/components/le-round-progress.js +135 -0
  90. package/dist/core/components/le-round-progress.js.map +1 -0
  91. package/dist/core/components/le-stack.d.ts +11 -0
  92. package/dist/core/components/le-stack.js +167 -0
  93. package/dist/core/components/le-stack.js.map +1 -0
  94. package/dist/core/components/le-string-input.d.ts +11 -0
  95. package/dist/core/components/le-string-input.js +127 -0
  96. package/dist/core/components/le-string-input.js.map +1 -0
  97. package/dist/core/components/le-text.d.ts +11 -0
  98. package/dist/core/components/le-text.js +367 -0
  99. package/dist/core/components/le-text.js.map +1 -0
  100. package/dist/core/components/le-turntable.d.ts +11 -0
  101. package/dist/core/components/le-turntable.js +164 -0
  102. package/dist/core/components/le-turntable.js.map +1 -0
  103. package/dist/core/components/utils.js +310 -0
  104. package/dist/core/components/utils.js.map +1 -0
  105. package/dist/docs.json +1 -1
  106. package/dist/le-kit/assets/custom-elements.json +750 -750
  107. package/dist/le-kit/dist/collection/themes/base.css +89 -0
  108. package/dist/le-kit/dist/collection/themes/dark.css +100 -0
  109. package/dist/le-kit/dist/collection/themes/default.css +108 -0
  110. package/dist/le-kit/dist/collection/themes/gradient.css +100 -0
  111. package/dist/le-kit/dist/collection/themes/index.css +413 -0
  112. package/dist/le-kit/dist/collection/themes/minimal.css +100 -0
  113. package/dist/le-kit/dist/collection/themes/warm.css +100 -0
  114. package/package.json +2 -2
  115. /package/dist/{le-kit → collection/dist/collection}/themes/base.css +0 -0
  116. /package/dist/{le-kit → collection/dist/collection}/themes/dark.css +0 -0
  117. /package/dist/{le-kit → collection/dist/collection}/themes/default.css +0 -0
  118. /package/dist/{le-kit → collection/dist/collection}/themes/gradient.css +0 -0
  119. /package/dist/{le-kit → collection/dist/collection}/themes/index.css +0 -0
  120. /package/dist/{le-kit → collection/dist/collection}/themes/minimal.css +0 -0
  121. /package/dist/{le-kit → collection/dist/collection}/themes/warm.css +0 -0
@@ -745,16 +745,60 @@
745
745
  },
746
746
  {
747
747
  "kind": "javascript-module",
748
- "path": "src/components/le-component/le-component.tsx",
748
+ "path": "src/components/le-card/le-card.tsx",
749
749
  "declarations": [
750
750
  {
751
751
  "kind": "class",
752
- "description": "Component wrapper for admin mode editing.\n\nThis component is used internally by other components to provide admin-mode\nediting capabilities. It wraps the component's rendered output and shows\na settings popover for editing properties.\n\nIn default mode, it acts as a simple passthrough (display: contents).\nIn admin mode, it shows a border, component name header, and settings popover.\n\nThe host element is found automatically by traversing up through the shadow DOM.\n\nUsage inside a component's render method:\n```tsx\nrender() {\n return (\n <le-component component=\"le-card\">\n <Host>...</Host>\n </le-component>\n );\n}\n```",
753
- "name": "LeComponent",
752
+ "description": "A flexible card component with header, content, and footer slots.\n\nThe card uses le-slot wrappers for each slot area. In admin mode,\nle-slot shows placeholders for CMS editing. In default mode,\nle-slot acts as a transparent passthrough.",
753
+ "name": "LeCard",
754
+ "cssProperties": [
755
+ {
756
+ "description": "Card background color",
757
+ "name": "--le-card-bg"
758
+ },
759
+ {
760
+ "description": "Card border radius",
761
+ "name": "--le-card-border-radius"
762
+ },
763
+ {
764
+ "description": "Card box shadow",
765
+ "name": "--le-card-shadow"
766
+ },
767
+ {
768
+ "description": "Card content padding",
769
+ "name": "--le-card-padding"
770
+ }
771
+ ],
772
+ "cssParts": [
773
+ {
774
+ "description": "The main card container",
775
+ "name": "card"
776
+ },
777
+ {
778
+ "description": "The card header section",
779
+ "name": "header"
780
+ },
781
+ {
782
+ "description": "The card content section",
783
+ "name": "content"
784
+ },
785
+ {
786
+ "description": "The card footer section",
787
+ "name": "footer"
788
+ }
789
+ ],
754
790
  "slots": [
755
791
  {
756
- "description": "The component's rendered content",
792
+ "description": "Card header content (title, actions)",
793
+ "name": "header"
794
+ },
795
+ {
796
+ "description": "Default slot for main card content",
757
797
  "name": ""
798
+ },
799
+ {
800
+ "description": "Card footer content (buttons, links)",
801
+ "name": "footer"
758
802
  }
759
803
  ],
760
804
  "members": [
@@ -767,337 +811,492 @@
767
811
  },
768
812
  {
769
813
  "kind": "field",
770
- "name": "component",
814
+ "name": "variant",
815
+ "type": {
816
+ "text": "'default' | 'outlined' | 'elevated'"
817
+ },
818
+ "default": "'default'",
819
+ "description": "Card variant style"
820
+ },
821
+ {
822
+ "kind": "field",
823
+ "name": "interactive",
824
+ "type": {
825
+ "text": "boolean"
826
+ },
827
+ "default": "false",
828
+ "description": "Whether the card is interactive (clickable)"
829
+ },
830
+ {
831
+ "kind": "method",
832
+ "name": "render"
833
+ }
834
+ ],
835
+ "attributes": [
836
+ {
837
+ "name": "variant",
838
+ "fieldName": "variant",
839
+ "default": "'default'",
840
+ "description": "Card variant style",
841
+ "type": {
842
+ "text": "'default' | 'outlined' | 'elevated'"
843
+ }
844
+ },
845
+ {
846
+ "name": "interactive",
847
+ "fieldName": "interactive",
848
+ "default": "false",
849
+ "description": "Whether the card is interactive (clickable)",
850
+ "type": {
851
+ "text": "boolean"
852
+ }
853
+ }
854
+ ],
855
+ "tagName": "le-card",
856
+ "events": [],
857
+ "customElement": true
858
+ }
859
+ ],
860
+ "exports": [
861
+ {
862
+ "kind": "js",
863
+ "name": "LeCard",
864
+ "declaration": {
865
+ "name": "LeCard",
866
+ "module": "src/components/le-card/le-card.tsx"
867
+ }
868
+ },
869
+ {
870
+ "kind": "custom-element-definition",
871
+ "name": "le-card",
872
+ "declaration": {
873
+ "name": "LeCard",
874
+ "module": "src/components/le-card/le-card.tsx"
875
+ }
876
+ }
877
+ ]
878
+ },
879
+ {
880
+ "kind": "javascript-module",
881
+ "path": "src/components/le-number-input/le-number-input.tsx",
882
+ "declarations": [
883
+ {
884
+ "kind": "class",
885
+ "description": "A number input component with validation, keyboard controls, and custom spinners.",
886
+ "name": "LeNumberInput",
887
+ "cssProperties": [
888
+ {
889
+ "description": "Input background color",
890
+ "name": "--le-input-bg"
891
+ },
892
+ {
893
+ "description": "Input text color",
894
+ "name": "--le-input-color"
895
+ },
896
+ {
897
+ "description": "Input border style",
898
+ "name": "--le-input-border"
899
+ },
900
+ {
901
+ "description": "Input border style when focused",
902
+ "name": "--le-input-border-focus"
903
+ },
904
+ {
905
+ "description": "Input border style when invalid",
906
+ "name": "--le-input-border-error"
907
+ },
908
+ {
909
+ "description": "Input border radius",
910
+ "name": "--le-input-radius"
911
+ },
912
+ {
913
+ "description": "Input padding",
914
+ "name": "--le-input-padding"
915
+ }
916
+ ],
917
+ "slots": [
918
+ {
919
+ "description": "The label text for the input",
920
+ "name": ""
921
+ },
922
+ {
923
+ "description": "Additional description text displayed below the input",
924
+ "name": "description"
925
+ },
926
+ {
927
+ "description": "Icon to display at the start of the input",
928
+ "name": "icon-start"
929
+ }
930
+ ],
931
+ "members": [
932
+ {
933
+ "kind": "field",
934
+ "name": "el",
935
+ "type": {
936
+ "text": "HTMLElement"
937
+ }
938
+ },
939
+ {
940
+ "kind": "field",
941
+ "name": "value",
942
+ "type": {
943
+ "text": "number"
944
+ },
945
+ "description": "The value of the input"
946
+ },
947
+ {
948
+ "kind": "field",
949
+ "name": "name",
771
950
  "type": {
772
951
  "text": "string"
773
952
  },
774
- "description": "The tag name of the component (e.g., 'le-card').\nUsed to look up property metadata and display the component name."
953
+ "description": "The name of the input"
775
954
  },
776
955
  {
777
956
  "kind": "field",
778
- "name": "displayName",
957
+ "name": "label",
779
958
  "type": {
780
- "text": "string | undefined"
959
+ "text": "string"
781
960
  },
782
- "description": "Optional display name for the component.\nIf not provided, the tag name will be formatted as the display name."
961
+ "description": "Label for the input"
783
962
  },
784
963
  {
785
964
  "kind": "field",
786
- "name": "hostClass",
965
+ "name": "placeholder",
787
966
  "type": {
788
- "text": "string | undefined"
967
+ "text": "string"
789
968
  },
790
- "description": "Classes to apply to the host element.\nAllows parent components to pass their styling classes."
969
+ "description": "Placeholder text"
791
970
  },
792
971
  {
793
972
  "kind": "field",
794
- "name": "hostStyle",
973
+ "name": "min",
795
974
  "type": {
796
- "text": "{ [key: string]: string } | undefined"
975
+ "text": "number | undefined"
797
976
  },
798
- "description": "Inline styles to apply to the host element.\nAllows parent components to pass dynamic styles (e.g., flex properties)."
977
+ "description": "Minimum allowed value"
799
978
  },
800
979
  {
801
980
  "kind": "field",
802
- "name": "hostElement",
981
+ "name": "max",
803
982
  "type": {
804
- "text": "HTMLElement | undefined"
983
+ "text": "number | undefined"
805
984
  },
806
- "privacy": "private",
807
- "description": "Reference to the host element (found automatically from parent)"
985
+ "description": "Maximum allowed value"
808
986
  },
809
987
  {
810
988
  "kind": "field",
811
- "name": "adminMode",
989
+ "name": "step",
990
+ "type": {
991
+ "text": "number"
992
+ },
993
+ "default": "1",
994
+ "description": "Step value for increment/decrement"
995
+ },
996
+ {
997
+ "kind": "field",
998
+ "name": "required",
812
999
  "type": {
813
1000
  "text": "boolean"
814
1001
  },
815
- "privacy": "private",
816
1002
  "default": "false",
817
- "description": "Internal state to track admin mode"
1003
+ "description": "Whether the input is required"
818
1004
  },
819
1005
  {
820
1006
  "kind": "field",
821
- "name": "componentMeta",
1007
+ "name": "disabled",
822
1008
  "type": {
823
- "text": "ComponentMetadata | null"
1009
+ "text": "boolean"
824
1010
  },
825
- "privacy": "private",
826
- "default": "null",
827
- "description": "Component metadata loaded from Custom Elements Manifest"
1011
+ "default": "false",
1012
+ "description": "Whether the input is disabled"
828
1013
  },
829
1014
  {
830
1015
  "kind": "field",
831
- "name": "propertyValues",
1016
+ "name": "readonly",
832
1017
  "type": {
833
- "text": "Record<string, any>"
1018
+ "text": "boolean"
834
1019
  },
835
- "privacy": "private",
836
- "default": "{}",
837
- "description": "Current property values of the host component"
1020
+ "default": "false",
1021
+ "description": "Whether the input is read-only"
838
1022
  },
839
1023
  {
840
1024
  "kind": "field",
841
- "name": "disconnectModeObserver",
1025
+ "name": "iconStart",
842
1026
  "type": {
843
- "text": "() => void | undefined"
1027
+ "text": "string | undefined"
844
1028
  },
845
- "privacy": "private"
1029
+ "description": "Icon for the start icon"
846
1030
  },
847
1031
  {
848
- "kind": "method",
849
- "name": "findHostElement",
850
- "privacy": "private",
851
- "description": "Find the host element by traversing up through shadow DOM"
1032
+ "kind": "field",
1033
+ "name": "showSpinners",
1034
+ "type": {
1035
+ "text": "boolean"
1036
+ },
1037
+ "default": "true",
1038
+ "description": "Whether to show the spinner controls"
852
1039
  },
853
1040
  {
854
- "kind": "method",
855
- "name": "formatDisplayName",
1041
+ "kind": "field",
1042
+ "name": "externalId",
1043
+ "type": {
1044
+ "text": "string"
1045
+ },
1046
+ "description": "External ID for linking with external systems"
1047
+ },
1048
+ {
1049
+ "kind": "field",
1050
+ "name": "isValid",
1051
+ "type": {
1052
+ "text": "boolean"
1053
+ },
856
1054
  "privacy": "private",
857
- "return": {
858
- "type": {
859
- "text": "string"
860
- }
1055
+ "default": "true",
1056
+ "description": "Internal validation state"
1057
+ },
1058
+ {
1059
+ "kind": "field",
1060
+ "name": "validationMessage",
1061
+ "type": {
1062
+ "text": "string"
861
1063
  },
862
- "parameters": [
863
- {
864
- "name": "tagName",
865
- "type": {
866
- "text": "string"
867
- }
868
- }
869
- ],
870
- "description": "Formats a tag name into a display name\ne.g., 'le-card' -> 'Card'"
1064
+ "privacy": "private",
1065
+ "default": "''"
871
1066
  },
872
1067
  {
873
1068
  "kind": "method",
874
- "name": "loadComponentMetadata",
875
- "privacy": "private",
876
- "description": "Load component metadata from the Custom Elements Manifest"
1069
+ "name": "valueChanged"
877
1070
  },
878
1071
  {
879
1072
  "kind": "method",
880
- "name": "isInternalAttribute",
881
- "privacy": "private",
882
- "return": {
883
- "type": {
884
- "text": "boolean"
885
- }
886
- },
887
- "parameters": [
888
- {
889
- "name": "name",
890
- "type": {
891
- "text": "string"
892
- }
893
- }
894
- ],
895
- "description": "Check if an attribute is internal (should not be shown in editor)"
1073
+ "name": "validate",
1074
+ "privacy": "private"
896
1075
  },
897
1076
  {
898
1077
  "kind": "method",
899
- "name": "readPropertyValues",
900
- "privacy": "private",
901
- "description": "Read current property values from the host element"
1078
+ "name": "emitChange",
1079
+ "privacy": "private"
902
1080
  },
903
1081
  {
904
1082
  "kind": "method",
905
- "name": "parseAttributeValue",
906
- "privacy": "private",
907
- "return": {
908
- "type": {
909
- "text": "any"
910
- }
911
- },
912
- "parameters": [
913
- {
914
- "name": "value",
915
- "type": {
916
- "text": "string | null"
917
- }
918
- },
919
- {
920
- "name": "type",
921
- "optional": true,
922
- "type": {
923
- "text": "string"
924
- }
925
- }
926
- ],
927
- "description": "Parse an attribute value based on its type"
1083
+ "name": "emitInput",
1084
+ "privacy": "private"
928
1085
  },
929
1086
  {
930
1087
  "kind": "method",
931
- "name": "handlePropertyChange",
1088
+ "name": "updateValue",
932
1089
  "privacy": "private",
933
1090
  "parameters": [
934
1091
  {
935
- "name": "attrName",
936
- "type": {
937
- "text": "string"
938
- }
939
- },
940
- {
941
- "name": "value",
942
- "type": {
943
- "text": "any"
944
- }
945
- },
946
- {
947
- "name": "type",
948
- "optional": true,
1092
+ "name": "newValue",
949
1093
  "type": {
950
- "text": "string"
1094
+ "text": "number"
951
1095
  }
952
1096
  }
953
- ],
954
- "description": "Handle property value changes from the editor"
1097
+ ]
955
1098
  },
956
1099
  {
957
- "kind": "method",
958
- "name": "deleteComponent",
959
- "privacy": "private",
960
- "description": "Delete this component from the DOM"
1100
+ "kind": "field",
1101
+ "name": "handleInput",
1102
+ "privacy": "private"
1103
+ },
1104
+ {
1105
+ "kind": "field",
1106
+ "name": "handleChange",
1107
+ "privacy": "private"
1108
+ },
1109
+ {
1110
+ "kind": "field",
1111
+ "name": "handleKeyDown",
1112
+ "privacy": "private"
1113
+ },
1114
+ {
1115
+ "kind": "field",
1116
+ "name": "handleWheel",
1117
+ "privacy": "private"
1118
+ },
1119
+ {
1120
+ "kind": "field",
1121
+ "name": "increment",
1122
+ "privacy": "private"
1123
+ },
1124
+ {
1125
+ "kind": "field",
1126
+ "name": "decrement",
1127
+ "privacy": "private"
961
1128
  },
962
1129
  {
963
1130
  "kind": "method",
964
- "name": "renderPropertyEditor",
965
- "privacy": "private",
966
- "description": "Render the property editor form"
1131
+ "name": "render"
1132
+ }
1133
+ ],
1134
+ "attributes": [
1135
+ {
1136
+ "name": "value",
1137
+ "fieldName": "value",
1138
+ "description": "The value of the input",
1139
+ "type": {
1140
+ "text": "number"
1141
+ }
1142
+ },
1143
+ {
1144
+ "name": "name",
1145
+ "fieldName": "name",
1146
+ "description": "The name of the input",
1147
+ "type": {
1148
+ "text": "string"
1149
+ }
1150
+ },
1151
+ {
1152
+ "name": "label",
1153
+ "fieldName": "label",
1154
+ "description": "Label for the input",
1155
+ "type": {
1156
+ "text": "string"
1157
+ }
1158
+ },
1159
+ {
1160
+ "name": "placeholder",
1161
+ "fieldName": "placeholder",
1162
+ "description": "Placeholder text",
1163
+ "type": {
1164
+ "text": "string"
1165
+ }
1166
+ },
1167
+ {
1168
+ "name": "min",
1169
+ "fieldName": "min",
1170
+ "description": "Minimum allowed value",
1171
+ "type": {
1172
+ "text": "number"
1173
+ }
1174
+ },
1175
+ {
1176
+ "name": "max",
1177
+ "fieldName": "max",
1178
+ "description": "Maximum allowed value",
1179
+ "type": {
1180
+ "text": "number"
1181
+ }
1182
+ },
1183
+ {
1184
+ "name": "step",
1185
+ "fieldName": "step",
1186
+ "default": "1",
1187
+ "description": "Step value for increment/decrement",
1188
+ "type": {
1189
+ "text": "number"
1190
+ }
1191
+ },
1192
+ {
1193
+ "name": "required",
1194
+ "fieldName": "required",
1195
+ "default": "false",
1196
+ "description": "Whether the input is required",
1197
+ "type": {
1198
+ "text": "boolean"
1199
+ }
1200
+ },
1201
+ {
1202
+ "name": "disabled",
1203
+ "fieldName": "disabled",
1204
+ "default": "false",
1205
+ "description": "Whether the input is disabled",
1206
+ "type": {
1207
+ "text": "boolean"
1208
+ }
967
1209
  },
968
1210
  {
969
- "kind": "method",
970
- "name": "renderPropertyField",
971
- "privacy": "private",
972
- "parameters": [
973
- {
974
- "name": "attr",
975
- "type": {
976
- "text": "AttributeMetadata"
977
- }
978
- }
979
- ],
980
- "description": "Render a single property field based on its type"
1211
+ "name": "readonly",
1212
+ "fieldName": "readonly",
1213
+ "default": "false",
1214
+ "description": "Whether the input is read-only",
1215
+ "type": {
1216
+ "text": "boolean"
1217
+ }
981
1218
  },
982
1219
  {
983
- "kind": "method",
984
- "name": "render"
985
- }
986
- ],
987
- "attributes": [
988
- {
989
- "name": "component",
990
- "fieldName": "component",
991
- "description": "The tag name of the component (e.g., 'le-card').\nUsed to look up property metadata and display the component name.",
1220
+ "name": "icon-start",
1221
+ "fieldName": "iconStart",
1222
+ "description": "Icon for the start icon",
992
1223
  "type": {
993
1224
  "text": "string"
994
1225
  }
995
1226
  },
996
1227
  {
997
- "name": "display-name",
998
- "fieldName": "displayName",
999
- "description": "Optional display name for the component.\nIf not provided, the tag name will be formatted as the display name.",
1228
+ "name": "show-spinners",
1229
+ "fieldName": "showSpinners",
1230
+ "default": "true",
1231
+ "description": "Whether to show the spinner controls",
1000
1232
  "type": {
1001
- "text": "string"
1233
+ "text": "boolean"
1002
1234
  }
1003
1235
  },
1004
1236
  {
1005
- "name": "host-class",
1006
- "fieldName": "hostClass",
1007
- "description": "Classes to apply to the host element.\nAllows parent components to pass their styling classes.",
1237
+ "name": "external-id",
1238
+ "fieldName": "externalId",
1239
+ "description": "External ID for linking with external systems",
1008
1240
  "type": {
1009
1241
  "text": "string"
1010
1242
  }
1243
+ }
1244
+ ],
1245
+ "tagName": "le-number-input",
1246
+ "events": [
1247
+ {
1248
+ "name": "leChange",
1249
+ "type": {
1250
+ "text": "EventEmitter<{ value: number; name: string; externalId: string; isValid: boolean }>"
1251
+ },
1252
+ "description": "Emitted when the value changes (on blur or Enter)"
1011
1253
  },
1012
1254
  {
1013
- "name": "host-style",
1014
- "fieldName": "hostStyle",
1015
- "description": "Inline styles to apply to the host element.\nAllows parent components to pass dynamic styles (e.g., flex properties).",
1255
+ "name": "leInput",
1016
1256
  "type": {
1017
- "text": "{ [key: string]: string }"
1018
- }
1257
+ "text": "EventEmitter<{ value: number; name: string; externalId: string; isValid: boolean }>"
1258
+ },
1259
+ "description": "Emitted when the input value changes (on keystroke/spin)"
1019
1260
  }
1020
1261
  ],
1021
- "tagName": "le-component",
1022
- "events": [],
1023
1262
  "customElement": true
1024
1263
  }
1025
1264
  ],
1026
1265
  "exports": [
1027
1266
  {
1028
1267
  "kind": "js",
1029
- "name": "LeComponent",
1268
+ "name": "LeNumberInput",
1030
1269
  "declaration": {
1031
- "name": "LeComponent",
1032
- "module": "src/components/le-component/le-component.tsx"
1270
+ "name": "LeNumberInput",
1271
+ "module": "src/components/le-number-input/le-number-input.tsx"
1033
1272
  }
1034
1273
  },
1035
1274
  {
1036
1275
  "kind": "custom-element-definition",
1037
- "name": "le-component",
1276
+ "name": "le-number-input",
1038
1277
  "declaration": {
1039
- "name": "LeComponent",
1040
- "module": "src/components/le-component/le-component.tsx"
1278
+ "name": "LeNumberInput",
1279
+ "module": "src/components/le-number-input/le-number-input.tsx"
1041
1280
  }
1042
1281
  }
1043
1282
  ]
1044
1283
  },
1045
1284
  {
1046
1285
  "kind": "javascript-module",
1047
- "path": "src/components/le-card/le-card.tsx",
1286
+ "path": "src/components/le-popover/le-popover.tsx",
1048
1287
  "declarations": [
1049
1288
  {
1050
1289
  "kind": "class",
1051
- "description": "A flexible card component with header, content, and footer slots.\n\nThe card uses le-slot wrappers for each slot area. In admin mode,\nle-slot shows placeholders for CMS editing. In default mode,\nle-slot acts as a transparent passthrough.",
1052
- "name": "LeCard",
1053
- "cssProperties": [
1054
- {
1055
- "description": "Card background color",
1056
- "name": "--le-card-bg"
1057
- },
1058
- {
1059
- "description": "Card border radius",
1060
- "name": "--le-card-border-radius"
1061
- },
1062
- {
1063
- "description": "Card box shadow",
1064
- "name": "--le-card-shadow"
1065
- },
1066
- {
1067
- "description": "Card content padding",
1068
- "name": "--le-card-padding"
1069
- }
1070
- ],
1071
- "cssParts": [
1072
- {
1073
- "description": "The main card container",
1074
- "name": "card"
1075
- },
1076
- {
1077
- "description": "The card header section",
1078
- "name": "header"
1079
- },
1080
- {
1081
- "description": "The card content section",
1082
- "name": "content"
1083
- },
1084
- {
1085
- "description": "The card footer section",
1086
- "name": "footer"
1087
- }
1088
- ],
1290
+ "description": "A popover component for displaying floating content.\n\nUses the native HTML Popover API for proper layering with dialogs\nand other top-layer elements. Falls back gracefully in older browsers.",
1291
+ "name": "LePopover",
1089
1292
  "slots": [
1090
1293
  {
1091
- "description": "Card header content (title, actions)",
1092
- "name": "header"
1093
- },
1094
- {
1095
- "description": "Default slot for main card content",
1294
+ "description": "Content to display inside the popover",
1096
1295
  "name": ""
1097
1296
  },
1098
1297
  {
1099
- "description": "Card footer content (buttons, links)",
1100
- "name": "footer"
1298
+ "description": "Element that triggers the popover (optional)",
1299
+ "name": "trigger"
1101
1300
  }
1102
1301
  ],
1103
1302
  "members": [
@@ -1110,160 +1309,220 @@
1110
1309
  },
1111
1310
  {
1112
1311
  "kind": "field",
1113
- "name": "variant",
1312
+ "name": "mode",
1114
1313
  "type": {
1115
- "text": "'default' | 'outlined' | 'elevated'"
1314
+ "text": "'default' | 'admin'"
1116
1315
  },
1117
- "default": "'default'",
1118
- "description": "Card variant style"
1316
+ "description": "Mode of the popover should be 'default' for internal use"
1119
1317
  },
1120
1318
  {
1121
1319
  "kind": "field",
1122
- "name": "interactive",
1320
+ "name": "open",
1123
1321
  "type": {
1124
1322
  "text": "boolean"
1125
1323
  },
1126
1324
  "default": "false",
1127
- "description": "Whether the card is interactive (clickable)"
1325
+ "description": "Whether the popover is currently open"
1128
1326
  },
1129
1327
  {
1130
- "kind": "method",
1131
- "name": "render"
1132
- }
1133
- ],
1134
- "attributes": [
1328
+ "kind": "field",
1329
+ "name": "position",
1330
+ "type": {
1331
+ "text": "'top' | 'bottom' | 'left' | 'right' | 'auto'"
1332
+ },
1333
+ "default": "'bottom'",
1334
+ "description": "Position of the popover relative to its trigger"
1335
+ },
1135
1336
  {
1136
- "name": "variant",
1137
- "fieldName": "variant",
1138
- "default": "'default'",
1139
- "description": "Card variant style",
1337
+ "kind": "field",
1338
+ "name": "align",
1140
1339
  "type": {
1141
- "text": "'default' | 'outlined' | 'elevated'"
1142
- }
1340
+ "text": "'start' | 'center' | 'end'"
1341
+ },
1342
+ "default": "'start'",
1343
+ "description": "Alignment of the popover"
1143
1344
  },
1144
1345
  {
1145
- "name": "interactive",
1146
- "fieldName": "interactive",
1147
- "default": "false",
1148
- "description": "Whether the card is interactive (clickable)",
1346
+ "kind": "field",
1347
+ "name": "popoverTitle",
1149
1348
  "type": {
1150
- "text": "boolean"
1151
- }
1152
- }
1153
- ],
1154
- "tagName": "le-card",
1155
- "events": [],
1156
- "customElement": true
1157
- }
1158
- ],
1159
- "exports": [
1160
- {
1161
- "kind": "js",
1162
- "name": "LeCard",
1163
- "declaration": {
1164
- "name": "LeCard",
1165
- "module": "src/components/le-card/le-card.tsx"
1166
- }
1167
- },
1168
- {
1169
- "kind": "custom-element-definition",
1170
- "name": "le-card",
1171
- "declaration": {
1172
- "name": "LeCard",
1173
- "module": "src/components/le-card/le-card.tsx"
1174
- }
1175
- }
1176
- ]
1177
- },
1178
- {
1179
- "kind": "javascript-module",
1180
- "path": "src/components/le-checkbox/le-checkbox.tsx",
1181
- "declarations": [
1182
- {
1183
- "kind": "class",
1184
- "description": "A checkbox component with support for labels, descriptions, and external IDs.",
1185
- "name": "LeCheckbox",
1186
- "cssProperties": [
1349
+ "text": "string | undefined"
1350
+ },
1351
+ "description": "Optional title for the popover header"
1352
+ },
1187
1353
  {
1188
- "description": "Size of the checkbox input",
1189
- "name": "--le-checkbox-size"
1354
+ "kind": "field",
1355
+ "name": "showClose",
1356
+ "type": {
1357
+ "text": "boolean"
1358
+ },
1359
+ "default": "true",
1360
+ "description": "Whether to show a close button in the header"
1190
1361
  },
1191
1362
  {
1192
- "description": "Color of the checkbox when checked",
1193
- "name": "--le-checkbox-color"
1363
+ "kind": "field",
1364
+ "name": "closeOnClickOutside",
1365
+ "type": {
1366
+ "text": "boolean"
1367
+ },
1368
+ "default": "true",
1369
+ "description": "Whether clicking outside closes the popover"
1194
1370
  },
1195
1371
  {
1196
- "description": "Color of the label text",
1197
- "name": "--le-checkbox-label-color"
1372
+ "kind": "field",
1373
+ "name": "closeOnEscape",
1374
+ "type": {
1375
+ "text": "boolean"
1376
+ },
1377
+ "default": "true",
1378
+ "description": "Whether pressing Escape closes the popover"
1198
1379
  },
1199
1380
  {
1200
- "description": "Color of the description text",
1201
- "name": "--le-checkbox-desc-color"
1202
- }
1203
- ],
1204
- "slots": [
1381
+ "kind": "field",
1382
+ "name": "offset",
1383
+ "type": {
1384
+ "text": "number"
1385
+ },
1386
+ "default": "8",
1387
+ "description": "Offset from the trigger element (in pixels)"
1388
+ },
1205
1389
  {
1206
- "description": "The label text for the checkbox",
1207
- "name": ""
1390
+ "kind": "field",
1391
+ "name": "width",
1392
+ "type": {
1393
+ "text": "string | undefined"
1394
+ },
1395
+ "description": "Fixed width for the popover (e.g., '300px', '20rem')"
1208
1396
  },
1209
1397
  {
1210
- "description": "Additional description text displayed below the label",
1211
- "name": "description"
1212
- }
1213
- ],
1214
- "members": [
1398
+ "kind": "field",
1399
+ "name": "minWidth",
1400
+ "type": {
1401
+ "text": "string | undefined"
1402
+ },
1403
+ "default": "'200px'",
1404
+ "description": "Minimum width for the popover (e.g., '200px', '15rem')"
1405
+ },
1215
1406
  {
1216
1407
  "kind": "field",
1217
- "name": "el",
1408
+ "name": "maxWidth",
1218
1409
  "type": {
1219
- "text": "HTMLElement"
1220
- }
1410
+ "text": "string | undefined"
1411
+ },
1412
+ "description": "Maximum width for the popover (e.g., '400px', '25rem')"
1221
1413
  },
1222
1414
  {
1223
1415
  "kind": "field",
1224
- "name": "checked",
1416
+ "name": "isPositioned",
1225
1417
  "type": {
1226
1418
  "text": "boolean"
1227
1419
  },
1228
- "default": "false",
1229
- "description": "Whether the checkbox is checked"
1420
+ "privacy": "private",
1421
+ "default": "false"
1230
1422
  },
1231
1423
  {
1232
1424
  "kind": "field",
1233
- "name": "disabled",
1425
+ "name": "triggerEl",
1234
1426
  "type": {
1235
- "text": "boolean"
1427
+ "text": "HTMLElement | undefined"
1236
1428
  },
1237
- "default": "false",
1238
- "description": "Whether the checkbox is disabled"
1429
+ "privacy": "private"
1239
1430
  },
1240
1431
  {
1241
1432
  "kind": "field",
1242
- "name": "name",
1433
+ "name": "popoverEl",
1243
1434
  "type": {
1244
- "text": "string"
1435
+ "text": "HTMLElement | undefined"
1245
1436
  },
1246
- "description": "The name of the checkbox input"
1437
+ "privacy": "private"
1247
1438
  },
1248
1439
  {
1249
1440
  "kind": "field",
1250
- "name": "value",
1441
+ "name": "uniqueId",
1251
1442
  "type": {
1252
1443
  "text": "string"
1253
1444
  },
1254
- "description": "The value of the checkbox input"
1445
+ "privacy": "private",
1446
+ "default": "`le-popover-${Math.random().toString(36).substr(2, 9)}`"
1255
1447
  },
1256
1448
  {
1257
1449
  "kind": "field",
1258
- "name": "externalId",
1450
+ "name": "scrollParents",
1259
1451
  "type": {
1260
- "text": "string"
1452
+ "text": "Element[]"
1261
1453
  },
1262
- "description": "External ID for linking with external systems (e.g. database ID, PDF form field ID)"
1454
+ "privacy": "private",
1455
+ "default": "[]"
1456
+ },
1457
+ {
1458
+ "kind": "method",
1459
+ "name": "getScrollParents",
1460
+ "privacy": "private",
1461
+ "return": {
1462
+ "type": {
1463
+ "text": "Element[]"
1464
+ }
1465
+ },
1466
+ "parameters": [
1467
+ {
1468
+ "name": "element",
1469
+ "type": {
1470
+ "text": "Element"
1471
+ }
1472
+ }
1473
+ ],
1474
+ "description": "Find all scrollable parent elements"
1475
+ },
1476
+ {
1477
+ "kind": "method",
1478
+ "name": "addScrollListeners",
1479
+ "privacy": "private",
1480
+ "description": "Add scroll listeners to all scrollable parents"
1481
+ },
1482
+ {
1483
+ "kind": "method",
1484
+ "name": "removeScrollListeners",
1485
+ "privacy": "private",
1486
+ "description": "Remove scroll listeners"
1263
1487
  },
1264
1488
  {
1265
1489
  "kind": "field",
1266
- "name": "handleChange",
1490
+ "name": "handleScroll",
1491
+ "privacy": "private"
1492
+ },
1493
+ {
1494
+ "kind": "field",
1495
+ "name": "handlePopoverToggle",
1496
+ "privacy": "private"
1497
+ },
1498
+ {
1499
+ "kind": "field",
1500
+ "name": "handleOtherPopoverOpen",
1501
+ "privacy": "private"
1502
+ },
1503
+ {
1504
+ "kind": "method",
1505
+ "name": "show",
1506
+ "description": "Opens the popover"
1507
+ },
1508
+ {
1509
+ "kind": "method",
1510
+ "name": "hide",
1511
+ "description": "Closes the popover"
1512
+ },
1513
+ {
1514
+ "kind": "method",
1515
+ "name": "toggle",
1516
+ "description": "Toggles the popover"
1517
+ },
1518
+ {
1519
+ "kind": "field",
1520
+ "name": "handleTriggerClick",
1521
+ "privacy": "private"
1522
+ },
1523
+ {
1524
+ "kind": "method",
1525
+ "name": "updatePosition",
1267
1526
  "privacy": "private"
1268
1527
  },
1269
1528
  {
@@ -1273,56 +1532,125 @@
1273
1532
  ],
1274
1533
  "attributes": [
1275
1534
  {
1276
- "name": "checked",
1277
- "fieldName": "checked",
1535
+ "name": "mode",
1536
+ "fieldName": "mode",
1537
+ "description": "Mode of the popover should be 'default' for internal use",
1538
+ "type": {
1539
+ "text": "'default' | 'admin'"
1540
+ }
1541
+ },
1542
+ {
1543
+ "name": "open",
1544
+ "fieldName": "open",
1278
1545
  "default": "false",
1279
- "description": "Whether the checkbox is checked",
1546
+ "description": "Whether the popover is currently open",
1280
1547
  "type": {
1281
1548
  "text": "boolean"
1282
1549
  }
1283
1550
  },
1284
1551
  {
1285
- "name": "disabled",
1286
- "fieldName": "disabled",
1287
- "default": "false",
1288
- "description": "Whether the checkbox is disabled",
1552
+ "name": "position",
1553
+ "fieldName": "position",
1554
+ "default": "'bottom'",
1555
+ "description": "Position of the popover relative to its trigger",
1556
+ "type": {
1557
+ "text": "'top' | 'bottom' | 'left' | 'right' | 'auto'"
1558
+ }
1559
+ },
1560
+ {
1561
+ "name": "align",
1562
+ "fieldName": "align",
1563
+ "default": "'start'",
1564
+ "description": "Alignment of the popover",
1565
+ "type": {
1566
+ "text": "'start' | 'center' | 'end'"
1567
+ }
1568
+ },
1569
+ {
1570
+ "name": "popover-title",
1571
+ "fieldName": "popoverTitle",
1572
+ "description": "Optional title for the popover header",
1573
+ "type": {
1574
+ "text": "string"
1575
+ }
1576
+ },
1577
+ {
1578
+ "name": "show-close",
1579
+ "fieldName": "showClose",
1580
+ "default": "true",
1581
+ "description": "Whether to show a close button in the header",
1289
1582
  "type": {
1290
1583
  "text": "boolean"
1291
1584
  }
1292
1585
  },
1293
1586
  {
1294
- "name": "name",
1295
- "fieldName": "name",
1296
- "description": "The name of the checkbox input",
1587
+ "name": "close-on-click-outside",
1588
+ "fieldName": "closeOnClickOutside",
1589
+ "default": "true",
1590
+ "description": "Whether clicking outside closes the popover",
1591
+ "type": {
1592
+ "text": "boolean"
1593
+ }
1594
+ },
1595
+ {
1596
+ "name": "close-on-escape",
1597
+ "fieldName": "closeOnEscape",
1598
+ "default": "true",
1599
+ "description": "Whether pressing Escape closes the popover",
1600
+ "type": {
1601
+ "text": "boolean"
1602
+ }
1603
+ },
1604
+ {
1605
+ "name": "offset",
1606
+ "fieldName": "offset",
1607
+ "default": "8",
1608
+ "description": "Offset from the trigger element (in pixels)",
1609
+ "type": {
1610
+ "text": "number"
1611
+ }
1612
+ },
1613
+ {
1614
+ "name": "width",
1615
+ "fieldName": "width",
1616
+ "description": "Fixed width for the popover (e.g., '300px', '20rem')",
1297
1617
  "type": {
1298
1618
  "text": "string"
1299
1619
  }
1300
1620
  },
1301
1621
  {
1302
- "name": "value",
1303
- "fieldName": "value",
1304
- "description": "The value of the checkbox input",
1622
+ "name": "min-width",
1623
+ "fieldName": "minWidth",
1624
+ "default": "'200px'",
1625
+ "description": "Minimum width for the popover (e.g., '200px', '15rem')",
1305
1626
  "type": {
1306
1627
  "text": "string"
1307
1628
  }
1308
1629
  },
1309
1630
  {
1310
- "name": "external-id",
1311
- "fieldName": "externalId",
1312
- "description": "External ID for linking with external systems (e.g. database ID, PDF form field ID)",
1631
+ "name": "max-width",
1632
+ "fieldName": "maxWidth",
1633
+ "description": "Maximum width for the popover (e.g., '400px', '25rem')",
1313
1634
  "type": {
1314
1635
  "text": "string"
1315
1636
  }
1316
1637
  }
1317
1638
  ],
1318
- "tagName": "le-checkbox",
1639
+ "tagName": "le-popover",
1319
1640
  "events": [
1320
1641
  {
1321
- "name": "change",
1642
+ "name": "lePopoverOpen",
1322
1643
  "type": {
1323
- "text": "EventEmitter<{ checked: boolean; value: string; name: string; externalId: string }>"
1644
+ "text": "EventEmitter<void>"
1324
1645
  },
1325
- "description": "Emitted when the checked state changes"
1646
+ "description": "Emitted when the popover opens"
1647
+ },
1648
+ {
1649
+ "name": "lePopoverClose",
1650
+ "type": {
1651
+ "text": "EventEmitter<void>"
1652
+ },
1653
+ "description": "Emitted when the popover closes"
1326
1654
  }
1327
1655
  ],
1328
1656
  "customElement": true
@@ -1331,38 +1659,42 @@
1331
1659
  "exports": [
1332
1660
  {
1333
1661
  "kind": "js",
1334
- "name": "LeCheckbox",
1662
+ "name": "LePopover",
1335
1663
  "declaration": {
1336
- "name": "LeCheckbox",
1337
- "module": "src/components/le-checkbox/le-checkbox.tsx"
1664
+ "name": "LePopover",
1665
+ "module": "src/components/le-popover/le-popover.tsx"
1338
1666
  }
1339
1667
  },
1340
1668
  {
1341
1669
  "kind": "custom-element-definition",
1342
- "name": "le-checkbox",
1670
+ "name": "le-popover",
1343
1671
  "declaration": {
1344
- "name": "LeCheckbox",
1345
- "module": "src/components/le-checkbox/le-checkbox.tsx"
1672
+ "name": "LePopover",
1673
+ "module": "src/components/le-popover/le-popover.tsx"
1346
1674
  }
1347
1675
  }
1348
1676
  ]
1349
1677
  },
1350
1678
  {
1351
1679
  "kind": "javascript-module",
1352
- "path": "src/components/le-popover/le-popover.tsx",
1680
+ "path": "src/components/le-popup/le-popup.tsx",
1353
1681
  "declarations": [
1354
1682
  {
1355
1683
  "kind": "class",
1356
- "description": "A popover component for displaying floating content.\n\nUses the native HTML Popover API for proper layering with dialogs\nand other top-layer elements. Falls back gracefully in older browsers.",
1357
- "name": "LePopover",
1684
+ "description": "A flexible popup/dialog component for alerts, confirms, prompts, and custom content.\n\nUses the native HTML <dialog> element for proper modal behavior, accessibility,\nand focus management. Can be used declaratively in HTML or programmatically \nvia leAlert(), leConfirm(), lePrompt().",
1685
+ "name": "LePopup",
1358
1686
  "slots": [
1359
1687
  {
1360
- "description": "Content to display inside the popover",
1688
+ "description": "Default slot for custom body content",
1361
1689
  "name": ""
1362
1690
  },
1363
1691
  {
1364
- "description": "Element that triggers the popover (optional)",
1365
- "name": "trigger"
1692
+ "description": "Custom header content (replaces title)",
1693
+ "name": "header"
1694
+ },
1695
+ {
1696
+ "description": "Custom footer content (replaces default buttons)",
1697
+ "name": "footer"
1366
1698
  }
1367
1699
  ],
1368
1700
  "members": [
@@ -1373,14 +1705,6 @@
1373
1705
  "text": "HTMLElement"
1374
1706
  }
1375
1707
  },
1376
- {
1377
- "kind": "field",
1378
- "name": "mode",
1379
- "type": {
1380
- "text": "'default' | 'admin'"
1381
- },
1382
- "description": "Mode of the popover should be 'default' for internal use"
1383
- },
1384
1708
  {
1385
1709
  "kind": "field",
1386
1710
  "name": "open",
@@ -1388,207 +1712,214 @@
1388
1712
  "text": "boolean"
1389
1713
  },
1390
1714
  "default": "false",
1391
- "description": "Whether the popover is currently open"
1715
+ "description": "Whether the popup is currently visible"
1392
1716
  },
1393
1717
  {
1394
1718
  "kind": "field",
1395
- "name": "position",
1719
+ "name": "type",
1396
1720
  "type": {
1397
- "text": "'top' | 'bottom' | 'left' | 'right' | 'auto'"
1721
+ "text": "PopupType"
1398
1722
  },
1399
- "default": "'bottom'",
1400
- "description": "Position of the popover relative to its trigger"
1723
+ "default": "'alert'",
1724
+ "description": "Type of popup: alert (OK only), confirm (OK/Cancel), prompt (input + OK/Cancel), custom"
1401
1725
  },
1402
1726
  {
1403
1727
  "kind": "field",
1404
- "name": "align",
1728
+ "name": "popupTitle",
1405
1729
  "type": {
1406
- "text": "'start' | 'center' | 'end'"
1730
+ "text": "string | undefined"
1407
1731
  },
1408
- "default": "'start'",
1409
- "description": "Alignment of the popover"
1732
+ "description": "Optional title for the popup header"
1410
1733
  },
1411
1734
  {
1412
1735
  "kind": "field",
1413
- "name": "popoverTitle",
1736
+ "name": "message",
1414
1737
  "type": {
1415
1738
  "text": "string | undefined"
1416
1739
  },
1417
- "description": "Optional title for the popover header"
1740
+ "description": "Message text to display (for alert/confirm/prompt types)"
1418
1741
  },
1419
1742
  {
1420
1743
  "kind": "field",
1421
- "name": "showClose",
1744
+ "name": "modal",
1422
1745
  "type": {
1423
1746
  "text": "boolean"
1424
1747
  },
1425
1748
  "default": "true",
1426
- "description": "Whether to show a close button in the header"
1749
+ "description": "Whether the popup is modal (blocks interaction with page behind)"
1427
1750
  },
1428
1751
  {
1429
1752
  "kind": "field",
1430
- "name": "closeOnClickOutside",
1753
+ "name": "position",
1431
1754
  "type": {
1432
- "text": "boolean"
1755
+ "text": "PopupPosition"
1433
1756
  },
1434
- "default": "true",
1435
- "description": "Whether clicking outside closes the popover"
1757
+ "default": "'center'",
1758
+ "description": "Position of the popup on screen"
1436
1759
  },
1437
1760
  {
1438
1761
  "kind": "field",
1439
- "name": "closeOnEscape",
1762
+ "name": "confirmText",
1440
1763
  "type": {
1441
- "text": "boolean"
1764
+ "text": "string"
1442
1765
  },
1443
- "default": "true",
1444
- "description": "Whether pressing Escape closes the popover"
1766
+ "default": "'OK'",
1767
+ "description": "Text for the confirm/OK button"
1445
1768
  },
1446
1769
  {
1447
1770
  "kind": "field",
1448
- "name": "offset",
1771
+ "name": "cancelText",
1449
1772
  "type": {
1450
- "text": "number"
1773
+ "text": "string"
1451
1774
  },
1452
- "default": "8",
1453
- "description": "Offset from the trigger element (in pixels)"
1775
+ "default": "'Cancel'",
1776
+ "description": "Text for the cancel button"
1454
1777
  },
1455
1778
  {
1456
1779
  "kind": "field",
1457
- "name": "width",
1780
+ "name": "placeholder",
1458
1781
  "type": {
1459
- "text": "string | undefined"
1782
+ "text": "string"
1460
1783
  },
1461
- "description": "Fixed width for the popover (e.g., '300px', '20rem')"
1784
+ "default": "''",
1785
+ "description": "Placeholder text for prompt input"
1462
1786
  },
1463
1787
  {
1464
1788
  "kind": "field",
1465
- "name": "minWidth",
1789
+ "name": "defaultValue",
1466
1790
  "type": {
1467
- "text": "string | undefined"
1791
+ "text": "string"
1468
1792
  },
1469
- "default": "'200px'",
1470
- "description": "Minimum width for the popover (e.g., '200px', '15rem')"
1793
+ "default": "''",
1794
+ "description": "Default value for prompt input"
1471
1795
  },
1472
1796
  {
1473
1797
  "kind": "field",
1474
- "name": "maxWidth",
1798
+ "name": "closeOnBackdrop",
1475
1799
  "type": {
1476
- "text": "string | undefined"
1800
+ "text": "boolean"
1477
1801
  },
1478
- "description": "Maximum width for the popover (e.g., '400px', '25rem')"
1802
+ "default": "true",
1803
+ "description": "Whether clicking the backdrop closes the popup (modal only)"
1479
1804
  },
1480
1805
  {
1481
1806
  "kind": "field",
1482
- "name": "isPositioned",
1807
+ "name": "inputValue",
1483
1808
  "type": {
1484
- "text": "boolean"
1809
+ "text": "string"
1485
1810
  },
1486
- "privacy": "private",
1487
- "default": "false"
1811
+ "default": "''",
1812
+ "description": "Internal state for prompt input value"
1488
1813
  },
1489
1814
  {
1490
1815
  "kind": "field",
1491
- "name": "triggerEl",
1816
+ "name": "dialogEl",
1492
1817
  "type": {
1493
- "text": "HTMLElement | undefined"
1818
+ "text": "HTMLDialogElement | undefined"
1494
1819
  },
1495
1820
  "privacy": "private"
1496
1821
  },
1497
1822
  {
1498
1823
  "kind": "field",
1499
- "name": "popoverEl",
1824
+ "name": "inputEl",
1500
1825
  "type": {
1501
- "text": "HTMLElement | undefined"
1826
+ "text": "HTMLInputElement | undefined"
1502
1827
  },
1503
1828
  "privacy": "private"
1504
1829
  },
1505
1830
  {
1506
1831
  "kind": "field",
1507
- "name": "uniqueId",
1832
+ "name": "resolvePromise",
1508
1833
  "type": {
1509
- "text": "string"
1834
+ "text": "(result: PopupResult) => void | undefined"
1510
1835
  },
1511
- "privacy": "private",
1512
- "default": "`le-popover-${Math.random().toString(36).substr(2, 9)}`"
1836
+ "privacy": "private"
1513
1837
  },
1514
1838
  {
1515
1839
  "kind": "field",
1516
- "name": "scrollParents",
1517
- "type": {
1518
- "text": "Element[]"
1519
- },
1520
- "privacy": "private",
1521
- "default": "[]"
1840
+ "name": "handleDialogCancel",
1841
+ "privacy": "private"
1522
1842
  },
1523
1843
  {
1524
1844
  "kind": "method",
1525
- "name": "getScrollParents",
1526
- "privacy": "private",
1845
+ "name": "show",
1527
1846
  "return": {
1528
1847
  "type": {
1529
- "text": "Element[]"
1848
+ "text": "Promise<PopupResult>"
1530
1849
  }
1531
1850
  },
1851
+ "description": "Opens the popup and returns a promise that resolves when closed"
1852
+ },
1853
+ {
1854
+ "kind": "method",
1855
+ "name": "hide",
1532
1856
  "parameters": [
1533
1857
  {
1534
- "name": "element",
1858
+ "name": "confirmed",
1859
+ "default": "false",
1535
1860
  "type": {
1536
- "text": "Element"
1861
+ "text": "boolean"
1537
1862
  }
1538
1863
  }
1539
1864
  ],
1540
- "description": "Find all scrollable parent elements"
1865
+ "description": "Closes the popup with a result"
1541
1866
  },
1542
1867
  {
1543
- "kind": "method",
1544
- "name": "addScrollListeners",
1545
- "privacy": "private",
1546
- "description": "Add scroll listeners to all scrollable parents"
1868
+ "kind": "field",
1869
+ "name": "handleConfirm",
1870
+ "privacy": "private"
1547
1871
  },
1548
1872
  {
1549
- "kind": "method",
1550
- "name": "removeScrollListeners",
1551
- "privacy": "private",
1552
- "description": "Remove scroll listeners"
1873
+ "kind": "field",
1874
+ "name": "handleCancel",
1875
+ "privacy": "private"
1553
1876
  },
1554
1877
  {
1555
1878
  "kind": "field",
1556
- "name": "handleScroll",
1879
+ "name": "handleBackdropClick",
1557
1880
  "privacy": "private"
1558
1881
  },
1559
1882
  {
1560
1883
  "kind": "field",
1561
- "name": "handlePopoverToggle",
1884
+ "name": "handleInputChange",
1562
1885
  "privacy": "private"
1563
1886
  },
1564
1887
  {
1565
1888
  "kind": "field",
1566
- "name": "handleOtherPopoverOpen",
1889
+ "name": "handleKeyDown",
1567
1890
  "privacy": "private"
1568
1891
  },
1569
1892
  {
1570
1893
  "kind": "method",
1571
- "name": "show",
1572
- "description": "Opens the popover"
1894
+ "name": "hasSlot",
1895
+ "privacy": "private",
1896
+ "return": {
1897
+ "type": {
1898
+ "text": "boolean"
1899
+ }
1900
+ },
1901
+ "parameters": [
1902
+ {
1903
+ "name": "name",
1904
+ "type": {
1905
+ "text": "string"
1906
+ }
1907
+ }
1908
+ ]
1573
1909
  },
1574
1910
  {
1575
1911
  "kind": "method",
1576
- "name": "hide",
1577
- "description": "Closes the popover"
1912
+ "name": "renderHeader",
1913
+ "privacy": "private"
1578
1914
  },
1579
1915
  {
1580
1916
  "kind": "method",
1581
- "name": "toggle",
1582
- "description": "Toggles the popover"
1583
- },
1584
- {
1585
- "kind": "field",
1586
- "name": "handleTriggerClick",
1917
+ "name": "renderBody",
1587
1918
  "privacy": "private"
1588
1919
  },
1589
1920
  {
1590
1921
  "kind": "method",
1591
- "name": "updatePosition",
1922
+ "name": "renderFooter",
1592
1923
  "privacy": "private"
1593
1924
  },
1594
1925
  {
@@ -1597,126 +1928,133 @@
1597
1928
  }
1598
1929
  ],
1599
1930
  "attributes": [
1600
- {
1601
- "name": "mode",
1602
- "fieldName": "mode",
1603
- "description": "Mode of the popover should be 'default' for internal use",
1604
- "type": {
1605
- "text": "'default' | 'admin'"
1606
- }
1607
- },
1608
1931
  {
1609
1932
  "name": "open",
1610
1933
  "fieldName": "open",
1611
1934
  "default": "false",
1612
- "description": "Whether the popover is currently open",
1935
+ "description": "Whether the popup is currently visible",
1613
1936
  "type": {
1614
1937
  "text": "boolean"
1615
1938
  }
1616
1939
  },
1617
1940
  {
1618
- "name": "position",
1619
- "fieldName": "position",
1620
- "default": "'bottom'",
1621
- "description": "Position of the popover relative to its trigger",
1941
+ "name": "type",
1942
+ "fieldName": "type",
1943
+ "default": "'alert'",
1944
+ "description": "Type of popup: alert (OK only), confirm (OK/Cancel), prompt (input + OK/Cancel), custom",
1622
1945
  "type": {
1623
- "text": "'top' | 'bottom' | 'left' | 'right' | 'auto'"
1946
+ "text": "PopupType"
1624
1947
  }
1625
1948
  },
1626
1949
  {
1627
- "name": "align",
1628
- "fieldName": "align",
1629
- "default": "'start'",
1630
- "description": "Alignment of the popover",
1950
+ "name": "popup-title",
1951
+ "fieldName": "popupTitle",
1952
+ "description": "Optional title for the popup header",
1631
1953
  "type": {
1632
- "text": "'start' | 'center' | 'end'"
1954
+ "text": "string"
1633
1955
  }
1634
1956
  },
1635
1957
  {
1636
- "name": "popover-title",
1637
- "fieldName": "popoverTitle",
1638
- "description": "Optional title for the popover header",
1958
+ "name": "message",
1959
+ "fieldName": "message",
1960
+ "description": "Message text to display (for alert/confirm/prompt types)",
1639
1961
  "type": {
1640
1962
  "text": "string"
1641
1963
  }
1642
1964
  },
1643
1965
  {
1644
- "name": "show-close",
1645
- "fieldName": "showClose",
1966
+ "name": "modal",
1967
+ "fieldName": "modal",
1646
1968
  "default": "true",
1647
- "description": "Whether to show a close button in the header",
1969
+ "description": "Whether the popup is modal (blocks interaction with page behind)",
1648
1970
  "type": {
1649
1971
  "text": "boolean"
1650
1972
  }
1651
1973
  },
1652
1974
  {
1653
- "name": "close-on-click-outside",
1654
- "fieldName": "closeOnClickOutside",
1655
- "default": "true",
1656
- "description": "Whether clicking outside closes the popover",
1975
+ "name": "position",
1976
+ "fieldName": "position",
1977
+ "default": "'center'",
1978
+ "description": "Position of the popup on screen",
1657
1979
  "type": {
1658
- "text": "boolean"
1980
+ "text": "PopupPosition"
1659
1981
  }
1660
1982
  },
1661
1983
  {
1662
- "name": "close-on-escape",
1663
- "fieldName": "closeOnEscape",
1664
- "default": "true",
1665
- "description": "Whether pressing Escape closes the popover",
1984
+ "name": "confirm-text",
1985
+ "fieldName": "confirmText",
1986
+ "default": "'OK'",
1987
+ "description": "Text for the confirm/OK button",
1666
1988
  "type": {
1667
- "text": "boolean"
1989
+ "text": "string"
1668
1990
  }
1669
1991
  },
1670
1992
  {
1671
- "name": "offset",
1672
- "fieldName": "offset",
1673
- "default": "8",
1674
- "description": "Offset from the trigger element (in pixels)",
1993
+ "name": "cancel-text",
1994
+ "fieldName": "cancelText",
1995
+ "default": "'Cancel'",
1996
+ "description": "Text for the cancel button",
1675
1997
  "type": {
1676
- "text": "number"
1998
+ "text": "string"
1677
1999
  }
1678
2000
  },
1679
2001
  {
1680
- "name": "width",
1681
- "fieldName": "width",
1682
- "description": "Fixed width for the popover (e.g., '300px', '20rem')",
2002
+ "name": "placeholder",
2003
+ "fieldName": "placeholder",
2004
+ "default": "''",
2005
+ "description": "Placeholder text for prompt input",
1683
2006
  "type": {
1684
2007
  "text": "string"
1685
2008
  }
1686
2009
  },
1687
2010
  {
1688
- "name": "min-width",
1689
- "fieldName": "minWidth",
1690
- "default": "'200px'",
1691
- "description": "Minimum width for the popover (e.g., '200px', '15rem')",
2011
+ "name": "default-value",
2012
+ "fieldName": "defaultValue",
2013
+ "default": "''",
2014
+ "description": "Default value for prompt input",
1692
2015
  "type": {
1693
2016
  "text": "string"
1694
2017
  }
1695
2018
  },
1696
2019
  {
1697
- "name": "max-width",
1698
- "fieldName": "maxWidth",
1699
- "description": "Maximum width for the popover (e.g., '400px', '25rem')",
2020
+ "name": "close-on-backdrop",
2021
+ "fieldName": "closeOnBackdrop",
2022
+ "default": "true",
2023
+ "description": "Whether clicking the backdrop closes the popup (modal only)",
1700
2024
  "type": {
1701
- "text": "string"
2025
+ "text": "boolean"
1702
2026
  }
1703
2027
  }
1704
2028
  ],
1705
- "tagName": "le-popover",
2029
+ "tagName": "le-popup",
1706
2030
  "events": [
1707
2031
  {
1708
- "name": "lePopoverOpen",
2032
+ "name": "leConfirm",
1709
2033
  "type": {
1710
- "text": "EventEmitter<void>"
2034
+ "text": "EventEmitter<PopupResult>"
1711
2035
  },
1712
- "description": "Emitted when the popover opens"
2036
+ "description": "Emitted when the popup is confirmed (OK clicked)"
1713
2037
  },
1714
2038
  {
1715
- "name": "lePopoverClose",
2039
+ "name": "leCancel",
2040
+ "type": {
2041
+ "text": "EventEmitter<PopupResult>"
2042
+ },
2043
+ "description": "Emitted when the popup is cancelled (Cancel clicked or dismissed)"
2044
+ },
2045
+ {
2046
+ "name": "leOpen",
1716
2047
  "type": {
1717
2048
  "text": "EventEmitter<void>"
1718
2049
  },
1719
- "description": "Emitted when the popover closes"
2050
+ "description": "Emitted when the popup opens"
2051
+ },
2052
+ {
2053
+ "name": "leClose",
2054
+ "type": {
2055
+ "text": "EventEmitter<PopupResult>"
2056
+ },
2057
+ "description": "Emitted when the popup closes"
1720
2058
  }
1721
2059
  ],
1722
2060
  "customElement": true
@@ -1725,18 +2063,18 @@
1725
2063
  "exports": [
1726
2064
  {
1727
2065
  "kind": "js",
1728
- "name": "LePopover",
2066
+ "name": "LePopup",
1729
2067
  "declaration": {
1730
- "name": "LePopover",
1731
- "module": "src/components/le-popover/le-popover.tsx"
2068
+ "name": "LePopup",
2069
+ "module": "src/components/le-popup/le-popup.tsx"
1732
2070
  }
1733
2071
  },
1734
2072
  {
1735
2073
  "kind": "custom-element-definition",
1736
- "name": "le-popover",
2074
+ "name": "le-popup",
1737
2075
  "declaration": {
1738
- "name": "LePopover",
1739
- "module": "src/components/le-popover/le-popover.tsx"
2076
+ "name": "LePopup",
2077
+ "module": "src/components/le-popup/le-popup.tsx"
1740
2078
  }
1741
2079
  }
1742
2080
  ]
@@ -1908,24 +2246,16 @@
1908
2246
  },
1909
2247
  {
1910
2248
  "kind": "javascript-module",
1911
- "path": "src/components/le-popup/le-popup.tsx",
2249
+ "path": "src/components/le-slot/le-slot.tsx",
1912
2250
  "declarations": [
1913
2251
  {
1914
2252
  "kind": "class",
1915
- "description": "A flexible popup/dialog component for alerts, confirms, prompts, and custom content.\n\nUses the native HTML <dialog> element for proper modal behavior, accessibility,\nand focus management. Can be used declaratively in HTML or programmatically \nvia leAlert(), leConfirm(), lePrompt().",
1916
- "name": "LePopup",
2253
+ "description": "Slot placeholder component for admin/CMS mode.\n\nThis component renders a visual placeholder for slots when in admin mode,\nallowing CMS systems to show available drop zones for content or inline editing.\n\nIn non-admin mode, this component renders nothing and acts as a passthrough.",
2254
+ "name": "LeSlot",
1917
2255
  "slots": [
1918
2256
  {
1919
- "description": "Default slot for custom body content",
2257
+ "description": "Default slot for placeholder content or drop zone UI",
1920
2258
  "name": ""
1921
- },
1922
- {
1923
- "description": "Custom header content (replaces title)",
1924
- "name": "header"
1925
- },
1926
- {
1927
- "description": "Custom footer content (replaces default buttons)",
1928
- "name": "footer"
1929
2259
  }
1930
2260
  ],
1931
2261
  "members": [
@@ -1938,354 +2268,359 @@
1938
2268
  },
1939
2269
  {
1940
2270
  "kind": "field",
1941
- "name": "open",
2271
+ "name": "type",
1942
2272
  "type": {
1943
- "text": "boolean"
2273
+ "text": "'slot' | 'text' | 'textarea'"
1944
2274
  },
1945
- "default": "false",
1946
- "description": "Whether the popup is currently visible"
2275
+ "default": "'slot'",
2276
+ "description": "The type of slot content.\n- `slot`: Default, shows a dropzone for components (default)\n- `text`: Shows a single-line text input\n- `textarea`: Shows a multi-line text area"
1947
2277
  },
1948
2278
  {
1949
2279
  "kind": "field",
1950
- "name": "type",
2280
+ "name": "name",
1951
2281
  "type": {
1952
- "text": "PopupType"
2282
+ "text": "string"
1953
2283
  },
1954
- "default": "'alert'",
1955
- "description": "Type of popup: alert (OK only), confirm (OK/Cancel), prompt (input + OK/Cancel), custom"
2284
+ "default": "''",
2285
+ "description": "The name of the slot this placeholder represents.\nShould match the slot name in the parent component."
1956
2286
  },
1957
2287
  {
1958
2288
  "kind": "field",
1959
- "name": "popupTitle",
2289
+ "name": "label",
1960
2290
  "type": {
1961
2291
  "text": "string | undefined"
1962
2292
  },
1963
- "description": "Optional title for the popup header"
2293
+ "description": "Label to display in admin mode.\nIf not provided, the slot name will be used."
1964
2294
  },
1965
2295
  {
1966
2296
  "kind": "field",
1967
- "name": "message",
2297
+ "name": "description",
1968
2298
  "type": {
1969
2299
  "text": "string | undefined"
1970
2300
  },
1971
- "description": "Message text to display (for alert/confirm/prompt types)"
2301
+ "description": "Description of what content this slot accepts.\nShown in admin mode to guide content editors."
1972
2302
  },
1973
2303
  {
1974
2304
  "kind": "field",
1975
- "name": "modal",
2305
+ "name": "allowedComponents",
2306
+ "type": {
2307
+ "text": "string | undefined"
2308
+ },
2309
+ "description": "Comma-separated list of allowed component tags for this slot.\nUsed by CMS to filter available components."
2310
+ },
2311
+ {
2312
+ "kind": "field",
2313
+ "name": "multiple",
1976
2314
  "type": {
1977
2315
  "text": "boolean"
1978
2316
  },
1979
2317
  "default": "true",
1980
- "description": "Whether the popup is modal (blocks interaction with page behind)"
2318
+ "description": "Whether multiple components can be dropped in this slot."
1981
2319
  },
1982
2320
  {
1983
2321
  "kind": "field",
1984
- "name": "position",
2322
+ "name": "required",
1985
2323
  "type": {
1986
- "text": "PopupPosition"
2324
+ "text": "boolean"
1987
2325
  },
1988
- "default": "'center'",
1989
- "description": "Position of the popup on screen"
2326
+ "default": "false",
2327
+ "description": "Whether this slot is required to have content."
1990
2328
  },
1991
2329
  {
1992
2330
  "kind": "field",
1993
- "name": "confirmText",
2331
+ "name": "placeholder",
1994
2332
  "type": {
1995
- "text": "string"
2333
+ "text": "string | undefined"
1996
2334
  },
1997
- "default": "'OK'",
1998
- "description": "Text for the confirm/OK button"
2335
+ "description": "Placeholder text for text/textarea inputs in admin mode."
1999
2336
  },
2000
2337
  {
2001
2338
  "kind": "field",
2002
- "name": "cancelText",
2339
+ "name": "tag",
2003
2340
  "type": {
2004
- "text": "string"
2341
+ "text": "string | undefined"
2005
2342
  },
2006
- "default": "'Cancel'",
2007
- "description": "Text for the cancel button"
2343
+ "description": "The HTML tag to create when there's no slotted element.\nUsed with type=\"text\" or type=\"textarea\" to auto-create elements."
2008
2344
  },
2009
2345
  {
2010
2346
  "kind": "field",
2011
- "name": "placeholder",
2347
+ "name": "slotStyle",
2012
2348
  "type": {
2013
- "text": "string"
2349
+ "text": "string | undefined"
2014
2350
  },
2015
- "default": "''",
2016
- "description": "Placeholder text for prompt input"
2351
+ "description": "CSS styles for the slot dropzone container.\nUseful for layouts - e.g., \"flex-direction: row\" for horizontal stacks.\nOnly applies in admin mode for type=\"slot\"."
2017
2352
  },
2018
2353
  {
2019
2354
  "kind": "field",
2020
- "name": "defaultValue",
2355
+ "name": "adminMode",
2356
+ "type": {
2357
+ "text": "boolean"
2358
+ },
2359
+ "privacy": "private",
2360
+ "default": "false",
2361
+ "description": "Internal state to track admin mode"
2362
+ },
2363
+ {
2364
+ "kind": "field",
2365
+ "name": "textValue",
2021
2366
  "type": {
2022
2367
  "text": "string"
2023
2368
  },
2369
+ "privacy": "private",
2024
2370
  "default": "''",
2025
- "description": "Default value for prompt input"
2371
+ "description": "Internal state for text input value (synced from slot content)"
2026
2372
  },
2027
2373
  {
2028
2374
  "kind": "field",
2029
- "name": "closeOnBackdrop",
2375
+ "name": "isValidHtml",
2030
2376
  "type": {
2031
2377
  "text": "boolean"
2032
2378
  },
2379
+ "privacy": "private",
2033
2380
  "default": "true",
2034
- "description": "Whether clicking the backdrop closes the popup (modal only)"
2381
+ "description": "Whether the current textValue contains valid HTML"
2035
2382
  },
2036
2383
  {
2037
2384
  "kind": "field",
2038
- "name": "inputValue",
2385
+ "name": "availableComponents",
2039
2386
  "type": {
2040
- "text": "string"
2387
+ "text": "ComponentInfo[]"
2041
2388
  },
2042
- "default": "''",
2043
- "description": "Internal state for prompt input value"
2389
+ "privacy": "private",
2390
+ "default": "[]",
2391
+ "description": "Available components loaded from Custom Elements Manifest"
2044
2392
  },
2045
2393
  {
2046
2394
  "kind": "field",
2047
- "name": "dialogEl",
2395
+ "name": "pickerOpen",
2048
2396
  "type": {
2049
- "text": "HTMLDialogElement | undefined"
2397
+ "text": "boolean"
2050
2398
  },
2051
- "privacy": "private"
2399
+ "privacy": "private",
2400
+ "default": "false",
2401
+ "description": "Whether the component picker popover is open"
2052
2402
  },
2053
2403
  {
2054
2404
  "kind": "field",
2055
- "name": "inputEl",
2405
+ "name": "slotRef",
2056
2406
  "type": {
2057
- "text": "HTMLInputElement | undefined"
2407
+ "text": "HTMLSlotElement | undefined"
2058
2408
  },
2059
- "privacy": "private"
2409
+ "privacy": "private",
2410
+ "description": "Reference to the slot element to access assignedNodes"
2060
2411
  },
2061
2412
  {
2062
2413
  "kind": "field",
2063
- "name": "resolvePromise",
2414
+ "name": "slottedElement",
2064
2415
  "type": {
2065
- "text": "(result: PopupResult) => void | undefined"
2416
+ "text": "Element | undefined"
2066
2417
  },
2067
- "privacy": "private"
2418
+ "privacy": "private",
2419
+ "description": "The original slotted element (e.g., <h3 slot=\"header\">)"
2068
2420
  },
2069
2421
  {
2070
2422
  "kind": "field",
2071
- "name": "handleDialogCancel",
2423
+ "name": "disconnectModeObserver",
2424
+ "type": {
2425
+ "text": "() => void | undefined"
2426
+ },
2072
2427
  "privacy": "private"
2073
2428
  },
2429
+ {
2430
+ "kind": "field",
2431
+ "name": "isUpdating",
2432
+ "type": {
2433
+ "text": "boolean"
2434
+ },
2435
+ "privacy": "private",
2436
+ "default": "false",
2437
+ "description": "Flag to prevent re-reading content right after we updated it"
2438
+ },
2074
2439
  {
2075
2440
  "kind": "method",
2076
- "name": "show",
2441
+ "name": "readSlottedContent",
2442
+ "privacy": "private",
2443
+ "description": "Read content from slotted elements via assignedNodes()"
2444
+ },
2445
+ {
2446
+ "kind": "method",
2447
+ "name": "validateHtml",
2448
+ "privacy": "private",
2077
2449
  "return": {
2078
2450
  "type": {
2079
- "text": "Promise<PopupResult>"
2451
+ "text": "boolean"
2080
2452
  }
2081
2453
  },
2082
- "description": "Opens the popup and returns a promise that resolves when closed"
2083
- },
2084
- {
2085
- "kind": "method",
2086
- "name": "hide",
2087
2454
  "parameters": [
2088
2455
  {
2089
- "name": "confirmed",
2090
- "default": "false",
2456
+ "name": "html",
2091
2457
  "type": {
2092
- "text": "boolean"
2458
+ "text": "string"
2093
2459
  }
2094
2460
  }
2095
2461
  ],
2096
- "description": "Closes the popup with a result"
2097
- },
2098
- {
2099
- "kind": "field",
2100
- "name": "handleConfirm",
2101
- "privacy": "private"
2102
- },
2103
- {
2104
- "kind": "field",
2105
- "name": "handleCancel",
2106
- "privacy": "private"
2462
+ "description": "Validates if a string contains valid HTML"
2107
2463
  },
2108
2464
  {
2109
2465
  "kind": "field",
2110
- "name": "handleBackdropClick",
2466
+ "name": "handleTextInput",
2111
2467
  "privacy": "private"
2112
2468
  },
2113
2469
  {
2114
- "kind": "field",
2115
- "name": "handleInputChange",
2116
- "privacy": "private"
2470
+ "kind": "method",
2471
+ "name": "createSlottedElement",
2472
+ "privacy": "private",
2473
+ "description": "Create a new slotted element when none exists.\nThe element is appended to the host component's light DOM."
2117
2474
  },
2118
2475
  {
2119
- "kind": "field",
2120
- "name": "handleKeyDown",
2121
- "privacy": "private"
2476
+ "kind": "method",
2477
+ "name": "loadAvailableComponents",
2478
+ "privacy": "private",
2479
+ "description": "Load available components from Custom Elements Manifest"
2122
2480
  },
2123
2481
  {
2124
2482
  "kind": "method",
2125
- "name": "hasSlot",
2483
+ "name": "formatComponentName",
2126
2484
  "privacy": "private",
2127
2485
  "return": {
2128
2486
  "type": {
2129
- "text": "boolean"
2487
+ "text": "string"
2130
2488
  }
2131
2489
  },
2132
2490
  "parameters": [
2133
2491
  {
2134
- "name": "name",
2492
+ "name": "tagName",
2135
2493
  "type": {
2136
2494
  "text": "string"
2137
2495
  }
2138
2496
  }
2139
- ]
2497
+ ],
2498
+ "description": "Format a tag name into a display name\ne.g., 'le-card' -> 'Card'"
2140
2499
  },
2141
2500
  {
2142
2501
  "kind": "method",
2143
- "name": "renderHeader",
2144
- "privacy": "private"
2502
+ "name": "addComponent",
2503
+ "privacy": "private",
2504
+ "parameters": [
2505
+ {
2506
+ "name": "tagName",
2507
+ "type": {
2508
+ "text": "string"
2509
+ }
2510
+ }
2511
+ ],
2512
+ "description": "Add a new component to the slot"
2145
2513
  },
2146
2514
  {
2147
- "kind": "method",
2148
- "name": "renderBody",
2149
- "privacy": "private"
2515
+ "kind": "field",
2516
+ "name": "handleSlotChange",
2517
+ "privacy": "private",
2518
+ "description": "Handle slot change event to re-read content when nodes are assigned"
2150
2519
  },
2151
2520
  {
2152
2521
  "kind": "method",
2153
- "name": "renderFooter",
2154
- "privacy": "private"
2522
+ "name": "render"
2155
2523
  },
2156
2524
  {
2157
2525
  "kind": "method",
2158
- "name": "render"
2526
+ "name": "renderContent",
2527
+ "privacy": "private"
2159
2528
  }
2160
2529
  ],
2161
2530
  "attributes": [
2162
- {
2163
- "name": "open",
2164
- "fieldName": "open",
2165
- "default": "false",
2166
- "description": "Whether the popup is currently visible",
2167
- "type": {
2168
- "text": "boolean"
2169
- }
2170
- },
2171
2531
  {
2172
2532
  "name": "type",
2173
2533
  "fieldName": "type",
2174
- "default": "'alert'",
2175
- "description": "Type of popup: alert (OK only), confirm (OK/Cancel), prompt (input + OK/Cancel), custom",
2534
+ "default": "'slot'",
2535
+ "description": "The type of slot content.\n- `slot`: Default, shows a dropzone for components (default)\n- `text`: Shows a single-line text input\n- `textarea`: Shows a multi-line text area",
2176
2536
  "type": {
2177
- "text": "PopupType"
2537
+ "text": "'slot' | 'text' | 'textarea'"
2178
2538
  }
2179
2539
  },
2180
2540
  {
2181
- "name": "popup-title",
2182
- "fieldName": "popupTitle",
2183
- "description": "Optional title for the popup header",
2541
+ "name": "name",
2542
+ "fieldName": "name",
2543
+ "default": "''",
2544
+ "description": "The name of the slot this placeholder represents.\nShould match the slot name in the parent component.",
2184
2545
  "type": {
2185
2546
  "text": "string"
2186
2547
  }
2187
2548
  },
2188
2549
  {
2189
- "name": "message",
2190
- "fieldName": "message",
2191
- "description": "Message text to display (for alert/confirm/prompt types)",
2550
+ "name": "label",
2551
+ "fieldName": "label",
2552
+ "description": "Label to display in admin mode.\nIf not provided, the slot name will be used.",
2192
2553
  "type": {
2193
2554
  "text": "string"
2194
2555
  }
2195
2556
  },
2196
2557
  {
2197
- "name": "modal",
2198
- "fieldName": "modal",
2199
- "default": "true",
2200
- "description": "Whether the popup is modal (blocks interaction with page behind)",
2558
+ "name": "description",
2559
+ "fieldName": "description",
2560
+ "description": "Description of what content this slot accepts.\nShown in admin mode to guide content editors.",
2201
2561
  "type": {
2202
- "text": "boolean"
2562
+ "text": "string"
2203
2563
  }
2204
2564
  },
2205
2565
  {
2206
- "name": "position",
2207
- "fieldName": "position",
2208
- "default": "'center'",
2209
- "description": "Position of the popup on screen",
2566
+ "name": "allowed-components",
2567
+ "fieldName": "allowedComponents",
2568
+ "description": "Comma-separated list of allowed component tags for this slot.\nUsed by CMS to filter available components.",
2210
2569
  "type": {
2211
- "text": "PopupPosition"
2570
+ "text": "string"
2212
2571
  }
2213
2572
  },
2214
2573
  {
2215
- "name": "confirm-text",
2216
- "fieldName": "confirmText",
2217
- "default": "'OK'",
2218
- "description": "Text for the confirm/OK button",
2574
+ "name": "multiple",
2575
+ "fieldName": "multiple",
2576
+ "default": "true",
2577
+ "description": "Whether multiple components can be dropped in this slot.",
2219
2578
  "type": {
2220
- "text": "string"
2579
+ "text": "boolean"
2221
2580
  }
2222
2581
  },
2223
2582
  {
2224
- "name": "cancel-text",
2225
- "fieldName": "cancelText",
2226
- "default": "'Cancel'",
2227
- "description": "Text for the cancel button",
2583
+ "name": "required",
2584
+ "fieldName": "required",
2585
+ "default": "false",
2586
+ "description": "Whether this slot is required to have content.",
2228
2587
  "type": {
2229
- "text": "string"
2588
+ "text": "boolean"
2230
2589
  }
2231
2590
  },
2232
2591
  {
2233
2592
  "name": "placeholder",
2234
2593
  "fieldName": "placeholder",
2235
- "default": "''",
2236
- "description": "Placeholder text for prompt input",
2594
+ "description": "Placeholder text for text/textarea inputs in admin mode.",
2237
2595
  "type": {
2238
2596
  "text": "string"
2239
2597
  }
2240
2598
  },
2241
2599
  {
2242
- "name": "default-value",
2243
- "fieldName": "defaultValue",
2244
- "default": "''",
2245
- "description": "Default value for prompt input",
2600
+ "name": "tag",
2601
+ "fieldName": "tag",
2602
+ "description": "The HTML tag to create when there's no slotted element.\nUsed with type=\"text\" or type=\"textarea\" to auto-create elements.",
2246
2603
  "type": {
2247
2604
  "text": "string"
2248
2605
  }
2249
2606
  },
2250
2607
  {
2251
- "name": "close-on-backdrop",
2252
- "fieldName": "closeOnBackdrop",
2253
- "default": "true",
2254
- "description": "Whether clicking the backdrop closes the popup (modal only)",
2608
+ "name": "slot-style",
2609
+ "fieldName": "slotStyle",
2610
+ "description": "CSS styles for the slot dropzone container.\nUseful for layouts - e.g., \"flex-direction: row\" for horizontal stacks.\nOnly applies in admin mode for type=\"slot\".",
2255
2611
  "type": {
2256
- "text": "boolean"
2612
+ "text": "string"
2257
2613
  }
2258
2614
  }
2259
2615
  ],
2260
- "tagName": "le-popup",
2616
+ "tagName": "le-slot",
2261
2617
  "events": [
2262
2618
  {
2263
- "name": "leConfirm",
2264
- "type": {
2265
- "text": "EventEmitter<PopupResult>"
2266
- },
2267
- "description": "Emitted when the popup is confirmed (OK clicked)"
2268
- },
2269
- {
2270
- "name": "leCancel",
2271
- "type": {
2272
- "text": "EventEmitter<PopupResult>"
2273
- },
2274
- "description": "Emitted when the popup is cancelled (Cancel clicked or dismissed)"
2275
- },
2276
- {
2277
- "name": "leOpen",
2278
- "type": {
2279
- "text": "EventEmitter<void>"
2280
- },
2281
- "description": "Emitted when the popup opens"
2282
- },
2283
- {
2284
- "name": "leClose",
2619
+ "name": "leSlotChange",
2285
2620
  "type": {
2286
- "text": "EventEmitter<PopupResult>"
2621
+ "text": "EventEmitter<{ name: string; value: string; isValid: boolean }>"
2287
2622
  },
2288
- "description": "Emitted when the popup closes"
2623
+ "description": "Emitted when text content changes in admin mode.\nThe event detail contains the new text value and validity."
2289
2624
  }
2290
2625
  ],
2291
2626
  "customElement": true
@@ -2294,30 +2629,30 @@
2294
2629
  "exports": [
2295
2630
  {
2296
2631
  "kind": "js",
2297
- "name": "LePopup",
2632
+ "name": "LeSlot",
2298
2633
  "declaration": {
2299
- "name": "LePopup",
2300
- "module": "src/components/le-popup/le-popup.tsx"
2634
+ "name": "LeSlot",
2635
+ "module": "src/components/le-slot/le-slot.tsx"
2301
2636
  }
2302
2637
  },
2303
2638
  {
2304
2639
  "kind": "custom-element-definition",
2305
- "name": "le-popup",
2640
+ "name": "le-slot",
2306
2641
  "declaration": {
2307
- "name": "LePopup",
2308
- "module": "src/components/le-popup/le-popup.tsx"
2642
+ "name": "LeSlot",
2643
+ "module": "src/components/le-slot/le-slot.tsx"
2309
2644
  }
2310
2645
  }
2311
2646
  ]
2312
2647
  },
2313
2648
  {
2314
2649
  "kind": "javascript-module",
2315
- "path": "src/components/le-number-input/le-number-input.tsx",
2650
+ "path": "src/components/le-string-input/le-string-input.tsx",
2316
2651
  "declarations": [
2317
2652
  {
2318
2653
  "kind": "class",
2319
- "description": "A number input component with validation, keyboard controls, and custom spinners.",
2320
- "name": "LeNumberInput",
2654
+ "description": "A text input component with support for labels, descriptions, icons, and external IDs.",
2655
+ "name": "LeStringInput",
2321
2656
  "cssProperties": [
2322
2657
  {
2323
2658
  "description": "Input background color",
@@ -2335,10 +2670,6 @@
2335
2670
  "description": "Input border style when focused",
2336
2671
  "name": "--le-input-border-focus"
2337
2672
  },
2338
- {
2339
- "description": "Input border style when invalid",
2340
- "name": "--le-input-border-error"
2341
- },
2342
2673
  {
2343
2674
  "description": "Input border radius",
2344
2675
  "name": "--le-input-radius"
@@ -2360,6 +2691,10 @@
2360
2691
  {
2361
2692
  "description": "Icon to display at the start of the input",
2362
2693
  "name": "icon-start"
2694
+ },
2695
+ {
2696
+ "description": "Icon to display at the end of the input",
2697
+ "name": "icon-end"
2363
2698
  }
2364
2699
  ],
2365
2700
  "members": [
@@ -2372,163 +2707,94 @@
2372
2707
  },
2373
2708
  {
2374
2709
  "kind": "field",
2375
- "name": "value",
2376
- "type": {
2377
- "text": "number"
2378
- },
2379
- "description": "The value of the input"
2380
- },
2381
- {
2382
- "kind": "field",
2383
- "name": "name",
2710
+ "name": "mode",
2384
2711
  "type": {
2385
- "text": "string"
2712
+ "text": "'default' | 'admin'"
2386
2713
  },
2387
- "description": "The name of the input"
2714
+ "description": "Mode of the popover should be 'default' for internal use"
2388
2715
  },
2389
2716
  {
2390
2717
  "kind": "field",
2391
- "name": "label",
2718
+ "name": "value",
2392
2719
  "type": {
2393
2720
  "text": "string"
2394
2721
  },
2395
- "description": "Label for the input"
2722
+ "description": "The value of the input"
2396
2723
  },
2397
2724
  {
2398
2725
  "kind": "field",
2399
- "name": "placeholder",
2726
+ "name": "name",
2400
2727
  "type": {
2401
2728
  "text": "string"
2402
2729
  },
2403
- "description": "Placeholder text"
2404
- },
2405
- {
2406
- "kind": "field",
2407
- "name": "min",
2408
- "type": {
2409
- "text": "number | undefined"
2410
- },
2411
- "description": "Minimum allowed value"
2412
- },
2413
- {
2414
- "kind": "field",
2415
- "name": "max",
2416
- "type": {
2417
- "text": "number | undefined"
2418
- },
2419
- "description": "Maximum allowed value"
2420
- },
2421
- {
2422
- "kind": "field",
2423
- "name": "step",
2424
- "type": {
2425
- "text": "number"
2426
- },
2427
- "default": "1",
2428
- "description": "Step value for increment/decrement"
2429
- },
2430
- {
2431
- "kind": "field",
2432
- "name": "required",
2433
- "type": {
2434
- "text": "boolean"
2435
- },
2436
- "default": "false",
2437
- "description": "Whether the input is required"
2730
+ "description": "The name of the input"
2438
2731
  },
2439
2732
  {
2440
2733
  "kind": "field",
2441
- "name": "disabled",
2734
+ "name": "type",
2442
2735
  "type": {
2443
- "text": "boolean"
2736
+ "text": "'text' | 'email' | 'password' | 'tel' | 'url'"
2444
2737
  },
2445
- "default": "false",
2446
- "description": "Whether the input is disabled"
2738
+ "default": "'text'",
2739
+ "description": "The type of the input (text, email, password, etc.)"
2447
2740
  },
2448
2741
  {
2449
2742
  "kind": "field",
2450
- "name": "readonly",
2743
+ "name": "label",
2451
2744
  "type": {
2452
- "text": "boolean"
2745
+ "text": "string"
2453
2746
  },
2454
- "default": "false",
2455
- "description": "Whether the input is read-only"
2747
+ "description": "Label for the input"
2456
2748
  },
2457
2749
  {
2458
2750
  "kind": "field",
2459
2751
  "name": "iconStart",
2460
2752
  "type": {
2461
- "text": "string | undefined"
2753
+ "text": "string"
2462
2754
  },
2463
2755
  "description": "Icon for the start icon"
2464
2756
  },
2465
2757
  {
2466
2758
  "kind": "field",
2467
- "name": "showSpinners",
2759
+ "name": "iconEnd",
2468
2760
  "type": {
2469
- "text": "boolean"
2761
+ "text": "string"
2470
2762
  },
2471
- "default": "true",
2472
- "description": "Whether to show the spinner controls"
2763
+ "description": "Icon for the end icon"
2473
2764
  },
2474
2765
  {
2475
2766
  "kind": "field",
2476
- "name": "externalId",
2767
+ "name": "placeholder",
2477
2768
  "type": {
2478
2769
  "text": "string"
2479
2770
  },
2480
- "description": "External ID for linking with external systems"
2771
+ "description": "Placeholder text"
2481
2772
  },
2482
2773
  {
2483
2774
  "kind": "field",
2484
- "name": "isValid",
2775
+ "name": "disabled",
2485
2776
  "type": {
2486
2777
  "text": "boolean"
2487
2778
  },
2488
- "privacy": "private",
2489
- "default": "true",
2490
- "description": "Internal validation state"
2779
+ "default": "false",
2780
+ "description": "Whether the input is disabled"
2491
2781
  },
2492
2782
  {
2493
2783
  "kind": "field",
2494
- "name": "validationMessage",
2784
+ "name": "readonly",
2495
2785
  "type": {
2496
- "text": "string"
2786
+ "text": "boolean"
2497
2787
  },
2498
- "privacy": "private",
2499
- "default": "''"
2500
- },
2501
- {
2502
- "kind": "method",
2503
- "name": "valueChanged"
2504
- },
2505
- {
2506
- "kind": "method",
2507
- "name": "validate",
2508
- "privacy": "private"
2509
- },
2510
- {
2511
- "kind": "method",
2512
- "name": "emitChange",
2513
- "privacy": "private"
2514
- },
2515
- {
2516
- "kind": "method",
2517
- "name": "emitInput",
2518
- "privacy": "private"
2788
+ "default": "false",
2789
+ "description": "Whether the input is read-only"
2519
2790
  },
2520
2791
  {
2521
- "kind": "method",
2522
- "name": "updateValue",
2523
- "privacy": "private",
2524
- "parameters": [
2525
- {
2526
- "name": "newValue",
2527
- "type": {
2528
- "text": "number"
2529
- }
2530
- }
2531
- ]
2792
+ "kind": "field",
2793
+ "name": "externalId",
2794
+ "type": {
2795
+ "text": "string"
2796
+ },
2797
+ "description": "External ID for linking with external systems"
2532
2798
  },
2533
2799
  {
2534
2800
  "kind": "field",
@@ -2542,22 +2808,7 @@
2542
2808
  },
2543
2809
  {
2544
2810
  "kind": "field",
2545
- "name": "handleKeyDown",
2546
- "privacy": "private"
2547
- },
2548
- {
2549
- "kind": "field",
2550
- "name": "handleWheel",
2551
- "privacy": "private"
2552
- },
2553
- {
2554
- "kind": "field",
2555
- "name": "increment",
2556
- "privacy": "private"
2557
- },
2558
- {
2559
- "kind": "field",
2560
- "name": "decrement",
2811
+ "name": "handleClick",
2561
2812
  "privacy": "private"
2562
2813
  },
2563
2814
  {
@@ -2566,12 +2817,20 @@
2566
2817
  }
2567
2818
  ],
2568
2819
  "attributes": [
2820
+ {
2821
+ "name": "mode",
2822
+ "fieldName": "mode",
2823
+ "description": "Mode of the popover should be 'default' for internal use",
2824
+ "type": {
2825
+ "text": "'default' | 'admin'"
2826
+ }
2827
+ },
2569
2828
  {
2570
2829
  "name": "value",
2571
2830
  "fieldName": "value",
2572
2831
  "description": "The value of the input",
2573
2832
  "type": {
2574
- "text": "number"
2833
+ "text": "string"
2575
2834
  }
2576
2835
  },
2577
2836
  {
@@ -2583,53 +2842,44 @@
2583
2842
  }
2584
2843
  },
2585
2844
  {
2586
- "name": "label",
2587
- "fieldName": "label",
2588
- "description": "Label for the input",
2845
+ "name": "type",
2846
+ "fieldName": "type",
2847
+ "default": "'text'",
2848
+ "description": "The type of the input (text, email, password, etc.)",
2589
2849
  "type": {
2590
- "text": "string"
2850
+ "text": "'text' | 'email' | 'password' | 'tel' | 'url'"
2591
2851
  }
2592
2852
  },
2593
2853
  {
2594
- "name": "placeholder",
2595
- "fieldName": "placeholder",
2596
- "description": "Placeholder text",
2854
+ "name": "label",
2855
+ "fieldName": "label",
2856
+ "description": "Label for the input",
2597
2857
  "type": {
2598
2858
  "text": "string"
2599
2859
  }
2600
2860
  },
2601
2861
  {
2602
- "name": "min",
2603
- "fieldName": "min",
2604
- "description": "Minimum allowed value",
2605
- "type": {
2606
- "text": "number"
2607
- }
2608
- },
2609
- {
2610
- "name": "max",
2611
- "fieldName": "max",
2612
- "description": "Maximum allowed value",
2862
+ "name": "icon-start",
2863
+ "fieldName": "iconStart",
2864
+ "description": "Icon for the start icon",
2613
2865
  "type": {
2614
- "text": "number"
2866
+ "text": "string"
2615
2867
  }
2616
2868
  },
2617
2869
  {
2618
- "name": "step",
2619
- "fieldName": "step",
2620
- "default": "1",
2621
- "description": "Step value for increment/decrement",
2870
+ "name": "icon-end",
2871
+ "fieldName": "iconEnd",
2872
+ "description": "Icon for the end icon",
2622
2873
  "type": {
2623
- "text": "number"
2874
+ "text": "string"
2624
2875
  }
2625
2876
  },
2626
2877
  {
2627
- "name": "required",
2628
- "fieldName": "required",
2629
- "default": "false",
2630
- "description": "Whether the input is required",
2878
+ "name": "placeholder",
2879
+ "fieldName": "placeholder",
2880
+ "description": "Placeholder text",
2631
2881
  "type": {
2632
- "text": "boolean"
2882
+ "text": "string"
2633
2883
  }
2634
2884
  },
2635
2885
  {
@@ -2650,23 +2900,6 @@
2650
2900
  "text": "boolean"
2651
2901
  }
2652
2902
  },
2653
- {
2654
- "name": "icon-start",
2655
- "fieldName": "iconStart",
2656
- "description": "Icon for the start icon",
2657
- "type": {
2658
- "text": "string"
2659
- }
2660
- },
2661
- {
2662
- "name": "show-spinners",
2663
- "fieldName": "showSpinners",
2664
- "default": "true",
2665
- "description": "Whether to show the spinner controls",
2666
- "type": {
2667
- "text": "boolean"
2668
- }
2669
- },
2670
2903
  {
2671
2904
  "name": "external-id",
2672
2905
  "fieldName": "externalId",
@@ -2676,21 +2909,21 @@
2676
2909
  }
2677
2910
  }
2678
2911
  ],
2679
- "tagName": "le-number-input",
2912
+ "tagName": "le-string-input",
2680
2913
  "events": [
2681
2914
  {
2682
- "name": "leChange",
2915
+ "name": "change",
2683
2916
  "type": {
2684
- "text": "EventEmitter<{ value: number; name: string; externalId: string; isValid: boolean }>"
2917
+ "text": "EventEmitter<{ value: string; name: string; externalId: string }>"
2685
2918
  },
2686
2919
  "description": "Emitted when the value changes (on blur or Enter)"
2687
2920
  },
2688
2921
  {
2689
- "name": "leInput",
2922
+ "name": "input",
2690
2923
  "type": {
2691
- "text": "EventEmitter<{ value: number; name: string; externalId: string; isValid: boolean }>"
2924
+ "text": "EventEmitter<{ value: string; name: string; externalId: string }>"
2692
2925
  },
2693
- "description": "Emitted when the input value changes (on keystroke/spin)"
2926
+ "description": "Emitted when the input value changes (on keystroke)"
2694
2927
  }
2695
2928
  ],
2696
2929
  "customElement": true
@@ -2699,33 +2932,33 @@
2699
2932
  "exports": [
2700
2933
  {
2701
2934
  "kind": "js",
2702
- "name": "LeNumberInput",
2935
+ "name": "LeStringInput",
2703
2936
  "declaration": {
2704
- "name": "LeNumberInput",
2705
- "module": "src/components/le-number-input/le-number-input.tsx"
2937
+ "name": "LeStringInput",
2938
+ "module": "src/components/le-string-input/le-string-input.tsx"
2706
2939
  }
2707
2940
  },
2708
2941
  {
2709
2942
  "kind": "custom-element-definition",
2710
- "name": "le-number-input",
2943
+ "name": "le-string-input",
2711
2944
  "declaration": {
2712
- "name": "LeNumberInput",
2713
- "module": "src/components/le-number-input/le-number-input.tsx"
2945
+ "name": "LeStringInput",
2946
+ "module": "src/components/le-string-input/le-string-input.tsx"
2714
2947
  }
2715
2948
  }
2716
2949
  ]
2717
2950
  },
2718
2951
  {
2719
2952
  "kind": "javascript-module",
2720
- "path": "src/components/le-slot/le-slot.tsx",
2953
+ "path": "src/components/le-component/le-component.tsx",
2721
2954
  "declarations": [
2722
2955
  {
2723
2956
  "kind": "class",
2724
- "description": "Slot placeholder component for admin/CMS mode.\n\nThis component renders a visual placeholder for slots when in admin mode,\nallowing CMS systems to show available drop zones for content or inline editing.\n\nIn non-admin mode, this component renders nothing and acts as a passthrough.",
2725
- "name": "LeSlot",
2957
+ "description": "Component wrapper for admin mode editing.\n\nThis component is used internally by other components to provide admin-mode\nediting capabilities. It wraps the component's rendered output and shows\na settings popover for editing properties.\n\nIn default mode, it acts as a simple passthrough (display: contents).\nIn admin mode, it shows a border, component name header, and settings popover.\n\nThe host element is found automatically by traversing up through the shadow DOM.\n\nUsage inside a component's render method:\n```tsx\nrender() {\n return (\n <le-component component=\"le-card\">\n <Host>...</Host>\n </le-component>\n );\n}\n```",
2958
+ "name": "LeComponent",
2726
2959
  "slots": [
2727
2960
  {
2728
- "description": "Default slot for placeholder content or drop zone UI",
2961
+ "description": "The component's rendered content",
2729
2962
  "name": ""
2730
2963
  }
2731
2964
  ],
@@ -2734,160 +2967,79 @@
2734
2967
  "kind": "field",
2735
2968
  "name": "el",
2736
2969
  "type": {
2737
- "text": "HTMLElement"
2738
- }
2739
- },
2740
- {
2741
- "kind": "field",
2742
- "name": "type",
2743
- "type": {
2744
- "text": "'slot' | 'text' | 'textarea'"
2745
- },
2746
- "default": "'slot'",
2747
- "description": "The type of slot content.\n- `slot`: Default, shows a dropzone for components (default)\n- `text`: Shows a single-line text input\n- `textarea`: Shows a multi-line text area"
2748
- },
2749
- {
2750
- "kind": "field",
2751
- "name": "name",
2752
- "type": {
2753
- "text": "string"
2754
- },
2755
- "default": "''",
2756
- "description": "The name of the slot this placeholder represents.\nShould match the slot name in the parent component."
2757
- },
2758
- {
2759
- "kind": "field",
2760
- "name": "label",
2761
- "type": {
2762
- "text": "string | undefined"
2763
- },
2764
- "description": "Label to display in admin mode.\nIf not provided, the slot name will be used."
2765
- },
2766
- {
2767
- "kind": "field",
2768
- "name": "description",
2769
- "type": {
2770
- "text": "string | undefined"
2771
- },
2772
- "description": "Description of what content this slot accepts.\nShown in admin mode to guide content editors."
2773
- },
2774
- {
2775
- "kind": "field",
2776
- "name": "allowedComponents",
2777
- "type": {
2778
- "text": "string | undefined"
2779
- },
2780
- "description": "Comma-separated list of allowed component tags for this slot.\nUsed by CMS to filter available components."
2781
- },
2782
- {
2783
- "kind": "field",
2784
- "name": "multiple",
2785
- "type": {
2786
- "text": "boolean"
2787
- },
2788
- "default": "true",
2789
- "description": "Whether multiple components can be dropped in this slot."
2790
- },
2791
- {
2792
- "kind": "field",
2793
- "name": "required",
2794
- "type": {
2795
- "text": "boolean"
2796
- },
2797
- "default": "false",
2798
- "description": "Whether this slot is required to have content."
2799
- },
2800
- {
2801
- "kind": "field",
2802
- "name": "placeholder",
2803
- "type": {
2804
- "text": "string | undefined"
2805
- },
2806
- "description": "Placeholder text for text/textarea inputs in admin mode."
2807
- },
2808
- {
2809
- "kind": "field",
2810
- "name": "tag",
2811
- "type": {
2812
- "text": "string | undefined"
2813
- },
2814
- "description": "The HTML tag to create when there's no slotted element.\nUsed with type=\"text\" or type=\"textarea\" to auto-create elements."
2970
+ "text": "HTMLElement"
2971
+ }
2815
2972
  },
2816
2973
  {
2817
2974
  "kind": "field",
2818
- "name": "slotStyle",
2975
+ "name": "component",
2819
2976
  "type": {
2820
- "text": "string | undefined"
2977
+ "text": "string"
2821
2978
  },
2822
- "description": "CSS styles for the slot dropzone container.\nUseful for layouts - e.g., \"flex-direction: row\" for horizontal stacks.\nOnly applies in admin mode for type=\"slot\"."
2979
+ "description": "The tag name of the component (e.g., 'le-card').\nUsed to look up property metadata and display the component name."
2823
2980
  },
2824
2981
  {
2825
2982
  "kind": "field",
2826
- "name": "adminMode",
2983
+ "name": "displayName",
2827
2984
  "type": {
2828
- "text": "boolean"
2985
+ "text": "string | undefined"
2829
2986
  },
2830
- "privacy": "private",
2831
- "default": "false",
2832
- "description": "Internal state to track admin mode"
2987
+ "description": "Optional display name for the component.\nIf not provided, the tag name will be formatted as the display name."
2833
2988
  },
2834
2989
  {
2835
2990
  "kind": "field",
2836
- "name": "textValue",
2991
+ "name": "hostClass",
2837
2992
  "type": {
2838
- "text": "string"
2993
+ "text": "string | undefined"
2839
2994
  },
2840
- "privacy": "private",
2841
- "default": "''",
2842
- "description": "Internal state for text input value (synced from slot content)"
2995
+ "description": "Classes to apply to the host element.\nAllows parent components to pass their styling classes."
2843
2996
  },
2844
2997
  {
2845
2998
  "kind": "field",
2846
- "name": "isValidHtml",
2999
+ "name": "hostStyle",
2847
3000
  "type": {
2848
- "text": "boolean"
3001
+ "text": "{ [key: string]: string } | undefined"
2849
3002
  },
2850
- "privacy": "private",
2851
- "default": "true",
2852
- "description": "Whether the current textValue contains valid HTML"
3003
+ "description": "Inline styles to apply to the host element.\nAllows parent components to pass dynamic styles (e.g., flex properties)."
2853
3004
  },
2854
3005
  {
2855
3006
  "kind": "field",
2856
- "name": "availableComponents",
3007
+ "name": "hostElement",
2857
3008
  "type": {
2858
- "text": "ComponentInfo[]"
3009
+ "text": "HTMLElement | undefined"
2859
3010
  },
2860
3011
  "privacy": "private",
2861
- "default": "[]",
2862
- "description": "Available components loaded from Custom Elements Manifest"
3012
+ "description": "Reference to the host element (found automatically from parent)"
2863
3013
  },
2864
3014
  {
2865
3015
  "kind": "field",
2866
- "name": "pickerOpen",
3016
+ "name": "adminMode",
2867
3017
  "type": {
2868
3018
  "text": "boolean"
2869
3019
  },
2870
3020
  "privacy": "private",
2871
3021
  "default": "false",
2872
- "description": "Whether the component picker popover is open"
3022
+ "description": "Internal state to track admin mode"
2873
3023
  },
2874
3024
  {
2875
3025
  "kind": "field",
2876
- "name": "slotRef",
3026
+ "name": "componentMeta",
2877
3027
  "type": {
2878
- "text": "HTMLSlotElement | undefined"
3028
+ "text": "ComponentMetadata | null"
2879
3029
  },
2880
3030
  "privacy": "private",
2881
- "description": "Reference to the slot element to access assignedNodes"
3031
+ "default": "null",
3032
+ "description": "Component metadata loaded from Custom Elements Manifest"
2882
3033
  },
2883
3034
  {
2884
3035
  "kind": "field",
2885
- "name": "slottedElement",
3036
+ "name": "propertyValues",
2886
3037
  "type": {
2887
- "text": "Element | undefined"
3038
+ "text": "Record<string, any>"
2888
3039
  },
2889
3040
  "privacy": "private",
2890
- "description": "The original slotted element (e.g., <h3 slot=\"header\">)"
3041
+ "default": "{}",
3042
+ "description": "Current property values of the host component"
2891
3043
  },
2892
3044
  {
2893
3045
  "kind": "field",
@@ -2897,221 +3049,200 @@
2897
3049
  },
2898
3050
  "privacy": "private"
2899
3051
  },
2900
- {
2901
- "kind": "field",
2902
- "name": "isUpdating",
2903
- "type": {
2904
- "text": "boolean"
2905
- },
2906
- "privacy": "private",
2907
- "default": "false",
2908
- "description": "Flag to prevent re-reading content right after we updated it"
2909
- },
2910
3052
  {
2911
3053
  "kind": "method",
2912
- "name": "readSlottedContent",
3054
+ "name": "findHostElement",
2913
3055
  "privacy": "private",
2914
- "description": "Read content from slotted elements via assignedNodes()"
3056
+ "description": "Find the host element by traversing up through shadow DOM"
2915
3057
  },
2916
3058
  {
2917
3059
  "kind": "method",
2918
- "name": "validateHtml",
3060
+ "name": "formatDisplayName",
2919
3061
  "privacy": "private",
2920
3062
  "return": {
2921
3063
  "type": {
2922
- "text": "boolean"
3064
+ "text": "string"
2923
3065
  }
2924
3066
  },
2925
3067
  "parameters": [
2926
3068
  {
2927
- "name": "html",
3069
+ "name": "tagName",
2928
3070
  "type": {
2929
3071
  "text": "string"
2930
3072
  }
2931
3073
  }
2932
3074
  ],
2933
- "description": "Validates if a string contains valid HTML"
3075
+ "description": "Formats a tag name into a display name\ne.g., 'le-card' -> 'Card'"
2934
3076
  },
2935
3077
  {
2936
- "kind": "field",
2937
- "name": "handleTextInput",
2938
- "privacy": "private"
3078
+ "kind": "method",
3079
+ "name": "loadComponentMetadata",
3080
+ "privacy": "private",
3081
+ "description": "Load component metadata from the Custom Elements Manifest"
2939
3082
  },
2940
3083
  {
2941
3084
  "kind": "method",
2942
- "name": "createSlottedElement",
3085
+ "name": "isInternalAttribute",
2943
3086
  "privacy": "private",
2944
- "description": "Create a new slotted element when none exists.\nThe element is appended to the host component's light DOM."
3087
+ "return": {
3088
+ "type": {
3089
+ "text": "boolean"
3090
+ }
3091
+ },
3092
+ "parameters": [
3093
+ {
3094
+ "name": "name",
3095
+ "type": {
3096
+ "text": "string"
3097
+ }
3098
+ }
3099
+ ],
3100
+ "description": "Check if an attribute is internal (should not be shown in editor)"
2945
3101
  },
2946
3102
  {
2947
3103
  "kind": "method",
2948
- "name": "loadAvailableComponents",
3104
+ "name": "readPropertyValues",
2949
3105
  "privacy": "private",
2950
- "description": "Load available components from Custom Elements Manifest"
3106
+ "description": "Read current property values from the host element"
2951
3107
  },
2952
3108
  {
2953
3109
  "kind": "method",
2954
- "name": "formatComponentName",
3110
+ "name": "parseAttributeValue",
2955
3111
  "privacy": "private",
2956
3112
  "return": {
2957
3113
  "type": {
2958
- "text": "string"
3114
+ "text": "any"
2959
3115
  }
2960
3116
  },
2961
3117
  "parameters": [
2962
3118
  {
2963
- "name": "tagName",
3119
+ "name": "value",
3120
+ "type": {
3121
+ "text": "string | null"
3122
+ }
3123
+ },
3124
+ {
3125
+ "name": "type",
3126
+ "optional": true,
2964
3127
  "type": {
2965
3128
  "text": "string"
2966
3129
  }
2967
3130
  }
2968
3131
  ],
2969
- "description": "Format a tag name into a display name\ne.g., 'le-card' -> 'Card'"
3132
+ "description": "Parse an attribute value based on its type"
2970
3133
  },
2971
3134
  {
2972
3135
  "kind": "method",
2973
- "name": "addComponent",
3136
+ "name": "handlePropertyChange",
2974
3137
  "privacy": "private",
2975
3138
  "parameters": [
2976
3139
  {
2977
- "name": "tagName",
3140
+ "name": "attrName",
3141
+ "type": {
3142
+ "text": "string"
3143
+ }
3144
+ },
3145
+ {
3146
+ "name": "value",
3147
+ "type": {
3148
+ "text": "any"
3149
+ }
3150
+ },
3151
+ {
3152
+ "name": "type",
3153
+ "optional": true,
2978
3154
  "type": {
2979
3155
  "text": "string"
2980
3156
  }
2981
3157
  }
2982
3158
  ],
2983
- "description": "Add a new component to the slot"
3159
+ "description": "Handle property value changes from the editor"
2984
3160
  },
2985
3161
  {
2986
- "kind": "field",
2987
- "name": "handleSlotChange",
3162
+ "kind": "method",
3163
+ "name": "deleteComponent",
2988
3164
  "privacy": "private",
2989
- "description": "Handle slot change event to re-read content when nodes are assigned"
3165
+ "description": "Delete this component from the DOM"
2990
3166
  },
2991
3167
  {
2992
3168
  "kind": "method",
2993
- "name": "render"
3169
+ "name": "renderPropertyEditor",
3170
+ "privacy": "private",
3171
+ "description": "Render the property editor form"
2994
3172
  },
2995
3173
  {
2996
3174
  "kind": "method",
2997
- "name": "renderContent",
2998
- "privacy": "private"
3175
+ "name": "renderPropertyField",
3176
+ "privacy": "private",
3177
+ "parameters": [
3178
+ {
3179
+ "name": "attr",
3180
+ "type": {
3181
+ "text": "AttributeMetadata"
3182
+ }
3183
+ }
3184
+ ],
3185
+ "description": "Render a single property field based on its type"
3186
+ },
3187
+ {
3188
+ "kind": "method",
3189
+ "name": "render"
2999
3190
  }
3000
3191
  ],
3001
3192
  "attributes": [
3002
3193
  {
3003
- "name": "type",
3004
- "fieldName": "type",
3005
- "default": "'slot'",
3006
- "description": "The type of slot content.\n- `slot`: Default, shows a dropzone for components (default)\n- `text`: Shows a single-line text input\n- `textarea`: Shows a multi-line text area",
3007
- "type": {
3008
- "text": "'slot' | 'text' | 'textarea'"
3009
- }
3010
- },
3011
- {
3012
- "name": "name",
3013
- "fieldName": "name",
3014
- "default": "''",
3015
- "description": "The name of the slot this placeholder represents.\nShould match the slot name in the parent component.",
3016
- "type": {
3017
- "text": "string"
3018
- }
3019
- },
3020
- {
3021
- "name": "label",
3022
- "fieldName": "label",
3023
- "description": "Label to display in admin mode.\nIf not provided, the slot name will be used.",
3024
- "type": {
3025
- "text": "string"
3026
- }
3027
- },
3028
- {
3029
- "name": "description",
3030
- "fieldName": "description",
3031
- "description": "Description of what content this slot accepts.\nShown in admin mode to guide content editors.",
3032
- "type": {
3033
- "text": "string"
3034
- }
3035
- },
3036
- {
3037
- "name": "allowed-components",
3038
- "fieldName": "allowedComponents",
3039
- "description": "Comma-separated list of allowed component tags for this slot.\nUsed by CMS to filter available components.",
3040
- "type": {
3041
- "text": "string"
3042
- }
3043
- },
3044
- {
3045
- "name": "multiple",
3046
- "fieldName": "multiple",
3047
- "default": "true",
3048
- "description": "Whether multiple components can be dropped in this slot.",
3049
- "type": {
3050
- "text": "boolean"
3051
- }
3052
- },
3053
- {
3054
- "name": "required",
3055
- "fieldName": "required",
3056
- "default": "false",
3057
- "description": "Whether this slot is required to have content.",
3058
- "type": {
3059
- "text": "boolean"
3060
- }
3061
- },
3062
- {
3063
- "name": "placeholder",
3064
- "fieldName": "placeholder",
3065
- "description": "Placeholder text for text/textarea inputs in admin mode.",
3194
+ "name": "component",
3195
+ "fieldName": "component",
3196
+ "description": "The tag name of the component (e.g., 'le-card').\nUsed to look up property metadata and display the component name.",
3066
3197
  "type": {
3067
3198
  "text": "string"
3068
3199
  }
3069
3200
  },
3070
3201
  {
3071
- "name": "tag",
3072
- "fieldName": "tag",
3073
- "description": "The HTML tag to create when there's no slotted element.\nUsed with type=\"text\" or type=\"textarea\" to auto-create elements.",
3202
+ "name": "display-name",
3203
+ "fieldName": "displayName",
3204
+ "description": "Optional display name for the component.\nIf not provided, the tag name will be formatted as the display name.",
3074
3205
  "type": {
3075
3206
  "text": "string"
3076
3207
  }
3077
3208
  },
3078
3209
  {
3079
- "name": "slot-style",
3080
- "fieldName": "slotStyle",
3081
- "description": "CSS styles for the slot dropzone container.\nUseful for layouts - e.g., \"flex-direction: row\" for horizontal stacks.\nOnly applies in admin mode for type=\"slot\".",
3082
- "type": {
3083
- "text": "string"
3084
- }
3085
- }
3086
- ],
3087
- "tagName": "le-slot",
3088
- "events": [
3210
+ "name": "host-class",
3211
+ "fieldName": "hostClass",
3212
+ "description": "Classes to apply to the host element.\nAllows parent components to pass their styling classes.",
3213
+ "type": {
3214
+ "text": "string"
3215
+ }
3216
+ },
3089
3217
  {
3090
- "name": "leSlotChange",
3218
+ "name": "host-style",
3219
+ "fieldName": "hostStyle",
3220
+ "description": "Inline styles to apply to the host element.\nAllows parent components to pass dynamic styles (e.g., flex properties).",
3091
3221
  "type": {
3092
- "text": "EventEmitter<{ name: string; value: string; isValid: boolean }>"
3093
- },
3094
- "description": "Emitted when text content changes in admin mode.\nThe event detail contains the new text value and validity."
3222
+ "text": "{ [key: string]: string }"
3223
+ }
3095
3224
  }
3096
3225
  ],
3226
+ "tagName": "le-component",
3227
+ "events": [],
3097
3228
  "customElement": true
3098
3229
  }
3099
3230
  ],
3100
3231
  "exports": [
3101
3232
  {
3102
3233
  "kind": "js",
3103
- "name": "LeSlot",
3234
+ "name": "LeComponent",
3104
3235
  "declaration": {
3105
- "name": "LeSlot",
3106
- "module": "src/components/le-slot/le-slot.tsx"
3236
+ "name": "LeComponent",
3237
+ "module": "src/components/le-component/le-component.tsx"
3107
3238
  }
3108
3239
  },
3109
3240
  {
3110
3241
  "kind": "custom-element-definition",
3111
- "name": "le-slot",
3242
+ "name": "le-component",
3112
3243
  "declaration": {
3113
- "name": "LeSlot",
3114
- "module": "src/components/le-slot/le-slot.tsx"
3244
+ "name": "LeComponent",
3245
+ "module": "src/components/le-component/le-component.tsx"
3115
3246
  }
3116
3247
  }
3117
3248
  ]
@@ -3415,54 +3546,38 @@
3415
3546
  },
3416
3547
  {
3417
3548
  "kind": "javascript-module",
3418
- "path": "src/components/le-string-input/le-string-input.tsx",
3549
+ "path": "src/components/le-checkbox/le-checkbox.tsx",
3419
3550
  "declarations": [
3420
3551
  {
3421
3552
  "kind": "class",
3422
- "description": "A text input component with support for labels, descriptions, icons, and external IDs.",
3423
- "name": "LeStringInput",
3553
+ "description": "A checkbox component with support for labels, descriptions, and external IDs.",
3554
+ "name": "LeCheckbox",
3424
3555
  "cssProperties": [
3425
3556
  {
3426
- "description": "Input background color",
3427
- "name": "--le-input-bg"
3428
- },
3429
- {
3430
- "description": "Input text color",
3431
- "name": "--le-input-color"
3432
- },
3433
- {
3434
- "description": "Input border style",
3435
- "name": "--le-input-border"
3557
+ "description": "Size of the checkbox input",
3558
+ "name": "--le-checkbox-size"
3436
3559
  },
3437
3560
  {
3438
- "description": "Input border style when focused",
3439
- "name": "--le-input-border-focus"
3561
+ "description": "Color of the checkbox when checked",
3562
+ "name": "--le-checkbox-color"
3440
3563
  },
3441
3564
  {
3442
- "description": "Input border radius",
3443
- "name": "--le-input-radius"
3565
+ "description": "Color of the label text",
3566
+ "name": "--le-checkbox-label-color"
3444
3567
  },
3445
3568
  {
3446
- "description": "Input padding",
3447
- "name": "--le-input-padding"
3569
+ "description": "Color of the description text",
3570
+ "name": "--le-checkbox-desc-color"
3448
3571
  }
3449
3572
  ],
3450
3573
  "slots": [
3451
3574
  {
3452
- "description": "The label text for the input",
3575
+ "description": "The label text for the checkbox",
3453
3576
  "name": ""
3454
3577
  },
3455
3578
  {
3456
- "description": "Additional description text displayed below the input",
3579
+ "description": "Additional description text displayed below the label",
3457
3580
  "name": "description"
3458
- },
3459
- {
3460
- "description": "Icon to display at the start of the input",
3461
- "name": "icon-start"
3462
- },
3463
- {
3464
- "description": "Icon to display at the end of the input",
3465
- "name": "icon-end"
3466
3581
  }
3467
3582
  ],
3468
3583
  "members": [
@@ -3475,19 +3590,21 @@
3475
3590
  },
3476
3591
  {
3477
3592
  "kind": "field",
3478
- "name": "mode",
3593
+ "name": "checked",
3479
3594
  "type": {
3480
- "text": "'default' | 'admin'"
3595
+ "text": "boolean"
3481
3596
  },
3482
- "description": "Mode of the popover should be 'default' for internal use"
3597
+ "default": "false",
3598
+ "description": "Whether the checkbox is checked"
3483
3599
  },
3484
3600
  {
3485
3601
  "kind": "field",
3486
- "name": "value",
3602
+ "name": "disabled",
3487
3603
  "type": {
3488
- "text": "string"
3604
+ "text": "boolean"
3489
3605
  },
3490
- "description": "The value of the input"
3606
+ "default": "false",
3607
+ "description": "Whether the checkbox is disabled"
3491
3608
  },
3492
3609
  {
3493
3610
  "kind": "field",
@@ -3495,66 +3612,15 @@
3495
3612
  "type": {
3496
3613
  "text": "string"
3497
3614
  },
3498
- "description": "The name of the input"
3499
- },
3500
- {
3501
- "kind": "field",
3502
- "name": "type",
3503
- "type": {
3504
- "text": "'text' | 'email' | 'password' | 'tel' | 'url'"
3505
- },
3506
- "default": "'text'",
3507
- "description": "The type of the input (text, email, password, etc.)"
3508
- },
3509
- {
3510
- "kind": "field",
3511
- "name": "label",
3512
- "type": {
3513
- "text": "string"
3514
- },
3515
- "description": "Label for the input"
3516
- },
3517
- {
3518
- "kind": "field",
3519
- "name": "iconStart",
3520
- "type": {
3521
- "text": "string"
3522
- },
3523
- "description": "Icon for the start icon"
3524
- },
3525
- {
3526
- "kind": "field",
3527
- "name": "iconEnd",
3528
- "type": {
3529
- "text": "string"
3530
- },
3531
- "description": "Icon for the end icon"
3615
+ "description": "The name of the checkbox input"
3532
3616
  },
3533
3617
  {
3534
3618
  "kind": "field",
3535
- "name": "placeholder",
3619
+ "name": "value",
3536
3620
  "type": {
3537
3621
  "text": "string"
3538
3622
  },
3539
- "description": "Placeholder text"
3540
- },
3541
- {
3542
- "kind": "field",
3543
- "name": "disabled",
3544
- "type": {
3545
- "text": "boolean"
3546
- },
3547
- "default": "false",
3548
- "description": "Whether the input is disabled"
3549
- },
3550
- {
3551
- "kind": "field",
3552
- "name": "readonly",
3553
- "type": {
3554
- "text": "boolean"
3555
- },
3556
- "default": "false",
3557
- "description": "Whether the input is read-only"
3623
+ "description": "The value of the checkbox input"
3558
3624
  },
3559
3625
  {
3560
3626
  "kind": "field",
@@ -3562,23 +3628,13 @@
3562
3628
  "type": {
3563
3629
  "text": "string"
3564
3630
  },
3565
- "description": "External ID for linking with external systems"
3566
- },
3567
- {
3568
- "kind": "field",
3569
- "name": "handleInput",
3570
- "privacy": "private"
3631
+ "description": "External ID for linking with external systems (e.g. database ID, PDF form field ID)"
3571
3632
  },
3572
3633
  {
3573
3634
  "kind": "field",
3574
3635
  "name": "handleChange",
3575
3636
  "privacy": "private"
3576
3637
  },
3577
- {
3578
- "kind": "field",
3579
- "name": "handleClick",
3580
- "privacy": "private"
3581
- },
3582
3638
  {
3583
3639
  "kind": "method",
3584
3640
  "name": "render"
@@ -3586,112 +3642,56 @@
3586
3642
  ],
3587
3643
  "attributes": [
3588
3644
  {
3589
- "name": "mode",
3590
- "fieldName": "mode",
3591
- "description": "Mode of the popover should be 'default' for internal use",
3645
+ "name": "checked",
3646
+ "fieldName": "checked",
3647
+ "default": "false",
3648
+ "description": "Whether the checkbox is checked",
3592
3649
  "type": {
3593
- "text": "'default' | 'admin'"
3650
+ "text": "boolean"
3594
3651
  }
3595
3652
  },
3596
3653
  {
3597
- "name": "value",
3598
- "fieldName": "value",
3599
- "description": "The value of the input",
3654
+ "name": "disabled",
3655
+ "fieldName": "disabled",
3656
+ "default": "false",
3657
+ "description": "Whether the checkbox is disabled",
3600
3658
  "type": {
3601
- "text": "string"
3659
+ "text": "boolean"
3602
3660
  }
3603
3661
  },
3604
3662
  {
3605
3663
  "name": "name",
3606
3664
  "fieldName": "name",
3607
- "description": "The name of the input",
3608
- "type": {
3609
- "text": "string"
3610
- }
3611
- },
3612
- {
3613
- "name": "type",
3614
- "fieldName": "type",
3615
- "default": "'text'",
3616
- "description": "The type of the input (text, email, password, etc.)",
3617
- "type": {
3618
- "text": "'text' | 'email' | 'password' | 'tel' | 'url'"
3619
- }
3620
- },
3621
- {
3622
- "name": "label",
3623
- "fieldName": "label",
3624
- "description": "Label for the input",
3625
- "type": {
3626
- "text": "string"
3627
- }
3628
- },
3629
- {
3630
- "name": "icon-start",
3631
- "fieldName": "iconStart",
3632
- "description": "Icon for the start icon",
3633
- "type": {
3634
- "text": "string"
3635
- }
3636
- },
3637
- {
3638
- "name": "icon-end",
3639
- "fieldName": "iconEnd",
3640
- "description": "Icon for the end icon",
3665
+ "description": "The name of the checkbox input",
3641
3666
  "type": {
3642
3667
  "text": "string"
3643
3668
  }
3644
3669
  },
3645
3670
  {
3646
- "name": "placeholder",
3647
- "fieldName": "placeholder",
3648
- "description": "Placeholder text",
3671
+ "name": "value",
3672
+ "fieldName": "value",
3673
+ "description": "The value of the checkbox input",
3649
3674
  "type": {
3650
3675
  "text": "string"
3651
3676
  }
3652
3677
  },
3653
- {
3654
- "name": "disabled",
3655
- "fieldName": "disabled",
3656
- "default": "false",
3657
- "description": "Whether the input is disabled",
3658
- "type": {
3659
- "text": "boolean"
3660
- }
3661
- },
3662
- {
3663
- "name": "readonly",
3664
- "fieldName": "readonly",
3665
- "default": "false",
3666
- "description": "Whether the input is read-only",
3667
- "type": {
3668
- "text": "boolean"
3669
- }
3670
- },
3671
3678
  {
3672
3679
  "name": "external-id",
3673
3680
  "fieldName": "externalId",
3674
- "description": "External ID for linking with external systems",
3681
+ "description": "External ID for linking with external systems (e.g. database ID, PDF form field ID)",
3675
3682
  "type": {
3676
3683
  "text": "string"
3677
3684
  }
3678
3685
  }
3679
3686
  ],
3680
- "tagName": "le-string-input",
3687
+ "tagName": "le-checkbox",
3681
3688
  "events": [
3682
3689
  {
3683
3690
  "name": "change",
3684
3691
  "type": {
3685
- "text": "EventEmitter<{ value: string; name: string; externalId: string }>"
3686
- },
3687
- "description": "Emitted when the value changes (on blur or Enter)"
3688
- },
3689
- {
3690
- "name": "input",
3691
- "type": {
3692
- "text": "EventEmitter<{ value: string; name: string; externalId: string }>"
3692
+ "text": "EventEmitter<{ checked: boolean; value: string; name: string; externalId: string }>"
3693
3693
  },
3694
- "description": "Emitted when the input value changes (on keystroke)"
3694
+ "description": "Emitted when the checked state changes"
3695
3695
  }
3696
3696
  ],
3697
3697
  "customElement": true
@@ -3700,18 +3700,18 @@
3700
3700
  "exports": [
3701
3701
  {
3702
3702
  "kind": "js",
3703
- "name": "LeStringInput",
3703
+ "name": "LeCheckbox",
3704
3704
  "declaration": {
3705
- "name": "LeStringInput",
3706
- "module": "src/components/le-string-input/le-string-input.tsx"
3705
+ "name": "LeCheckbox",
3706
+ "module": "src/components/le-checkbox/le-checkbox.tsx"
3707
3707
  }
3708
3708
  },
3709
3709
  {
3710
3710
  "kind": "custom-element-definition",
3711
- "name": "le-string-input",
3711
+ "name": "le-checkbox",
3712
3712
  "declaration": {
3713
- "name": "LeStringInput",
3714
- "module": "src/components/le-string-input/le-string-input.tsx"
3713
+ "name": "LeCheckbox",
3714
+ "module": "src/components/le-checkbox/le-checkbox.tsx"
3715
3715
  }
3716
3716
  }
3717
3717
  ]