@aquera/nile-elements 2.0.0 → 2.0.2

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 (238) hide show
  1. package/README.md +11 -0
  2. package/demo/nxtgen-dark.css +2 -2
  3. package/dist/{index-ccff99d6.esm.js → index-0fe57384.esm.js} +1 -1
  4. package/dist/index-f6944844.cjs.js +2 -0
  5. package/dist/{index-e43755f5.cjs.js.map → index-f6944844.cjs.js.map} +1 -1
  6. package/dist/index.cjs.js +1 -1
  7. package/dist/index.esm.js +1 -1
  8. package/dist/index.js +1127 -741
  9. package/dist/nile-code-editor/extensionSetup.cjs.js +1 -1
  10. package/dist/nile-code-editor/extensionSetup.esm.js +1 -1
  11. package/dist/nile-code-editor/index.cjs.js +1 -1
  12. package/dist/nile-code-editor/index.esm.js +1 -1
  13. package/dist/nile-code-editor/nile-code-editor.cjs.js +2 -2
  14. package/dist/nile-code-editor/nile-code-editor.cjs.js.map +1 -1
  15. package/dist/nile-code-editor/nile-code-editor.css.cjs.js +1 -1
  16. package/dist/nile-code-editor/nile-code-editor.css.cjs.js.map +1 -1
  17. package/dist/nile-code-editor/nile-code-editor.css.esm.js +2 -2
  18. package/dist/nile-code-editor/nile-code-editor.esm.js +4 -4
  19. package/dist/nile-code-editor/theme.cjs.js +1 -1
  20. package/dist/nile-code-editor/theme.cjs.js.map +1 -1
  21. package/dist/nile-code-editor/theme.esm.js +1 -1
  22. package/dist/nile-combobox/nile-combobox.css.cjs.js +1 -1
  23. package/dist/nile-combobox/nile-combobox.css.cjs.js.map +1 -1
  24. package/dist/nile-combobox/nile-combobox.css.esm.js +1 -1
  25. package/dist/nile-detail/nile-detail.css.cjs.js +1 -1
  26. package/dist/nile-detail/nile-detail.css.cjs.js.map +1 -1
  27. package/dist/nile-detail/nile-detail.css.esm.js +1 -1
  28. package/dist/nile-side-bar-footer/nile-side-bar-footer.css.cjs.js +1 -1
  29. package/dist/nile-side-bar-footer/nile-side-bar-footer.css.cjs.js.map +1 -1
  30. package/dist/nile-side-bar-footer/nile-side-bar-footer.css.esm.js +3 -3
  31. package/dist/nile-side-bar-footer-item/nile-side-bar-footer-item.css.cjs.js +1 -1
  32. package/dist/nile-side-bar-footer-item/nile-side-bar-footer-item.css.cjs.js.map +1 -1
  33. package/dist/nile-side-bar-footer-item/nile-side-bar-footer-item.css.esm.js +13 -7
  34. package/dist/nile-timestamp-builder/index.cjs.js +2 -0
  35. package/dist/nile-timestamp-builder/index.cjs.js.map +1 -0
  36. package/dist/nile-timestamp-builder/index.esm.js +1 -0
  37. package/dist/nile-timestamp-builder/nile-timestamp-builder-utils.cjs.js +2 -0
  38. package/dist/nile-timestamp-builder/nile-timestamp-builder-utils.cjs.js.map +1 -0
  39. package/dist/nile-timestamp-builder/nile-timestamp-builder-utils.esm.js +1 -0
  40. package/dist/nile-timestamp-builder/nile-timestamp-builder.cjs.js +2 -0
  41. package/dist/nile-timestamp-builder/nile-timestamp-builder.cjs.js.map +1 -0
  42. package/dist/nile-timestamp-builder/nile-timestamp-builder.css.cjs.js +2 -0
  43. package/dist/nile-timestamp-builder/nile-timestamp-builder.css.cjs.js.map +1 -0
  44. package/dist/nile-timestamp-builder/nile-timestamp-builder.css.esm.js +195 -0
  45. package/dist/nile-timestamp-builder/nile-timestamp-builder.esm.js +154 -0
  46. package/dist/nile-timestamp-builder/timezones.cjs.js +2 -0
  47. package/dist/nile-timestamp-builder/timezones.cjs.js.map +1 -0
  48. package/dist/nile-timestamp-builder/timezones.esm.js +1 -0
  49. package/dist/nile-wysiwyg-editor/nile-wysiwyg-editor.cjs.js +1 -1
  50. package/dist/nile-wysiwyg-editor/nile-wysiwyg-editor.cjs.js.map +1 -1
  51. package/dist/nile-wysiwyg-editor/nile-wysiwyg-editor.css.cjs.js +1 -1
  52. package/dist/nile-wysiwyg-editor/nile-wysiwyg-editor.css.cjs.js.map +1 -1
  53. package/dist/nile-wysiwyg-editor/nile-wysiwyg-editor.css.esm.js +91 -58
  54. package/dist/nile-wysiwyg-editor/nile-wysiwyg-editor.esm.js +1 -1
  55. package/dist/nile-wysiwyg-editor/nile-wysiwyg-toolbar/nile-wysiwyg-toolbar.css.cjs.js +1 -1
  56. package/dist/nile-wysiwyg-editor/nile-wysiwyg-toolbar/nile-wysiwyg-toolbar.css.cjs.js.map +1 -1
  57. package/dist/nile-wysiwyg-editor/nile-wysiwyg-toolbar/nile-wysiwyg-toolbar.css.esm.js +19 -19
  58. package/dist/nile-wysiwyg-editor/ui/bookmark-panel.cjs.js +1 -1
  59. package/dist/nile-wysiwyg-editor/ui/bookmark-panel.cjs.js.map +1 -1
  60. package/dist/nile-wysiwyg-editor/ui/bookmark-panel.esm.js +14 -14
  61. package/dist/nile-wysiwyg-editor/ui/bubble-menu.cjs.js +1 -1
  62. package/dist/nile-wysiwyg-editor/ui/bubble-menu.cjs.js.map +1 -1
  63. package/dist/nile-wysiwyg-editor/ui/bubble-menu.esm.js +13 -13
  64. package/dist/nile-wysiwyg-editor/ui/code-block-menu.cjs.js +1 -1
  65. package/dist/nile-wysiwyg-editor/ui/code-block-menu.cjs.js.map +1 -1
  66. package/dist/nile-wysiwyg-editor/ui/code-block-menu.esm.js +12 -12
  67. package/dist/nile-wysiwyg-editor/ui/embed-menu.cjs.js +1 -1
  68. package/dist/nile-wysiwyg-editor/ui/embed-menu.cjs.js.map +1 -1
  69. package/dist/nile-wysiwyg-editor/ui/embed-menu.esm.js +10 -10
  70. package/dist/nile-wysiwyg-editor/ui/embed-panel.cjs.js +1 -1
  71. package/dist/nile-wysiwyg-editor/ui/embed-panel.cjs.js.map +1 -1
  72. package/dist/nile-wysiwyg-editor/ui/embed-panel.esm.js +4 -4
  73. package/dist/nile-wysiwyg-editor/ui/emoji-picker.cjs.js +1 -1
  74. package/dist/nile-wysiwyg-editor/ui/emoji-picker.cjs.js.map +1 -1
  75. package/dist/nile-wysiwyg-editor/ui/emoji-picker.esm.js +11 -11
  76. package/dist/nile-wysiwyg-editor/ui/find-replace.cjs.js +1 -1
  77. package/dist/nile-wysiwyg-editor/ui/find-replace.cjs.js.map +1 -1
  78. package/dist/nile-wysiwyg-editor/ui/find-replace.esm.js +9 -9
  79. package/dist/nile-wysiwyg-editor/ui/image-menu.cjs.js +1 -1
  80. package/dist/nile-wysiwyg-editor/ui/image-menu.cjs.js.map +1 -1
  81. package/dist/nile-wysiwyg-editor/ui/image-menu.esm.js +11 -11
  82. package/dist/nile-wysiwyg-editor/ui/image-panel.cjs.js +1 -1
  83. package/dist/nile-wysiwyg-editor/ui/image-panel.cjs.js.map +1 -1
  84. package/dist/nile-wysiwyg-editor/ui/image-panel.esm.js +6 -6
  85. package/dist/nile-wysiwyg-editor/ui/insert-menu.cjs.js +1 -1
  86. package/dist/nile-wysiwyg-editor/ui/insert-menu.cjs.js.map +1 -1
  87. package/dist/nile-wysiwyg-editor/ui/insert-menu.esm.js +14 -14
  88. package/dist/nile-wysiwyg-editor/ui/link-editor.cjs.js +1 -1
  89. package/dist/nile-wysiwyg-editor/ui/link-editor.cjs.js.map +1 -1
  90. package/dist/nile-wysiwyg-editor/ui/link-editor.esm.js +16 -16
  91. package/dist/nile-wysiwyg-editor/ui/markdown-panel.cjs.js +1 -1
  92. package/dist/nile-wysiwyg-editor/ui/markdown-panel.cjs.js.map +1 -1
  93. package/dist/nile-wysiwyg-editor/ui/markdown-panel.esm.js +8 -8
  94. package/dist/nile-wysiwyg-editor/ui/math-panel.cjs.js +1 -1
  95. package/dist/nile-wysiwyg-editor/ui/math-panel.cjs.js.map +1 -1
  96. package/dist/nile-wysiwyg-editor/ui/math-panel.esm.js +4 -4
  97. package/dist/nile-wysiwyg-editor/ui/shortcut-help.cjs.js +1 -1
  98. package/dist/nile-wysiwyg-editor/ui/shortcut-help.cjs.js.map +1 -1
  99. package/dist/nile-wysiwyg-editor/ui/shortcut-help.esm.js +16 -16
  100. package/dist/nile-wysiwyg-editor/ui/source-view.cjs.js +1 -1
  101. package/dist/nile-wysiwyg-editor/ui/source-view.cjs.js.map +1 -1
  102. package/dist/nile-wysiwyg-editor/ui/source-view.esm.js +29 -29
  103. package/dist/nile-wysiwyg-editor/ui/special-chars.cjs.js +1 -1
  104. package/dist/nile-wysiwyg-editor/ui/special-chars.cjs.js.map +1 -1
  105. package/dist/nile-wysiwyg-editor/ui/special-chars.esm.js +8 -8
  106. package/dist/nile-wysiwyg-editor/ui/suggest-list.cjs.js +1 -1
  107. package/dist/nile-wysiwyg-editor/ui/suggest-list.cjs.js.map +1 -1
  108. package/dist/nile-wysiwyg-editor/ui/suggest-list.esm.js +9 -9
  109. package/dist/nile-wysiwyg-editor/ui/table-grid-picker.cjs.js +1 -1
  110. package/dist/nile-wysiwyg-editor/ui/table-grid-picker.cjs.js.map +1 -1
  111. package/dist/nile-wysiwyg-editor/ui/table-grid-picker.esm.js +23 -23
  112. package/dist/nile-wysiwyg-editor/ui/table-menu.cjs.js +1 -1
  113. package/dist/nile-wysiwyg-editor/ui/table-menu.cjs.js.map +1 -1
  114. package/dist/nile-wysiwyg-editor/ui/table-menu.esm.js +7 -7
  115. package/dist/src/index.d.ts +1 -0
  116. package/dist/src/index.js +1 -0
  117. package/dist/src/index.js.map +1 -1
  118. package/dist/src/nile-code-editor/nile-code-editor.css.js +2 -2
  119. package/dist/src/nile-code-editor/nile-code-editor.css.js.map +1 -1
  120. package/dist/src/nile-code-editor/nile-code-editor.d.ts +15 -0
  121. package/dist/src/nile-code-editor/nile-code-editor.js +65 -6
  122. package/dist/src/nile-code-editor/nile-code-editor.js.map +1 -1
  123. package/dist/src/nile-code-editor/theme.d.ts +6 -117
  124. package/dist/src/nile-code-editor/theme.js +100 -147
  125. package/dist/src/nile-code-editor/theme.js.map +1 -1
  126. package/dist/src/nile-combobox/nile-combobox.css.js +1 -1
  127. package/dist/src/nile-combobox/nile-combobox.css.js.map +1 -1
  128. package/dist/src/nile-detail/nile-detail.css.js +1 -1
  129. package/dist/src/nile-detail/nile-detail.css.js.map +1 -1
  130. package/dist/src/nile-side-bar-footer/nile-side-bar-footer.css.js +3 -3
  131. package/dist/src/nile-side-bar-footer/nile-side-bar-footer.css.js.map +1 -1
  132. package/dist/src/nile-side-bar-footer-item/nile-side-bar-footer-item.css.js +11 -5
  133. package/dist/src/nile-side-bar-footer-item/nile-side-bar-footer-item.css.js.map +1 -1
  134. package/dist/src/nile-timestamp-builder/index.d.ts +1 -0
  135. package/dist/src/nile-timestamp-builder/index.js +2 -0
  136. package/dist/src/nile-timestamp-builder/index.js.map +1 -0
  137. package/dist/src/nile-timestamp-builder/nile-timestamp-builder-utils.d.ts +54 -0
  138. package/dist/src/nile-timestamp-builder/nile-timestamp-builder-utils.js +254 -0
  139. package/dist/src/nile-timestamp-builder/nile-timestamp-builder-utils.js.map +1 -0
  140. package/dist/src/nile-timestamp-builder/nile-timestamp-builder.css.d.ts +7 -0
  141. package/dist/src/nile-timestamp-builder/nile-timestamp-builder.css.js +203 -0
  142. package/dist/src/nile-timestamp-builder/nile-timestamp-builder.css.js.map +1 -0
  143. package/dist/src/nile-timestamp-builder/nile-timestamp-builder.d.ts +94 -0
  144. package/dist/src/nile-timestamp-builder/nile-timestamp-builder.js +578 -0
  145. package/dist/src/nile-timestamp-builder/nile-timestamp-builder.js.map +1 -0
  146. package/dist/src/nile-timestamp-builder/nile-timestamp-builder.test.d.ts +1 -0
  147. package/dist/src/nile-timestamp-builder/nile-timestamp-builder.test.js +890 -0
  148. package/dist/src/nile-timestamp-builder/nile-timestamp-builder.test.js.map +1 -0
  149. package/dist/src/nile-timestamp-builder/timezones.d.ts +8 -0
  150. package/dist/src/nile-timestamp-builder/timezones.js +357 -0
  151. package/dist/src/nile-timestamp-builder/timezones.js.map +1 -0
  152. package/dist/src/nile-wysiwyg-editor/nile-wysiwyg-editor.css.js +91 -58
  153. package/dist/src/nile-wysiwyg-editor/nile-wysiwyg-editor.css.js.map +1 -1
  154. package/dist/src/nile-wysiwyg-editor/nile-wysiwyg-editor.d.ts +2 -1
  155. package/dist/src/nile-wysiwyg-editor/nile-wysiwyg-editor.js +23 -1
  156. package/dist/src/nile-wysiwyg-editor/nile-wysiwyg-editor.js.map +1 -1
  157. package/dist/src/nile-wysiwyg-editor/nile-wysiwyg-toolbar/nile-wysiwyg-toolbar.css.js +19 -19
  158. package/dist/src/nile-wysiwyg-editor/nile-wysiwyg-toolbar/nile-wysiwyg-toolbar.css.js.map +1 -1
  159. package/dist/src/nile-wysiwyg-editor/ui/bookmark-panel.js +10 -10
  160. package/dist/src/nile-wysiwyg-editor/ui/bookmark-panel.js.map +1 -1
  161. package/dist/src/nile-wysiwyg-editor/ui/bubble-menu.js +7 -7
  162. package/dist/src/nile-wysiwyg-editor/ui/bubble-menu.js.map +1 -1
  163. package/dist/src/nile-wysiwyg-editor/ui/code-block-menu.js +5 -5
  164. package/dist/src/nile-wysiwyg-editor/ui/code-block-menu.js.map +1 -1
  165. package/dist/src/nile-wysiwyg-editor/ui/embed-menu.js +6 -6
  166. package/dist/src/nile-wysiwyg-editor/ui/embed-menu.js.map +1 -1
  167. package/dist/src/nile-wysiwyg-editor/ui/embed-panel.js +4 -4
  168. package/dist/src/nile-wysiwyg-editor/ui/embed-panel.js.map +1 -1
  169. package/dist/src/nile-wysiwyg-editor/ui/emoji-picker.js +6 -6
  170. package/dist/src/nile-wysiwyg-editor/ui/emoji-picker.js.map +1 -1
  171. package/dist/src/nile-wysiwyg-editor/ui/find-replace.js +7 -7
  172. package/dist/src/nile-wysiwyg-editor/ui/find-replace.js.map +1 -1
  173. package/dist/src/nile-wysiwyg-editor/ui/image-menu.js +6 -6
  174. package/dist/src/nile-wysiwyg-editor/ui/image-menu.js.map +1 -1
  175. package/dist/src/nile-wysiwyg-editor/ui/image-panel.js +6 -6
  176. package/dist/src/nile-wysiwyg-editor/ui/image-panel.js.map +1 -1
  177. package/dist/src/nile-wysiwyg-editor/ui/insert-menu.js +7 -7
  178. package/dist/src/nile-wysiwyg-editor/ui/insert-menu.js.map +1 -1
  179. package/dist/src/nile-wysiwyg-editor/ui/link-editor.js +9 -9
  180. package/dist/src/nile-wysiwyg-editor/ui/link-editor.js.map +1 -1
  181. package/dist/src/nile-wysiwyg-editor/ui/markdown-panel.js +8 -8
  182. package/dist/src/nile-wysiwyg-editor/ui/markdown-panel.js.map +1 -1
  183. package/dist/src/nile-wysiwyg-editor/ui/math-panel.js +4 -4
  184. package/dist/src/nile-wysiwyg-editor/ui/math-panel.js.map +1 -1
  185. package/dist/src/nile-wysiwyg-editor/ui/shortcut-help.js +9 -9
  186. package/dist/src/nile-wysiwyg-editor/ui/shortcut-help.js.map +1 -1
  187. package/dist/src/nile-wysiwyg-editor/ui/source-view.js +24 -24
  188. package/dist/src/nile-wysiwyg-editor/ui/source-view.js.map +1 -1
  189. package/dist/src/nile-wysiwyg-editor/ui/special-chars.js +4 -4
  190. package/dist/src/nile-wysiwyg-editor/ui/special-chars.js.map +1 -1
  191. package/dist/src/nile-wysiwyg-editor/ui/suggest-list.js +7 -7
  192. package/dist/src/nile-wysiwyg-editor/ui/suggest-list.js.map +1 -1
  193. package/dist/src/nile-wysiwyg-editor/ui/table-grid-picker.js +16 -16
  194. package/dist/src/nile-wysiwyg-editor/ui/table-grid-picker.js.map +1 -1
  195. package/dist/src/nile-wysiwyg-editor/ui/table-menu.js +4 -4
  196. package/dist/src/nile-wysiwyg-editor/ui/table-menu.js.map +1 -1
  197. package/dist/src/version.js +2 -2
  198. package/dist/src/version.js.map +1 -1
  199. package/dist/tsconfig.tsbuildinfo +1 -1
  200. package/package.json +1 -1
  201. package/src/index.ts +1 -0
  202. package/src/nile-code-editor/nile-code-editor.css.ts +2 -2
  203. package/src/nile-code-editor/nile-code-editor.ts +68 -5
  204. package/src/nile-code-editor/theme.ts +129 -162
  205. package/src/nile-combobox/nile-combobox.css.ts +1 -1
  206. package/src/nile-detail/nile-detail.css.ts +1 -1
  207. package/src/nile-side-bar-footer/nile-side-bar-footer.css.ts +3 -3
  208. package/src/nile-side-bar-footer-item/nile-side-bar-footer-item.css.ts +11 -5
  209. package/src/nile-timestamp-builder/index.ts +1 -0
  210. package/src/nile-timestamp-builder/nile-timestamp-builder-utils.ts +321 -0
  211. package/src/nile-timestamp-builder/nile-timestamp-builder.css.ts +204 -0
  212. package/src/nile-timestamp-builder/nile-timestamp-builder.test.ts +1089 -0
  213. package/src/nile-timestamp-builder/nile-timestamp-builder.ts +625 -0
  214. package/src/nile-timestamp-builder/timezones.ts +356 -0
  215. package/src/nile-wysiwyg-editor/nile-wysiwyg-editor.css.ts +91 -58
  216. package/src/nile-wysiwyg-editor/nile-wysiwyg-editor.ts +21 -1
  217. package/src/nile-wysiwyg-editor/nile-wysiwyg-toolbar/nile-wysiwyg-toolbar.css.ts +19 -19
  218. package/src/nile-wysiwyg-editor/ui/bookmark-panel.ts +10 -10
  219. package/src/nile-wysiwyg-editor/ui/bubble-menu.ts +7 -7
  220. package/src/nile-wysiwyg-editor/ui/code-block-menu.ts +5 -5
  221. package/src/nile-wysiwyg-editor/ui/embed-menu.ts +6 -6
  222. package/src/nile-wysiwyg-editor/ui/embed-panel.ts +4 -4
  223. package/src/nile-wysiwyg-editor/ui/emoji-picker.ts +6 -6
  224. package/src/nile-wysiwyg-editor/ui/find-replace.ts +7 -7
  225. package/src/nile-wysiwyg-editor/ui/image-menu.ts +6 -6
  226. package/src/nile-wysiwyg-editor/ui/image-panel.ts +6 -6
  227. package/src/nile-wysiwyg-editor/ui/insert-menu.ts +7 -7
  228. package/src/nile-wysiwyg-editor/ui/link-editor.ts +9 -9
  229. package/src/nile-wysiwyg-editor/ui/markdown-panel.ts +8 -8
  230. package/src/nile-wysiwyg-editor/ui/math-panel.ts +4 -4
  231. package/src/nile-wysiwyg-editor/ui/shortcut-help.ts +9 -9
  232. package/src/nile-wysiwyg-editor/ui/source-view.ts +24 -24
  233. package/src/nile-wysiwyg-editor/ui/special-chars.ts +4 -4
  234. package/src/nile-wysiwyg-editor/ui/suggest-list.ts +7 -7
  235. package/src/nile-wysiwyg-editor/ui/table-grid-picker.ts +16 -16
  236. package/src/nile-wysiwyg-editor/ui/table-menu.ts +4 -4
  237. package/vscode-html-custom-data.json +94 -2
  238. package/dist/index-e43755f5.cjs.js +0 -2
@@ -10,10 +10,10 @@ export const styles = css`
10
10
  padding-bottom: var(--nile-spacing-xl, var(--ng-spacing-3xl));
11
11
  padding-left: var(--nile-spacing-xl, var(--ng-spacing-xl));
12
12
  padding-right: var(--nile-spacing-xl, var(--ng-spacing-xl));
13
- padding-top: var(--nile-spacing-xs);
13
+ padding-top: var(--nile-spacing-xs, var(--ng-spacing-xs));
14
14
  gap: var(--nile-spacing-md, var(--ng-spacing-xl));
15
15
  bottom: 0;
16
- background: var(--nile-colors-neutral-100);
16
+ background: var(--nile-colors-neutral-100, var(--ng-colors-bg-primary));
17
17
  }
18
18
 
19
19
  .footer {
@@ -30,7 +30,7 @@ export const styles = css`
30
30
  justify-content: center;
31
31
 
32
32
  font-size: var(--nile-type-scale-3, var(--ng-font-size-text-sm));
33
- color: var(--nile-colors-dark-900, var(--ng-colors-graylightmode-900));
33
+ color: var(--nile-colors-dark-900, var(--ng-colors-text-primary-900));
34
34
  cursor: pointer;
35
35
  border-radius: var(--nile-radius-sm, var(--ng-radius-sm));
36
36
  transition: background 0.2s ease;
@@ -15,7 +15,7 @@ export const styles = css`
15
15
  padding-left: var(--nile-spacing-lg, var(--ng-spacing-lg));
16
16
  padding-right: var(--nile-spacing-lg, var(--ng-spacing-lg));
17
17
  font-size: var(--nile-type-scale-3, var(--ng-font-size-text-sm));
18
- color: var(--nile-colors-dark-900, var(--ng-colors-text-primary-900))
18
+ color: var(--nile-colors-dark-900, var(--ng-colors-text-primary-900));
19
19
  cursor: pointer;
20
20
  font-family: var(--nile-font-family-serif, var(--ng-font-family-body));
21
21
  border-radius: var(--nile-radius-sm, var(--ng-radius-lg));
@@ -27,7 +27,10 @@ export const styles = css`
27
27
  }
28
28
 
29
29
  .footer-item:hover {
30
- background: var(--nile-side-bar-footer-hover-bg, #f3f4f6);
30
+ background: var(
31
+ --nile-side-bar-footer-hover-bg,
32
+ var(--ng-colors-bg-primary-hover)
33
+ );
31
34
  }
32
35
 
33
36
  /* left: icon */
@@ -50,13 +53,16 @@ export const styles = css`
50
53
  ::slotted([slot='action']) {
51
54
  flex-shrink: 0;
52
55
  font-size: 1.25rem;
53
- color: var(--nile-side-bar-footer-icon-color, #6b7280);
56
+ color: var(
57
+ --nile-side-bar-footer-icon-color,
58
+ var(--ng-colors-fg-quaternary-400)
59
+ );
54
60
  margin-left: auto;
55
61
  }
56
62
 
57
63
 
58
64
  :host([type='support']) .footer-item {
59
- background: var(--nile-colors-neutral-400);
65
+ background: var(--nile-colors-neutral-400, var(--ng-colors-bg-secondary));
60
66
  height: var(--nile-height-38px, var(--ng-spacing-5xl));
61
67
  border-radius: var(--nile-radius-sm, var(--ng-radius-sm));
62
68
 
@@ -72,7 +78,7 @@ border: 1px solid var(--ng-colors-border-secondary);
72
78
  min-height: var(--nile-radius-4xl, var(--ng-spacing-7xl));
73
79
  }
74
80
  :host([type='avatar'][active]) .footer-item {
75
- background: var(--nile-colors-neutral-400);
81
+ background: var(--nile-colors-neutral-400, var(--ng-colors-bg-active));
76
82
  }
77
83
 
78
84
 
@@ -0,0 +1 @@
1
+ export { NileTimestampBuilder } from './nile-timestamp-builder';
@@ -0,0 +1,321 @@
1
+ /**
2
+ * Copyright Aquera Inc 2026
3
+ *
4
+ * This source code is licensed under the BSD-3-Clause license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+
8
+ /**
9
+ * Timezone-aware wall-clock helpers for `nile-timestamp-builder`.
10
+ * ALL Temporal / Intl branching lives in this module. The component must never
11
+ * call `Intl.DateTimeFormat` or `Temporal` inline — it always goes through here.
12
+ */
13
+
14
+ import { TIMEZONES } from './timezones';
15
+
16
+ /** The editable wall-clock fields exposed by `nile-timestamp-builder`. */
17
+ export enum TimestampField {
18
+ Year = 'year',
19
+ Month = 'month',
20
+ Day = 'day',
21
+ Hour = 'hour',
22
+ Minute = 'minute',
23
+ Second = 'second',
24
+ Millisecond = 'millisecond',
25
+ }
26
+
27
+ export interface WallClock {
28
+ year: number;
29
+ month: number;
30
+ day: number;
31
+ hour: number;
32
+ minute: number;
33
+ second: number;
34
+ millisecond: number;
35
+ }
36
+
37
+ export function hasTemporal(): boolean {
38
+ return typeof (globalThis as any).Temporal !== 'undefined';
39
+ }
40
+
41
+ /** Returns the list of supported IANA timezones using Intl or the bundled fallback list. */
42
+ export function getTimezoneList(): string[] {
43
+ try {
44
+ const supportedValuesOf = (Intl as any).supportedValuesOf;
45
+ if (typeof supportedValuesOf === 'function') {
46
+ const list = supportedValuesOf('timeZone') as string[];
47
+ if (Array.isArray(list) && list.length > 0) {
48
+ return list;
49
+ }
50
+ }
51
+ } catch {
52
+ }
53
+ return [...TIMEZONES];
54
+ }
55
+
56
+ /** Resolves the runtime's local IANA timezone, falling back to `UTC`. */
57
+ export function getLocalTimeZone(): string {
58
+ try {
59
+ const tz = Intl.DateTimeFormat().resolvedOptions().timeZone;
60
+ if (tz && isValidTimeZone(tz)) {
61
+ return tz;
62
+ }
63
+ } catch {
64
+ }
65
+ return 'UTC';
66
+ }
67
+
68
+ /** Returns true when `tz` is a timezone identifier the runtime can format. */
69
+ export function isValidTimeZone(tz: string): boolean {
70
+ if (!tz || typeof tz !== 'string') {
71
+ return false;
72
+ }
73
+ try {
74
+ new Intl.DateTimeFormat('en-US', { timeZone: tz });
75
+ return true;
76
+ } catch {
77
+ return false;
78
+ }
79
+ }
80
+
81
+ export function daysInMonth(year: number, month: number): number {
82
+ return new Date(Date.UTC(year, month, 0)).getUTCDate();
83
+ }
84
+
85
+ /** Clamps `value` into `[min, max]`; `NaN` collapses to `min`. */
86
+ export function clampField(value: number, min: number, max: number): number {
87
+ if (Number.isNaN(value)) {
88
+ return min;
89
+ }
90
+ return Math.min(max, Math.max(min, value));
91
+ }
92
+
93
+ export function clampWallClock(
94
+ w: WallClock,
95
+ minYear: number,
96
+ maxYear: number
97
+ ): WallClock {
98
+ const year = clampField(Math.trunc(w.year), minYear, maxYear);
99
+ const month = clampField(Math.trunc(w.month), 1, 12);
100
+ const day = clampField(Math.trunc(w.day), 1, daysInMonth(year, month));
101
+ const hour = clampField(Math.trunc(w.hour), 0, 23);
102
+ const minute = clampField(Math.trunc(w.minute), 0, 59);
103
+ const second = clampField(Math.trunc(w.second), 0, 59);
104
+ const millisecond = clampField(Math.trunc(w.millisecond), 0, 999);
105
+ return { year, month, day, hour, minute, second, millisecond };
106
+ }
107
+
108
+ /** Formats a wall-clock as `YYYY-MM-DD HH:mm:ss.SSS` with zero padding. */
109
+ export function formatWallClock(w: WallClock): string {
110
+ const pad = (n: number, len: number) =>
111
+ String(Math.abs(n)).padStart(len, '0');
112
+ const y = pad(w.year, 4);
113
+ const mo = pad(w.month, 2);
114
+ const d = pad(w.day, 2);
115
+ const h = pad(w.hour, 2);
116
+ const mi = pad(w.minute, 2);
117
+ const s = pad(w.second, 2);
118
+ const ms = pad(w.millisecond, 3);
119
+ return `${y}-${mo}-${d} ${h}:${mi}:${s}.${ms}`;
120
+ }
121
+
122
+ /** Converts an epoch (ms) into the wall-clock fields observed in `tz`. Uses Temporal when present, otherwise an `Intl.DateTimeFormat` fallback. */
123
+ export function epochToFields(epochMs: number, tz: string): WallClock {
124
+ if (hasTemporal()) {
125
+ const Temporal = (globalThis as any).Temporal;
126
+ const zdt =
127
+ Temporal.Instant.fromEpochMilliseconds(epochMs).toZonedDateTimeISO(tz);
128
+ return {
129
+ year: zdt.year,
130
+ month: zdt.month,
131
+ day: zdt.day,
132
+ hour: zdt.hour,
133
+ minute: zdt.minute,
134
+ second: zdt.second,
135
+ millisecond: zdt.millisecond,
136
+ };
137
+ }
138
+ return intlEpochToFields(epochMs, tz);
139
+ }
140
+
141
+ /** Neutral wall-clock placeholder: the Unix epoch (`1970-01-01T00:00:00.000`) read in UTC.*/
142
+ export const EPOCH_WALLCLOCK: WallClock = epochToFields(0, 'UTC');
143
+
144
+ function intlEpochToFields(epochMs: number, tz: string): WallClock {
145
+ const parts = formatEpochParts(epochMs, tz);
146
+ const millisecond = ((epochMs % 1000) + 1000) % 1000;
147
+ return { ...parts, millisecond };
148
+ }
149
+
150
+ /** Extracts numeric y/mo/d/h/mi/s parts of `epochMs` in `tz` (h23, no ms). */
151
+ function formatEpochParts(
152
+ epochMs: number,
153
+ tz: string
154
+ ): Omit<WallClock, 'millisecond'> {
155
+ const formatter = new Intl.DateTimeFormat('en-US', {
156
+ timeZone: tz,
157
+ year: 'numeric',
158
+ month: '2-digit',
159
+ day: '2-digit',
160
+ hour: '2-digit',
161
+ minute: '2-digit',
162
+ second: '2-digit',
163
+ hourCycle: 'h23',
164
+ });
165
+
166
+ const map: Record<string, number> = {};
167
+ for (const part of formatter.formatToParts(new Date(epochMs))) {
168
+ if (part.type !== 'literal') {
169
+ map[part.type] = Number(part.value);
170
+ }
171
+ }
172
+
173
+ // `hourCycle: 'h23'` can still surface hour 24 for midnight in some engines.
174
+ const hour = map.hour === 24 ? 0 : map.hour;
175
+
176
+ return {
177
+ year: map.year,
178
+ month: map.month,
179
+ day: map.day,
180
+ hour,
181
+ minute: map.minute,
182
+ second: map.second,
183
+ };
184
+ }
185
+
186
+ /** Returns the timezone offset (ms) */
187
+ export function getTimeZoneOffsetMs(epochMs: number, tz: string): number {
188
+ const parts = formatEpochParts(epochMs, tz);
189
+ const asIfUTC = Date.UTC(
190
+ parts.year,
191
+ parts.month - 1,
192
+ parts.day,
193
+ parts.hour,
194
+ parts.minute,
195
+ parts.second
196
+ );
197
+ const epochSeconds = Math.floor(epochMs / 1000) * 1000;
198
+ const offset = asIfUTC - epochSeconds;
199
+ return Math.round(offset / 1000) * 1000;
200
+ }
201
+
202
+ const ZONED_VALUE_RE =
203
+ /^(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d+)?)\[GMT([+-]\d{2}:\d{2}) ([^\]]+)\]$/;
204
+
205
+ /** Converts a `±HH:MM` offset from {@link ZONED_VALUE_RE} into milliseconds. */
206
+ function offsetStringToMs(offset: string): number {
207
+ const sign = offset[0] === '-' ? -1 : 1;
208
+ return (
209
+ sign * (Number(offset.slice(1, 3)) * 3600000 + Number(offset.slice(4, 6)) * 60000)
210
+ );
211
+ }
212
+
213
+ export function parseZonedValue(
214
+ input: string
215
+ ): { date: Date; timezone: string } | null {
216
+ const match = ZONED_VALUE_RE.exec(input.trim());
217
+ if (!match) {
218
+ return null;
219
+ }
220
+ const [, iso, offset, timezone] = match;
221
+ const date = new Date(`${iso}${offset}`);
222
+ if (Number.isNaN(date.getTime()) || !isValidTimeZone(timezone)) {
223
+ return null;
224
+ }
225
+ if (
226
+ getTimeZoneOffsetMs(date.getTime(), timezone) !== offsetStringToMs(offset)
227
+ ) {
228
+ return null;
229
+ }
230
+ return { date, timezone };
231
+ }
232
+
233
+ /** Normalizes supported `value` inputs into epoch milliseconds, or `null` if invalid. */
234
+ export function normalizeValueInput(
235
+ input: Date | number | string | null | undefined
236
+ ): Date | null {
237
+ if (input === null || input === undefined) {
238
+ return null;
239
+ }
240
+ const valid = (d: Date) => (Number.isNaN(d.getTime()) ? null : d);
241
+ if (input instanceof Date) {
242
+ return valid(input);
243
+ }
244
+ if (typeof input === 'number') {
245
+ return Number.isFinite(input) ? valid(new Date(input)) : null;
246
+ }
247
+ const trimmed = input.trim();
248
+ if (trimmed === '') {
249
+ return null;
250
+ }
251
+ const zoned = parseZonedValue(trimmed);
252
+ if (zoned) {
253
+ return zoned.date;
254
+ }
255
+ if (/^-?\d+$/.test(trimmed)) {
256
+ return valid(new Date(Number(trimmed)));
257
+ }
258
+ return valid(new Date(trimmed));
259
+ }
260
+
261
+ /** Serializes a wall-clock into a zone-encoded string preserving its offset and IANA timezone. */
262
+ export function formatZonedValue(w: WallClock, tz: string): string {
263
+ const epoch = fieldsToEpoch(w, tz);
264
+ const offsetMs = Math.round(getTimeZoneOffsetMs(epoch, tz) / 60000) * 60000;
265
+ const pad = (n: number, len = 2) => String(Math.abs(n)).padStart(len, '0');
266
+ const sign = offsetMs >= 0 ? '+' : '-';
267
+ const abs = Math.abs(offsetMs);
268
+ const offH = Math.floor(abs / 3600000);
269
+ const offM = Math.floor((abs % 3600000) / 60000);
270
+ const off = `${sign}${pad(offH)}:${pad(offM)}`;
271
+ const zone = tz || 'UTC';
272
+ const y = pad(w.year, 4);
273
+ const mo = pad(w.month, 2);
274
+ const d = pad(w.day, 2);
275
+ const h = pad(w.hour, 2);
276
+ const mi = pad(w.minute, 2);
277
+ const s = pad(w.second, 2);
278
+ const ms = pad(w.millisecond, 3);
279
+ return `${y}-${mo}-${d}T${h}:${mi}:${s}.${ms}[GMT${off} ${zone}]`;
280
+ }
281
+
282
+ /** Converts wall-clock fields in `tz` to epoch milliseconds. */
283
+ export function fieldsToEpoch(w: WallClock, tz: string): number {
284
+ if (hasTemporal()) {
285
+ const Temporal = (globalThis as any).Temporal;
286
+ const zdt = Temporal.ZonedDateTime.from(
287
+ {
288
+ year: w.year,
289
+ month: w.month,
290
+ day: w.day,
291
+ hour: w.hour,
292
+ minute: w.minute,
293
+ second: w.second,
294
+ millisecond: w.millisecond,
295
+ timeZone: tz,
296
+ },
297
+ { disambiguation: 'compatible' }
298
+ );
299
+ return zdt.epochMilliseconds;
300
+ }
301
+ return intlFieldsToEpoch(w, tz);
302
+ }
303
+
304
+ function intlFieldsToEpoch(w: WallClock, tz: string): number {
305
+ const asUTC = Date.UTC(
306
+ w.year,
307
+ w.month - 1,
308
+ w.day,
309
+ w.hour,
310
+ w.minute,
311
+ w.second,
312
+ w.millisecond
313
+ );
314
+ const offset0 = getTimeZoneOffsetMs(asUTC, tz);
315
+ const guess = asUTC - offset0;
316
+ const offset1 = getTimeZoneOffsetMs(guess, tz);
317
+ if (offset0 === offset1) {
318
+ return guess;
319
+ }
320
+ return asUTC - offset1;
321
+ }
@@ -0,0 +1,204 @@
1
+ /**
2
+ * Copyright Aquera Inc 2026
3
+ *
4
+ * This source code is licensed under the BSD-3-Clause license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+
8
+ import { css } from 'lit';
9
+
10
+ export const styles = css`
11
+ :host {
12
+ display: block;
13
+ font-family: var(--nile-font-family-serif, var(--ng-font-family-body));
14
+ color: var(--nile-colors-dark-900, var(--ng-colors-text-primary-900));
15
+ }
16
+
17
+ :host([disabled]) {
18
+ pointer-events: none;
19
+ }
20
+
21
+ :host([disabled]) .tsb__collapsed,
22
+ :host([disabled]) .tsb__expanded {
23
+ background: var(
24
+ --nile-colors-neutral-100,
25
+ var(--ng-colors-bg-disabled-subtle)
26
+ );
27
+ border-color: var(
28
+ --nile-colors-neutral-500,
29
+ var(--ng-colors-border-disabled-subtle)
30
+ );
31
+ }
32
+
33
+ :host([disabled]) .tsb__label,
34
+ :host([disabled]) .tsb__value,
35
+ :host([disabled]) .tsb__tz {
36
+ color: var(--nile-colors-text-disabled, var(--ng-colors-text-disabled));
37
+ }
38
+
39
+ .tsb {
40
+ display: flex;
41
+ flex-direction: column;
42
+ gap: var(--nile-spacing-md, var(--ng-spacing-md));
43
+ }
44
+
45
+ .tsb__label {
46
+ font-size: var(--nile-type-scale-3, var(--ng-font-size-text-sm));
47
+ font-weight: var(--nile-font-weight-medium, var(--ng-font-weight-medium));
48
+ line-height: var(--nile-line-height-small, var(--ng-line-height-text-sm));
49
+ }
50
+
51
+ /* Collapsed view */
52
+ .tsb__collapsed {
53
+ display: flex;
54
+ align-items: center;
55
+ flex-wrap: wrap;
56
+ gap: var(--nile-spacing-lg, var(--ng-spacing-lg));
57
+ padding: var(--nile-spacing-lg, var(--ng-spacing-lg))
58
+ var(--nile-spacing-xl, var(--ng-spacing-xl));
59
+ border: var(--nile-border-width-1, var(--ng-border-width-1)) solid
60
+ var(--nile-colors-gray-300, var(--ng-colors-border-primary));
61
+ border-radius: var(--nile-radius-md, var(--ng-radius-md));
62
+ background: var(--nile-colors-white, var(--ng-colors-bg-primary));
63
+ min-height: var(--nile-height-28px, var(--ng-height-28px));
64
+ }
65
+
66
+ .tsb__collapsed .tsb__actions nile-button::part(base) {
67
+ height: var(--nile-height-28px, var(--ng-height-28px));
68
+ padding-block: var(--nile-spacing-none, var(--ng-spacing-none));
69
+ }
70
+
71
+ .tsb__display {
72
+ display: flex;
73
+ align-items: baseline;
74
+ flex-wrap: wrap;
75
+ gap: var(--nile-spacing-lg, var(--ng-spacing-lg));
76
+ flex: 1 1 var(--nile-width-208px, var(--ng-width-56));
77
+ min-width: 0;
78
+ }
79
+
80
+ .tsb__display--editable {
81
+ cursor: pointer;
82
+ user-select: none;
83
+ -webkit-user-select: none;
84
+ touch-action: manipulation;
85
+ }
86
+
87
+ .tsb__display:focus-visible {
88
+ outline: var(--nile-border-width-2, var(--ng-border-width-2)) solid
89
+ var(--nile-colors-border-field-focused, var(--ng-colors-border-brand));
90
+ outline-offset: var(--nile-spacing-xxs, var(--ng-spacing-xxs));
91
+ border-radius: var(--nile-radius-sm, var(--ng-radius-sm));
92
+ }
93
+
94
+ .tsb__value {
95
+ font-family: var(--nile-font-family-serif, var(--ng-font-family-body));
96
+ font-variant-numeric: tabular-nums;
97
+ font-size: var(--nile-type-scale-4, var(--ng-font-size-text-md));
98
+ font-weight: var(--nile-font-weight-semibold, var(--ng-font-weight-medium));
99
+ letter-spacing: 0.01em;
100
+ overflow-wrap: normal;
101
+ }
102
+
103
+ .tsb__value--empty {
104
+ color: var(--nile-colors-gray-400, var(--ng-colors-text-placeholder));
105
+ font-weight: var(--nile-font-weight-regular, var(--ng-font-weight-regular));
106
+ }
107
+
108
+ .tsb__tz {
109
+ font-size: var(--nile-type-scale-3, var(--ng-font-size-text-sm));
110
+ color: var(--nile-colors-gray-500, var(--ng-colors-text-tertiary-600));
111
+ white-space: nowrap;
112
+ }
113
+
114
+ .tsb__actions {
115
+ display: flex;
116
+ align-items: center;
117
+ gap: var(--nile-spacing-md, var(--ng-spacing-md));
118
+ flex-wrap: wrap;
119
+ justify-content: flex-end;
120
+ margin-left: auto;
121
+ flex: 0 0 auto;
122
+ }
123
+
124
+ /* Expanded view */
125
+ .tsb__expanded {
126
+ display: flex;
127
+ flex-direction: column;
128
+ gap: var(--nile-spacing-lg, var(--ng-spacing-lg));
129
+ padding: var(--nile-spacing-xl, var(--ng-spacing-xl));
130
+ border: var(--nile-border-width-1, var(--ng-border-width-1)) solid
131
+ var(--nile-colors-gray-300, var(--ng-colors-border-primary));
132
+ border-radius: var(--nile-radius-md, var(--ng-radius-md));
133
+ background: var(--nile-colors-white, var(--ng-colors-bg-primary));
134
+ }
135
+
136
+ .tsb__fields {
137
+ display: grid;
138
+ grid-template-columns: repeat(
139
+ auto-fit,
140
+ minmax(var(--nile-width-99px, var(--ng-width-24)), 1fr)
141
+ );
142
+ gap: var(--nile-spacing-md, var(--ng-spacing-md));
143
+ }
144
+
145
+ .tsb__field {
146
+ display: flex;
147
+ flex-direction: column;
148
+ min-width: 0;
149
+ width: 100%;
150
+ max-width: var(--nile-width-110px, var(--ng-width-108));
151
+ }
152
+
153
+ .tsb__field nile-input::part(input) {
154
+ padding-inline: var(--nile-spacing-sm, var(--ng-spacing-sm));
155
+ text-align: center;
156
+ }
157
+
158
+ .tsb__field nile-input::part(form-control-label) {
159
+ display: block;
160
+ overflow: hidden;
161
+ text-overflow: ellipsis;
162
+ white-space: nowrap;
163
+ }
164
+
165
+ .tsb__timezone {
166
+ display: flex;
167
+ flex-direction: column;
168
+ }
169
+
170
+ @media (max-width: 480px) {
171
+ .tsb__collapsed,
172
+ .tsb__expanded {
173
+ padding: var(--nile-spacing-lg, var(--ng-spacing-lg));
174
+ }
175
+
176
+
177
+ .tsb__actions {
178
+ width: 100%;
179
+ margin-left: 0;
180
+ }
181
+
182
+
183
+ [part='editor-actions'] nile-button {
184
+ flex: 1 1 var(--nile-width-130px, var(--ng-width-32));
185
+ }
186
+
187
+ [part='editor-actions'] nile-button::part(base) {
188
+ width: 100%;
189
+ }
190
+ }
191
+
192
+ /* Visually-hidden hidden input used for form participation / validity. */
193
+ .value-input {
194
+ position: absolute;
195
+ width: 1px;
196
+ height: 1px;
197
+ padding: 0;
198
+ margin: -1px;
199
+ overflow: hidden;
200
+ clip: rect(0, 0, 0, 0);
201
+ white-space: nowrap;
202
+ border: 0;
203
+ }
204
+ `;