@redvars/peacock 3.5.0 → 3.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (314) hide show
  1. package/dist/BaseButton-BNFAYn-S.js +219 -0
  2. package/dist/BaseButton-BNFAYn-S.js.map +1 -0
  3. package/dist/BaseHyperlinkMixin-BNuwbiEf.js +65 -0
  4. package/dist/BaseHyperlinkMixin-BNuwbiEf.js.map +1 -0
  5. package/dist/BaseInput-14YmcfK7.js +27 -0
  6. package/dist/BaseInput-14YmcfK7.js.map +1 -0
  7. package/dist/assets/components.css +1 -1
  8. package/dist/assets/components.css.map +1 -1
  9. package/dist/assets/styles.css +1 -1
  10. package/dist/assets/styles.css.map +1 -1
  11. package/dist/banner.js +14 -30
  12. package/dist/banner.js.map +1 -1
  13. package/dist/{button-DMN1dPAg.js → button-colors-Ccys3hvS.js} +5 -468
  14. package/dist/button-colors-Ccys3hvS.js.map +1 -0
  15. package/dist/button-group.js +228 -8
  16. package/dist/button-group.js.map +1 -1
  17. package/dist/button.js +294 -8
  18. package/dist/button.js.map +1 -1
  19. package/dist/calendar-column-view.js +634 -0
  20. package/dist/calendar-column-view.js.map +1 -0
  21. package/dist/calendar-event-BrQ_SEKD.js +199 -0
  22. package/dist/calendar-event-BrQ_SEKD.js.map +1 -0
  23. package/dist/calendar-month-view.js +376 -0
  24. package/dist/calendar-month-view.js.map +1 -0
  25. package/dist/calendar.js +339 -0
  26. package/dist/calendar.js.map +1 -0
  27. package/dist/canvas.js +361 -0
  28. package/dist/canvas.js.map +1 -0
  29. package/dist/card.js +18 -73
  30. package/dist/card.js.map +1 -1
  31. package/dist/cb-compound-expression.js +125 -0
  32. package/dist/cb-compound-expression.js.map +1 -0
  33. package/dist/cb-divider.js +150 -0
  34. package/dist/cb-divider.js.map +1 -0
  35. package/dist/cb-expression.js +75 -0
  36. package/dist/cb-expression.js.map +1 -0
  37. package/dist/cb-predicate.js +137 -0
  38. package/dist/cb-predicate.js.map +1 -0
  39. package/dist/chart-bar.js.map +1 -1
  40. package/dist/chart-doughnut.js +2 -2
  41. package/dist/chart-doughnut.js.map +1 -1
  42. package/dist/chart-pie.js +2 -2
  43. package/dist/chart-pie.js.map +1 -1
  44. package/dist/chart-stacked-bar.js.map +1 -1
  45. package/dist/code-editor.js +2 -1
  46. package/dist/code-editor.js.map +1 -1
  47. package/dist/code-highlighter.js +2 -1
  48. package/dist/code-highlighter.js.map +1 -1
  49. package/dist/condition-builder.js +58 -0
  50. package/dist/condition-builder.js.map +1 -0
  51. package/dist/custom-elements-jsdocs.json +10860 -5567
  52. package/dist/custom-elements.json +16180 -7996
  53. package/dist/dropdown-button.js +216 -0
  54. package/dist/dropdown-button.js.map +1 -0
  55. package/dist/event-manager-D-QCmUgR.js +113 -0
  56. package/dist/event-manager-D-QCmUgR.js.map +1 -0
  57. package/dist/fab.js +421 -9
  58. package/dist/fab.js.map +1 -1
  59. package/dist/flow-designer-dZnLJOQT.js +1656 -0
  60. package/dist/flow-designer-dZnLJOQT.js.map +1 -0
  61. package/dist/flow-designer-node-XMe-jlKg.js +548 -0
  62. package/dist/flow-designer-node-XMe-jlKg.js.map +1 -0
  63. package/dist/flow-designer-node.js +4 -0
  64. package/dist/flow-designer-node.js.map +1 -0
  65. package/dist/flow-designer.js +16 -0
  66. package/dist/flow-designer.js.map +1 -0
  67. package/dist/html-editor.js +358 -0
  68. package/dist/html-editor.js.map +1 -0
  69. package/dist/icon-button-CK1ZuE-2.js +247 -0
  70. package/dist/icon-button-CK1ZuE-2.js.map +1 -0
  71. package/dist/index.js +31 -8
  72. package/dist/index.js.map +1 -1
  73. package/dist/{is-dark-mode-DicqGkCJ.js → is-dark-mode-DOcaw4Yq.js} +2 -27
  74. package/dist/is-dark-mode-DOcaw4Yq.js.map +1 -0
  75. package/dist/modal.js +418 -0
  76. package/dist/modal.js.map +1 -0
  77. package/dist/{select-4pl4XBj7.js → navigation-rail-DyO0oAZU.js} +2000 -2767
  78. package/dist/navigation-rail-DyO0oAZU.js.map +1 -0
  79. package/dist/notification-manager.js +268 -0
  80. package/dist/notification-manager.js.map +1 -0
  81. package/dist/notification.js +3 -2
  82. package/dist/notification.js.map +1 -1
  83. package/dist/peacock-loader.js +102 -14
  84. package/dist/peacock-loader.js.map +1 -1
  85. package/dist/popover-NC7b1lTq.js +1971 -0
  86. package/dist/popover-NC7b1lTq.js.map +1 -0
  87. package/dist/popover-content.js +125 -0
  88. package/dist/popover-content.js.map +1 -0
  89. package/dist/popover.js +4 -0
  90. package/dist/popover.js.map +1 -0
  91. package/dist/search.js +4 -0
  92. package/dist/search.js.map +1 -1
  93. package/dist/split-button.js +388 -0
  94. package/dist/split-button.js.map +1 -0
  95. package/dist/src/__controllers/floating-controller.d.ts +35 -0
  96. package/dist/src/__mixins/BaseButtonMixin.d.ts +20 -0
  97. package/dist/src/__mixins/BaseHyperlinkMixin.d.ts +18 -0
  98. package/dist/src/__mixins/MixinConstructor.d.ts +1 -0
  99. package/dist/src/banner/banner.d.ts +0 -4
  100. package/dist/src/button/BaseButton.d.ts +4 -47
  101. package/dist/src/button/button/button.d.ts +32 -3
  102. package/dist/src/button/button-group/button-group.d.ts +2 -2
  103. package/dist/src/button/icon-button/icon-button.d.ts +33 -8
  104. package/dist/src/calendar/base-event.d.ts +10 -0
  105. package/dist/src/calendar/calendar-column-view.d.ts +41 -0
  106. package/dist/src/calendar/calendar-event.d.ts +7 -0
  107. package/dist/src/calendar/calendar-month-view.d.ts +31 -0
  108. package/dist/src/calendar/calendar.d.ts +65 -0
  109. package/dist/src/calendar/event-manager.d.ts +17 -0
  110. package/dist/src/calendar/index.d.ts +4 -0
  111. package/dist/src/calendar/types.d.ts +13 -0
  112. package/dist/src/calendar/utils.d.ts +31 -0
  113. package/dist/src/canvas/canvas.d.ts +92 -0
  114. package/dist/src/canvas/index.d.ts +2 -0
  115. package/dist/src/card/card.d.ts +4 -15
  116. package/dist/src/condition-builder/cb-compound-expression.d.ts +31 -0
  117. package/dist/src/condition-builder/cb-divider.d.ts +26 -0
  118. package/dist/src/condition-builder/cb-expression.d.ts +31 -0
  119. package/dist/src/condition-builder/cb-predicate.d.ts +30 -0
  120. package/dist/src/condition-builder/condition-builder.d.ts +27 -0
  121. package/dist/src/condition-builder/index.d.ts +5 -0
  122. package/dist/src/dropdown-button/dropdown-button.d.ts +68 -0
  123. package/dist/src/dropdown-button/index.d.ts +1 -0
  124. package/dist/src/fab/fab.d.ts +4 -35
  125. package/dist/src/flow-designer/commands.d.ts +66 -0
  126. package/dist/src/flow-designer/flow-designer-node.d.ts +46 -0
  127. package/dist/src/flow-designer/flow-designer.d.ts +133 -0
  128. package/dist/src/flow-designer/index.d.ts +7 -0
  129. package/dist/src/flow-designer/layout.d.ts +30 -0
  130. package/dist/src/flow-designer/types.d.ts +142 -0
  131. package/dist/src/flow-designer/validation.d.ts +43 -0
  132. package/dist/src/flow-designer/workflow-utils.d.ts +40 -0
  133. package/dist/src/focus-ring/focus-ring.d.ts +11 -5
  134. package/dist/src/html-editor/html-editor.d.ts +56 -0
  135. package/dist/src/html-editor/index.d.ts +2 -0
  136. package/dist/src/index.d.ts +16 -1
  137. package/dist/src/link/link.d.ts +1 -1
  138. package/dist/src/menu/menu/menu.d.ts +5 -7
  139. package/dist/src/menu/menu-item/menu-item.d.ts +14 -13
  140. package/dist/src/modal/index.d.ts +1 -0
  141. package/dist/src/modal/modal.d.ts +63 -0
  142. package/dist/src/navigation-rail/index.d.ts +2 -0
  143. package/dist/src/navigation-rail/navigation-rail-item.d.ts +55 -0
  144. package/dist/src/navigation-rail/navigation-rail.d.ts +71 -0
  145. package/dist/src/notification-manager/index.d.ts +1 -0
  146. package/dist/src/notification-manager/notification-manager.d.ts +44 -0
  147. package/dist/src/popover/index.d.ts +2 -0
  148. package/dist/src/popover/popover-content.d.ts +29 -0
  149. package/dist/src/popover/popover.d.ts +62 -0
  150. package/dist/src/sidebar-menu/index.d.ts +3 -0
  151. package/dist/src/sidebar-menu/sidebar-menu-item.d.ts +58 -0
  152. package/dist/src/sidebar-menu/sidebar-menu.d.ts +38 -0
  153. package/dist/src/sidebar-menu/sidebar-sub-menu.d.ts +35 -0
  154. package/dist/src/split-button/index.d.ts +1 -0
  155. package/dist/src/split-button/split-button.d.ts +72 -0
  156. package/dist/src/toolbar/toolbar.d.ts +10 -10
  157. package/dist/src/tooltip/tooltip.d.ts +5 -15
  158. package/dist/src/url-field/index.d.ts +1 -0
  159. package/dist/src/url-field/url-field.d.ts +48 -0
  160. package/dist/test/flow-designer.test.d.ts +1 -0
  161. package/dist/test/sidebar-menu.test.d.ts +1 -0
  162. package/dist/toolbar.js +10 -10
  163. package/dist/toolbar.js.map +1 -1
  164. package/dist/tsconfig.tsbuildinfo +1 -1
  165. package/package.json +4 -2
  166. package/readme.md +73 -65
  167. package/scss/mixin.scss +16 -0
  168. package/src/__controllers/floating-controller.ts +237 -0
  169. package/src/__mixins/BaseButtonMixin.ts +83 -0
  170. package/src/__mixins/BaseHyperlinkMixin.ts +68 -0
  171. package/src/__mixins/MixinConstructor.ts +1 -0
  172. package/src/{__base_element → __mixins}/README.md +2 -2
  173. package/src/banner/banner.scss +20 -25
  174. package/src/banner/banner.ts +1 -7
  175. package/src/button/BaseButton.ts +11 -100
  176. package/src/button/button/button-sizes.scss +4 -2
  177. package/src/button/button/button.ts +77 -23
  178. package/src/button/button-group/button-group.ts +2 -2
  179. package/src/button/icon-button/icon-button.ts +75 -33
  180. package/src/calendar/base-event.ts +49 -0
  181. package/src/calendar/calendar-column-view.scss +326 -0
  182. package/src/calendar/calendar-column-view.ts +392 -0
  183. package/src/calendar/calendar-event.ts +20 -0
  184. package/src/calendar/calendar-month-view.scss +192 -0
  185. package/src/calendar/calendar-month-view.ts +244 -0
  186. package/src/calendar/calendar.scss +71 -0
  187. package/src/calendar/calendar.ts +298 -0
  188. package/src/calendar/event-manager.ts +117 -0
  189. package/src/calendar/index.ts +4 -0
  190. package/src/calendar/types.ts +14 -0
  191. package/src/calendar/utils.ts +180 -0
  192. package/src/canvas/canvas.scss +60 -0
  193. package/src/canvas/canvas.ts +391 -0
  194. package/src/canvas/index.ts +2 -0
  195. package/src/card/card.ts +11 -71
  196. package/src/chart-bar/chart-bar.ts +9 -14
  197. package/src/chart-bar/chart-stacked-bar.ts +12 -18
  198. package/src/chart-doughnut/chart-doughnut.ts +23 -27
  199. package/src/chart-pie/chart-pie.ts +19 -23
  200. package/src/checkbox/checkbox.scss +17 -34
  201. package/src/checkbox/checkbox.ts +3 -1
  202. package/src/code-highlighter/code-highlighter.scss +1 -0
  203. package/src/code-highlighter/code-highlighter.ts +1 -1
  204. package/src/condition-builder/cb-compound-expression.scss +37 -0
  205. package/src/condition-builder/cb-compound-expression.ts +80 -0
  206. package/src/condition-builder/cb-divider.scss +93 -0
  207. package/src/condition-builder/cb-divider.ts +56 -0
  208. package/src/condition-builder/cb-expression.scss +14 -0
  209. package/src/condition-builder/cb-expression.ts +49 -0
  210. package/src/condition-builder/cb-predicate.scss +35 -0
  211. package/src/condition-builder/cb-predicate.ts +102 -0
  212. package/src/condition-builder/condition-builder.scss +13 -0
  213. package/src/condition-builder/condition-builder.ts +38 -0
  214. package/src/condition-builder/index.ts +5 -0
  215. package/src/date-picker/date-picker.ts +1 -1
  216. package/src/dropdown-button/demo/index.html +110 -0
  217. package/src/dropdown-button/dropdown-button.scss +22 -0
  218. package/src/dropdown-button/dropdown-button.ts +206 -0
  219. package/src/dropdown-button/index.ts +1 -0
  220. package/src/elevation/elevation.scss +5 -5
  221. package/src/fab/fab.ts +29 -100
  222. package/src/flow-designer/DEMO.md +239 -0
  223. package/src/flow-designer/commands.ts +278 -0
  224. package/src/flow-designer/flow-designer-node.ts +172 -0
  225. package/src/flow-designer/flow-designer.scss +457 -0
  226. package/src/flow-designer/flow-designer.ts +611 -0
  227. package/src/flow-designer/index.ts +41 -0
  228. package/src/flow-designer/layout.ts +357 -0
  229. package/src/flow-designer/types.ts +166 -0
  230. package/src/flow-designer/validation.ts +284 -0
  231. package/src/flow-designer/workflow-utils.ts +282 -0
  232. package/src/focus-ring/focus-ring.ts +47 -40
  233. package/src/html-editor/html-editor.scss +146 -0
  234. package/src/html-editor/html-editor.ts +276 -0
  235. package/src/html-editor/index.ts +3 -0
  236. package/src/index.ts +28 -1
  237. package/src/input/input.ts +3 -1
  238. package/src/link/link.ts +2 -2
  239. package/src/menu/menu/menu.scss +2 -2
  240. package/src/menu/menu/menu.ts +91 -101
  241. package/src/menu/menu-item/menu-item.scss +4 -0
  242. package/src/menu/menu-item/menu-item.ts +85 -79
  243. package/src/modal/index.ts +1 -0
  244. package/src/modal/modal.scss +206 -0
  245. package/src/modal/modal.ts +201 -0
  246. package/src/navigation-rail/index.ts +2 -0
  247. package/src/navigation-rail/navigation-rail-item.scss +216 -0
  248. package/src/navigation-rail/navigation-rail-item.ts +223 -0
  249. package/src/navigation-rail/navigation-rail.scss +72 -0
  250. package/src/navigation-rail/navigation-rail.ts +149 -0
  251. package/src/notification/notification.ts +3 -2
  252. package/src/notification-manager/index.ts +1 -0
  253. package/src/notification-manager/notification-manager.scss +113 -0
  254. package/src/notification-manager/notification-manager.ts +199 -0
  255. package/src/number-field/number-field.ts +6 -4
  256. package/src/pagination/pagination.ts +6 -4
  257. package/src/peacock-loader.ts +93 -5
  258. package/src/popover/index.ts +2 -0
  259. package/src/popover/popover-content.scss +69 -0
  260. package/src/popover/popover-content.ts +51 -0
  261. package/src/popover/popover.scss +7 -0
  262. package/src/popover/popover.ts +170 -0
  263. package/src/search/search.ts +4 -0
  264. package/src/sidebar-menu/demo/index.html +68 -0
  265. package/src/sidebar-menu/index.ts +3 -0
  266. package/src/sidebar-menu/sidebar-menu-item.scss +102 -0
  267. package/src/sidebar-menu/sidebar-menu-item.ts +151 -0
  268. package/src/{tree-view/tree-view.scss → sidebar-menu/sidebar-menu.scss} +1 -1
  269. package/src/sidebar-menu/sidebar-menu.ts +182 -0
  270. package/src/sidebar-menu/sidebar-sub-menu.scss +130 -0
  271. package/src/sidebar-menu/sidebar-sub-menu.ts +160 -0
  272. package/src/skeleton/skeleton.scss +18 -24
  273. package/src/snackbar/snackbar.ts +1 -1
  274. package/src/split-button/index.ts +1 -0
  275. package/src/split-button/split-button-colors.scss +56 -0
  276. package/src/split-button/split-button-sizes.scss +28 -0
  277. package/src/split-button/split-button.scss +79 -0
  278. package/src/split-button/split-button.ts +236 -0
  279. package/src/table/table.ts +2 -2
  280. package/src/tabs/tab.ts +4 -3
  281. package/src/text/text.css-component.scss +7 -1
  282. package/src/time-picker/time-picker.ts +1 -1
  283. package/src/toolbar/toolbar.ts +10 -10
  284. package/src/tooltip/tooltip.scss +4 -3
  285. package/src/tooltip/tooltip.ts +64 -98
  286. package/src/url-field/index.ts +1 -0
  287. package/src/url-field/url-field.scss +50 -0
  288. package/src/url-field/url-field.ts +239 -0
  289. package/dist/button-DMN1dPAg.js.map +0 -1
  290. package/dist/button-group-CX9CUUXk.js +0 -435
  291. package/dist/button-group-CX9CUUXk.js.map +0 -1
  292. package/dist/fab-C5Nzxk0E.js +0 -497
  293. package/dist/fab-C5Nzxk0E.js.map +0 -1
  294. package/dist/is-dark-mode-DicqGkCJ.js.map +0 -1
  295. package/dist/select-4pl4XBj7.js.map +0 -1
  296. package/dist/spread-B5cgadZl.js +0 -32
  297. package/dist/spread-B5cgadZl.js.map +0 -1
  298. package/dist/src/__base_element/BaseHyperlink.d.ts +0 -20
  299. package/dist/src/menu/menu/MenuSurfaceController.d.ts +0 -18
  300. package/dist/src/tree-view/index.d.ts +0 -2
  301. package/dist/src/tree-view/tree-node.d.ts +0 -69
  302. package/dist/src/tree-view/tree-view.d.ts +0 -40
  303. package/dist/src/tree-view/wc-tree-view.d.ts +0 -6
  304. package/dist/test/tree-view.test.d.ts +0 -1
  305. package/dist/throttle-C7ZAPqtu.js +0 -24
  306. package/dist/throttle-C7ZAPqtu.js.map +0 -1
  307. package/src/__base_element/BaseHyperlink.ts +0 -42
  308. package/src/menu/menu/MenuSurfaceController.ts +0 -61
  309. package/src/tree-view/demo/index.html +0 -57
  310. package/src/tree-view/index.ts +0 -2
  311. package/src/tree-view/tree-node.scss +0 -101
  312. package/src/tree-view/tree-node.ts +0 -268
  313. package/src/tree-view/tree-view.ts +0 -182
  314. package/src/tree-view/wc-tree-view.ts +0 -9
@@ -0,0 +1,146 @@
1
+ @use '../../scss/mixin';
2
+
3
+ @include mixin.base-styles;
4
+
5
+ :host {
6
+ display: block;
7
+ width: 100%;
8
+ }
9
+
10
+ // ── Field wrapper overrides ─────────────────────────────────────────────────
11
+
12
+ .html-editor-field {
13
+ // Let the field expand to fit content vertically
14
+ --field-height: auto;
15
+ --field-padding-block: 0;
16
+
17
+ width: 100%;
18
+ }
19
+
20
+ // ── Toolbar ─────────────────────────────────────────────────────────────────
21
+
22
+ .html-editor-toolbar {
23
+ display: flex;
24
+ flex-wrap: wrap;
25
+ align-items: center;
26
+ gap: var(--spacing-025, 0.125rem);
27
+ padding: var(--spacing-050, 0.25rem) var(--spacing-100, 0.5rem);
28
+ background: var(
29
+ --html-editor-toolbar-background,
30
+ var(--color-surface-container, #f3edf7)
31
+ );
32
+ border-block-end: 1px solid
33
+ var(
34
+ --html-editor-toolbar-border-color,
35
+ var(--color-outline-variant, #cac4d0)
36
+ );
37
+ border-start-start-radius: inherit;
38
+ border-start-end-radius: inherit;
39
+ }
40
+
41
+ .toolbar-btn {
42
+ display: inline-flex;
43
+ align-items: center;
44
+ justify-content: center;
45
+ width: 2rem;
46
+ height: 2rem;
47
+ padding: 0;
48
+ border: none;
49
+ border-radius: var(--shape-corner-extra-small, 0.25rem);
50
+ background: transparent;
51
+ color: var(--color-on-surface-variant, #49454f);
52
+ cursor: pointer;
53
+ transition:
54
+ background 120ms ease,
55
+ color 120ms ease;
56
+
57
+ &:hover:not(:disabled) {
58
+ background: color-mix(
59
+ in srgb,
60
+ var(--color-on-surface-variant, #49454f) 8%,
61
+ transparent
62
+ );
63
+ }
64
+
65
+ &:active:not(:disabled) {
66
+ background: color-mix(
67
+ in srgb,
68
+ var(--color-primary, #6750a4) 12%,
69
+ transparent
70
+ );
71
+ color: var(--color-primary, #6750a4);
72
+ }
73
+
74
+ &:disabled {
75
+ opacity: 0.38;
76
+ cursor: not-allowed;
77
+ }
78
+
79
+ wc-icon {
80
+ pointer-events: none;
81
+ }
82
+ }
83
+
84
+ .toolbar-divider {
85
+ display: inline-block;
86
+ width: 1px;
87
+ height: 1.5rem;
88
+ background: var(--color-outline-variant, #cac4d0);
89
+ margin-inline: var(--spacing-025, 0.125rem);
90
+ flex-shrink: 0;
91
+ }
92
+
93
+ // ── Editable content area ───────────────────────────────────────────────────
94
+
95
+ .html-editor-content {
96
+ min-height: var(--html-editor-min-height, 8rem);
97
+ padding: var(--spacing-200, 1rem) var(--spacing-150, 0.75rem);
98
+ outline: none;
99
+ color: var(--color-on-surface, #1c1b1f);
100
+ font-family: var(--typography-body-medium-font-family, inherit);
101
+ font-size: var(--typography-body-medium-font-size, 0.875rem);
102
+ line-height: var(--typography-body-medium-line-height, 1.5);
103
+ cursor: text;
104
+ word-break: break-word;
105
+ overflow-wrap: break-word;
106
+
107
+ // Placeholder
108
+ &.is-empty::before {
109
+ content: attr(data-placeholder);
110
+ color: var(--color-on-surface-variant, #49454f);
111
+ opacity: 0.6;
112
+ pointer-events: none;
113
+ position: absolute;
114
+ }
115
+
116
+ // Sensible defaults for user-generated rich content
117
+ ul,
118
+ ol {
119
+ padding-inline-start: 1.5rem;
120
+ margin-block: 0.25rem;
121
+ }
122
+
123
+ a {
124
+ color: var(--color-primary, #6750a4);
125
+ text-decoration: underline;
126
+ }
127
+
128
+ strong,
129
+ b {
130
+ font-weight: 600;
131
+ }
132
+ }
133
+
134
+ // ── Read-only tag ───────────────────────────────────────────────────────────
135
+
136
+ .read-only-tag {
137
+ margin: var(--spacing-050, 0.25rem);
138
+ }
139
+
140
+ // ── Disabled / readonly host states ────────────────────────────────────────
141
+
142
+ :host([disabled]) .html-editor-content,
143
+ :host([readonly]) .html-editor-content {
144
+ cursor: not-allowed;
145
+ opacity: 0.6;
146
+ }
@@ -0,0 +1,276 @@
1
+ import { html, nothing } from 'lit';
2
+ import { property, query, state } from 'lit/decorators.js';
3
+ import { classMap } from 'lit/directives/class-map.js';
4
+
5
+ import IndividualComponent from '@/IndividualComponent.js';
6
+ import BaseInput from '../input/BaseInput.js';
7
+ import { redispatchEvent } from '../__utils/dispatch-event-utils.js';
8
+
9
+ import styles from './html-editor.scss';
10
+
11
+ /**
12
+ * @label HTML Editor
13
+ * @tag wc-html-editor
14
+ * @rawTag html-editor
15
+ *
16
+ * @summary A WYSIWYG HTML editor component with a Material 3 styled toolbar.
17
+ * @overview
18
+ * <p>The HTML Editor provides a rich-text editing experience using the browser's built-in
19
+ * <code>contenteditable</code> API. It wraps the editable area in a Material 3 styled
20
+ * <code>wc-field</code> and exposes a toolbar with common formatting actions.</p>
21
+ *
22
+ * <p>Get and set the HTML content via the <code>value</code> property. The component
23
+ * dispatches a <code>change</code> event whenever the content is modified.</p>
24
+ *
25
+ * @cssprop --html-editor-min-height - Minimum height of the editable area. Defaults to 8rem.
26
+ * @cssprop --html-editor-toolbar-background - Background color of the toolbar.
27
+ * @cssprop --html-editor-toolbar-border-color - Border color between toolbar and editing area.
28
+ *
29
+ * @fires {Event} change - Fired whenever the editable content changes.
30
+ *
31
+ * @example
32
+ * ```html
33
+ * <wc-html-editor label="Description" value="<p>Hello <strong>world</strong></p>"></wc-html-editor>
34
+ * ```
35
+ * @tags input editor
36
+ */
37
+ @IndividualComponent
38
+ export class HtmlEditor extends BaseInput {
39
+ static styles = [styles];
40
+
41
+ /** Current HTML value of the editor. */
42
+ @property({ type: String })
43
+ value = '';
44
+
45
+ /** Label displayed above the editor. */
46
+ @property({ type: String })
47
+ label = '';
48
+
49
+ /** Placeholder text shown when the editor is empty. */
50
+ @property({ type: String })
51
+ placeholder = 'Enter text\u2026';
52
+
53
+ /** Visual style of the wrapping field. */
54
+ @property({ type: String })
55
+ variant: 'filled' | 'outlined' | 'default' = 'default';
56
+
57
+ /** Helper text displayed below the editor. */
58
+ @property({ type: String, attribute: 'helper-text' })
59
+ helperText = '';
60
+
61
+ /** Whether to show an error state. */
62
+ @property({ type: Boolean })
63
+ error = false;
64
+
65
+ /** Error message text. */
66
+ @property({ type: String, attribute: 'error-text' })
67
+ errorText = '';
68
+
69
+ @state() private _focused = false;
70
+
71
+ @query('.html-editor-content')
72
+ private _editorEl!: HTMLDivElement;
73
+
74
+ // ─── Lifecycle ─────────────────────────────────────────────────────────────
75
+
76
+ protected firstUpdated() {
77
+ if (this.value && this._editorEl) {
78
+ this._editorEl.innerHTML = this.value;
79
+ }
80
+ }
81
+
82
+ protected updated(changed: Map<string, unknown>) {
83
+ if (changed.has('value') && this._editorEl) {
84
+ if (this._editorEl.innerHTML !== this.value) {
85
+ this._editorEl.innerHTML = this.value ?? '';
86
+ }
87
+ }
88
+ if (changed.has('disabled') || changed.has('readonly')) {
89
+ if (this._editorEl) {
90
+ this._editorEl.contentEditable =
91
+ this.disabled || this.readonly ? 'false' : 'true';
92
+ }
93
+ }
94
+ }
95
+
96
+ // ─── Private helpers ───────────────────────────────────────────────────────
97
+
98
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
99
+ private _execCmd(command: string, value?: string) {
100
+ if (this.disabled || this.readonly) return;
101
+ this._editorEl.focus();
102
+ // execCommand is deprecated but remains broadly supported for rich-text editing
103
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
104
+ (document as any).execCommand(command, false, value ?? null);
105
+ }
106
+
107
+ private _handleInput() {
108
+ this.value = this._editorEl.innerHTML;
109
+ redispatchEvent(
110
+ this,
111
+ new Event('change', { bubbles: true, composed: true }),
112
+ );
113
+ }
114
+
115
+ private _handleFocus() {
116
+ this._focused = true;
117
+ }
118
+
119
+ private _handleBlur() {
120
+ this._focused = false;
121
+ }
122
+
123
+ private _insertLink() {
124
+ // eslint-disable-next-line no-alert
125
+ const url = window.prompt('Enter URL:', 'https://');
126
+ if (url) this._execCmd('createLink', url);
127
+ }
128
+
129
+ // ─── Toolbar button ────────────────────────────────────────────────────────
130
+
131
+ private _toolbarButton(
132
+ icon: string,
133
+ title: string,
134
+ command: string,
135
+ value?: string,
136
+ ) {
137
+ return html`
138
+ <button
139
+ class="toolbar-btn"
140
+ title=${title}
141
+ aria-label=${title}
142
+ ?disabled=${this.disabled || this.readonly}
143
+ @mousedown=${(e: Event) => e.preventDefault()}
144
+ @click=${(e: Event) => {
145
+ e.preventDefault();
146
+ this._execCmd(command, value);
147
+ }}
148
+ >
149
+ <wc-icon name=${icon} size="sm"></wc-icon>
150
+ </button>
151
+ `;
152
+ }
153
+
154
+ // ─── Toolbar ───────────────────────────────────────────────────────────────
155
+
156
+ private _renderToolbar() {
157
+ return html`
158
+ <div
159
+ class="html-editor-toolbar"
160
+ role="toolbar"
161
+ aria-label="Formatting toolbar"
162
+ >
163
+ ${this._toolbarButton('format_bold', 'Bold', 'bold')}
164
+ ${this._toolbarButton('format_italic', 'Italic', 'italic')}
165
+ ${this._toolbarButton('format_underlined', 'Underline', 'underline')}
166
+ ${this._toolbarButton(
167
+ 'format_strikethrough',
168
+ 'Strikethrough',
169
+ 'strikeThrough',
170
+ )}
171
+
172
+ <span class="toolbar-divider"></span>
173
+
174
+ ${this._toolbarButton('format_align_left', 'Align left', 'justifyLeft')}
175
+ ${this._toolbarButton(
176
+ 'format_align_center',
177
+ 'Align center',
178
+ 'justifyCenter',
179
+ )}
180
+ ${this._toolbarButton(
181
+ 'format_align_right',
182
+ 'Align right',
183
+ 'justifyRight',
184
+ )}
185
+
186
+ <span class="toolbar-divider"></span>
187
+
188
+ ${this._toolbarButton(
189
+ 'format_list_bulleted',
190
+ 'Unordered list',
191
+ 'insertUnorderedList',
192
+ )}
193
+ ${this._toolbarButton(
194
+ 'format_list_numbered',
195
+ 'Ordered list',
196
+ 'insertOrderedList',
197
+ )}
198
+
199
+ <span class="toolbar-divider"></span>
200
+
201
+ ${this._toolbarButton(
202
+ 'format_indent_increase',
203
+ 'Indent',
204
+ 'indent',
205
+ )}
206
+ ${this._toolbarButton('format_indent_decrease', 'Outdent', 'outdent')}
207
+
208
+ <span class="toolbar-divider"></span>
209
+
210
+ <button
211
+ class="toolbar-btn"
212
+ title="Insert link"
213
+ aria-label="Insert link"
214
+ ?disabled=${this.disabled || this.readonly}
215
+ @mousedown=${(e: Event) => e.preventDefault()}
216
+ @click=${() => this._insertLink()}
217
+ >
218
+ <wc-icon name="link" size="sm"></wc-icon>
219
+ </button>
220
+
221
+ <span class="toolbar-divider"></span>
222
+
223
+ ${this._toolbarButton('undo', 'Undo', 'undo')}
224
+ ${this._toolbarButton('redo', 'Redo', 'redo')}
225
+ </div>
226
+ `;
227
+ }
228
+
229
+ // ─── Render ────────────────────────────────────────────────────────────────
230
+
231
+ render() {
232
+ const isEmpty = !this.value || this.value === '<br>';
233
+
234
+ return html`
235
+ <wc-field
236
+ label=${this.label}
237
+ ?required=${this.required}
238
+ ?disabled=${this.disabled}
239
+ ?readonly=${this.readonly}
240
+ ?skeleton=${this.skeleton}
241
+ ?focused=${this._focused}
242
+ ?error=${this.error}
243
+ error-text=${this.errorText}
244
+ helper-text=${this.helperText}
245
+ variant=${this.variant}
246
+ ?populated=${!isEmpty}
247
+ .host=${this}
248
+ class=${classMap({
249
+ 'html-editor-field': true,
250
+ disabled: this.disabled,
251
+ readonly: this.readonly,
252
+ })}
253
+ >
254
+ ${this._renderToolbar()}
255
+
256
+ <div
257
+ class=${classMap({
258
+ 'html-editor-content': true,
259
+ 'is-empty': isEmpty,
260
+ })}
261
+ contenteditable=${this.disabled || this.readonly ? 'false' : 'true'}
262
+ data-placeholder=${this.placeholder}
263
+ @input=${this._handleInput}
264
+ @focus=${this._handleFocus}
265
+ @blur=${this._handleBlur}
266
+ ></div>
267
+
268
+ ${this.disabled
269
+ ? html`<wc-tag class="read-only-tag" color="red">Disabled</wc-tag>`
270
+ : this.readonly
271
+ ? html`<wc-tag class="read-only-tag" color="red">Read Only</wc-tag>`
272
+ : nothing}
273
+ </wc-field>
274
+ `;
275
+ }
276
+ }
@@ -0,0 +1,3 @@
1
+ import { HtmlEditor } from './html-editor.js';
2
+
3
+ export { HtmlEditor };
package/src/index.ts CHANGED
@@ -7,6 +7,8 @@ export { Elevation } from './elevation/index.js';
7
7
  export { Button, ButtonGroup, IconButton } from './button/index.js';
8
8
  export { Fab } from './fab/index.js';
9
9
  export { SegmentedButton, SegmentedButtonGroup } from './segmented-button/index.js';
10
+ export { SplitButton } from './split-button/index.js';
11
+ export { DropdownButton } from './dropdown-button/index.js';
10
12
 
11
13
  export { FocusRing } from './focus-ring/index.js';
12
14
  export { Ripple } from './ripple/index.js';
@@ -18,6 +20,7 @@ export { LinearProgress } from './progress/linear-progress/index.js';
18
20
  export { CircularProgress } from './progress/circular-progress/index.js';
19
21
  export { Skeleton } from './skeleton/index.js';
20
22
  export { Input } from './input/index.js';
23
+ export { UrlField } from './url-field/index.js';
21
24
  export { Field } from './field/index.js';
22
25
  export { NumberField } from './number-field/index.js';
23
26
  export { DatePicker } from './date-picker/index.js';
@@ -31,11 +34,13 @@ export { Container } from './container/index.js';
31
34
  export { NumberCounter } from './number-counter/index.js';
32
35
  export { EmptyState } from './empty-state/index.js';
33
36
  export { Tooltip } from './popover/index.js';
37
+ export { Popover, PopoverContent } from './popover/index.js';
34
38
  export { Breadcrumb, BreadcrumbItem } from './breadcrumb/index.js';
35
39
  export { Menu, MenuItem, SubMenu } from './menu/index.js';
36
40
 
37
41
  export { CodeHighlighter } from './code-highlighter/index.js';
38
42
  export { CodeEditor } from './code-editor/index.js';
43
+ export { HtmlEditor } from './html-editor/index.js';
39
44
  export { Image } from './image/index.js';
40
45
  export { Tab, TabGroup, TabPanel, Tabs } from './tabs/index.js';
41
46
  export { Slider } from './slider/index.js';
@@ -44,12 +49,14 @@ export { ChartPie } from './chart-pie/index.js';
44
49
  export { ChartBar, ChartStackedBar } from './chart-bar/index.js';
45
50
  export { Table } from './table/index.js';
46
51
  export { Pagination } from './pagination/index.js';
47
- export { TreeView, TreeNode } from './tree-view/index.js';
52
+ export { SidebarMenu, SidebarMenuItem, SidebarSubMenu } from './sidebar-menu/index.js';
48
53
  export { Card } from './card/index.js';
49
54
  export { Banner } from './banner/index.js';
50
55
  export { Notification } from './notification/index.js';
56
+ export { NotificationManager } from './notification-manager/index.js';
51
57
  export { Snackbar } from './snackbar/index.js';
52
58
  export { Radio } from './radio/index.js';
59
+ export { Modal } from './modal/index.js';
53
60
  export { BottomSheet } from './bottom-sheet/index.js';
54
61
  export { SideSheet } from './side-sheet/index.js';
55
62
  export { Select } from './select/index.js';
@@ -57,4 +64,24 @@ export type { SelectOption } from './select/index.js';
57
64
  export { SelectOptionElement } from './select/index.js';
58
65
  export { Search } from './search/index.js';
59
66
  export { Toolbar } from './toolbar/index.js';
67
+ export { NavigationRail, NavigationRailItem } from './navigation-rail/index.js';
68
+ export { Calendar, CalendarColumnView, CalendarMonthView } from './calendar/index.js';
69
+ export type { CalendarViewType, EventType } from './calendar/index.js';
70
+ export { Canvas } from './canvas/index.js';
71
+ export type { CanvasShape } from './canvas/index.js';
72
+ export { FlowDesigner, FlowDesignerNode } from './flow-designer/index.js';
73
+ export type {
74
+ Workflow,
75
+ WorkflowNode,
76
+ WorkflowCommand,
77
+ PositionedNode,
78
+ ValidationError,
79
+ HistoryEntry,
80
+ EditorState,
81
+ NodeType,
82
+ WorkflowChangeEvent,
83
+ SwimlaneConfig,
84
+ NodeTemplate,
85
+ } from './flow-designer/index.js';
86
+ export { ConditionBuilder, CbPredicate, CbCompoundExpression, CbExpression, CbDivider } from './condition-builder/index.js';
60
87
 
@@ -178,11 +178,13 @@ export class Input extends BaseInput {
178
178
  <wc-icon-button
179
179
  class="password-toggle"
180
180
  variant="text"
181
- name=${this.passwordVisible ? 'visibility_off' : 'visibility'}
182
181
  @click=${() => {
183
182
  this.passwordVisible = !this.passwordVisible;
184
183
  }}
185
184
  >
185
+ <wc-icon
186
+ name=${this.passwordVisible ? 'visibility_off' : 'visibility'}
187
+ ></wc-icon>
186
188
  </wc-icon-button>
187
189
  </pc-tooltip>
188
190
  `
package/src/link/link.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import { html, LitElement } from 'lit';
2
2
  import { classMap } from 'lit/directives/class-map.js';
3
- import BaseHyperlink from '../__base_element/BaseHyperlink.js';
3
+ import BaseHyperlinkMixin from '../__mixins/BaseHyperlinkMixin.js';
4
4
  import styles from './link.scss';
5
5
 
6
6
  /**
@@ -16,7 +16,7 @@ import styles from './link.scss';
16
16
  * <wc-link href="#">Link</wc-link>
17
17
  * ```
18
18
  */
19
- export class Link extends BaseHyperlink(LitElement) {
19
+ export class Link extends BaseHyperlinkMixin(LitElement) {
20
20
  static styles = [styles];
21
21
 
22
22
  render() {
@@ -12,8 +12,8 @@
12
12
  padding-block: var(--spacing-050);
13
13
  transform-origin: top center;
14
14
 
15
- --_menu-enter-duration: var(--duration-medium1, 250ms);
16
- --_menu-exit-duration: var(--duration-short4, 200ms);
15
+ --_menu-enter-duration: var(--duration-medium1);
16
+ --_menu-exit-duration: var(--duration-medium2);
17
17
  --_menu-enter-easing: cubic-bezier(0.05, 0.7, 0.1, 1);
18
18
  --_menu-exit-easing: cubic-bezier(0.3, 0, 0.8, 0.15);
19
19