@rbxts/uiblox 0.2.0-alpha.37 → 0.2.0-alpha.38

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 (212) hide show
  1. package/README.md +1 -18
  2. package/out/theme/constants/NumberConstants.d.ts +10 -0
  3. package/out/theme/constants/NumberConstants.luau +12 -0
  4. package/out/theme/interfaces/density/controlMetrics.luau +2 -2
  5. package/out/theme/interfaces/palette/Palette.d.ts +7 -0
  6. package/out/theme/interfaces/spacing/Shape.d.ts +6 -0
  7. package/out/theme/interfaces/theme/Theme.d.ts +6 -0
  8. package/out/theme/interfaces/typography/FontFamilies.luau +1 -0
  9. package/out/theme/interfaces/typography/FontFamilyOptions.d.ts +1 -1
  10. package/out/theme/interfaces/typography/FontSizeOptions.d.ts +1 -1
  11. package/out/theme/interfaces/typography/FontSizes.luau +2 -0
  12. package/out/theme/interfaces/typography/Variants.d.ts +3 -1
  13. package/out/theme/interfaces/typography/Variants.luau +25 -1
  14. package/out/theme/styles/utilities/focusRing.d.ts +2 -0
  15. package/out/theme/styles/utilities/focusRing.luau +3 -0
  16. package/out/theme/styles/utilities/index.d.ts +1 -1
  17. package/out/theme/styles/utilities/init.luau +3 -1
  18. package/out/theme/themes/DarkTheme.luau +4 -0
  19. package/out/theme/themes/LightTheme.luau +4 -0
  20. package/out/theme/themes/createPalette.luau +15 -0
  21. package/out/ui/packages/accordion/components/Accordion.luau +84 -40
  22. package/out/ui/packages/accordion/components/Accordion.styles.luau +35 -17
  23. package/out/ui/packages/alert/components/Alert.luau +15 -11
  24. package/out/ui/packages/alert/components/Alert.styles.luau +37 -26
  25. package/out/ui/packages/appBar/components/AppBar.luau +35 -13
  26. package/out/ui/packages/appBar/components/AppBar.styles.luau +41 -35
  27. package/out/ui/packages/autocomplete/components/Autocomplete.luau +4 -0
  28. package/out/ui/packages/avatar/components/Avatar.d.ts +2 -0
  29. package/out/ui/packages/avatar/components/Avatar.luau +9 -2
  30. package/out/ui/packages/avatar/components/Avatar.styles.luau +7 -0
  31. package/out/ui/packages/avatarGroup/components/AvatarGroup.luau +9 -4
  32. package/out/ui/packages/avatarGroup/components/AvatarGroup.styles.luau +6 -1
  33. package/out/ui/packages/badge/components/Badge.luau +14 -11
  34. package/out/ui/packages/badge/components/Badge.styles.luau +5 -1
  35. package/out/ui/packages/bottomNavigation/components/BottomNavigation.styles.luau +4 -3
  36. package/out/ui/packages/breadcrumbs/components/Breadcrumbs.luau +6 -2
  37. package/out/ui/packages/breadcrumbs/components/Breadcrumbs.styles.luau +4 -0
  38. package/out/ui/packages/brickColorPicker/components/BrickColorPicker.luau +20 -2
  39. package/out/ui/packages/brickColorPicker/components/BrickColorPicker.styles.luau +72 -66
  40. package/out/ui/packages/button/components/Button.luau +61 -34
  41. package/out/ui/packages/button/components/buttonPaint.d.ts +16 -0
  42. package/out/ui/packages/button/components/buttonPaint.luau +70 -0
  43. package/out/ui/packages/buttonGroup/components/ButtonGroup.d.ts +1 -0
  44. package/out/ui/packages/buttonGroup/components/ButtonGroup.luau +17 -2
  45. package/out/ui/packages/card/components/Card.styles.luau +4 -2
  46. package/out/ui/packages/cframeEditor/components/CFrameEditor.luau +9 -1
  47. package/out/ui/packages/cframeEditor/components/CFrameEditor.styles.luau +50 -41
  48. package/out/ui/packages/checkbox/components/Checkbox.luau +5 -4
  49. package/out/ui/packages/checkbox/components/checkboxLook.d.ts +2 -2
  50. package/out/ui/packages/checkbox/components/checkboxLook.luau +2 -2
  51. package/out/ui/packages/chip/components/Chip.luau +16 -14
  52. package/out/ui/packages/chip/components/Chip.styles.luau +7 -4
  53. package/out/ui/packages/circularProgress/components/CircularProgress.luau +10 -3
  54. package/out/ui/packages/codeEditor/components/CodeEditor.d.ts +12 -0
  55. package/out/ui/packages/codeEditor/components/CodeEditor.luau +262 -0
  56. package/out/ui/packages/codeEditor/components/CodeEditor.styles.d.ts +6 -0
  57. package/out/ui/packages/codeEditor/components/CodeEditor.styles.luau +124 -0
  58. package/out/ui/packages/codeEditor/highlightCode.d.ts +11 -0
  59. package/out/ui/packages/codeEditor/highlightCode.luau +503 -0
  60. package/out/ui/packages/codeEditor/index.d.ts +2 -0
  61. package/out/ui/packages/codeEditor/init.luau +5 -0
  62. package/out/ui/packages/colorPicker/components/ColorPicker.luau +9 -1
  63. package/out/ui/packages/colorPicker/components/ColorPicker.styles.luau +74 -67
  64. package/out/ui/packages/colorPicker/components/ColorSequenceEditor.luau +12 -4
  65. package/out/ui/packages/colorPicker/components/NumberSequenceEditor.luau +12 -4
  66. package/out/ui/packages/dateRange/components/DateRangePicker.luau +31 -19
  67. package/out/ui/packages/dialog/components/Dialog.styles.luau +4 -2
  68. package/out/ui/packages/divider/components/Divider.luau +3 -1
  69. package/out/ui/packages/divider/components/Divider.styles.luau +1 -0
  70. package/out/ui/packages/drawer/components/Drawer.d.ts +1 -0
  71. package/out/ui/packages/drawer/components/Drawer.luau +43 -14
  72. package/out/ui/packages/drawer/components/Drawer.styles.luau +13 -5
  73. package/out/ui/packages/drawer/components/drawerPlacement.d.ts +2 -0
  74. package/out/ui/packages/drawer/components/drawerPlacement.luau +18 -0
  75. package/out/ui/packages/editorFace.d.ts +22 -0
  76. package/out/ui/packages/editorFace.luau +49 -0
  77. package/out/ui/packages/fab/components/Fab.luau +19 -6
  78. package/out/ui/packages/fab/components/Fab.styles.luau +4 -3
  79. package/out/ui/packages/fab/components/fabSize.d.ts +1 -1
  80. package/out/ui/packages/fontEditor/components/FontEditor.luau +13 -3
  81. package/out/ui/packages/fontEditor/components/FontEditor.styles.luau +36 -27
  82. package/out/ui/packages/gradientEditor/components/GradientEditor.luau +21 -13
  83. package/out/ui/packages/gradientEditor/components/GradientEditor.styles.luau +52 -44
  84. package/out/ui/packages/icon/components/DrawnGlyph.d.ts +11 -0
  85. package/out/ui/packages/icon/components/DrawnGlyph.luau +87 -0
  86. package/out/ui/packages/icon/components/Icon.d.ts +6 -2
  87. package/out/ui/packages/icon/components/Icon.luau +23 -3
  88. package/out/ui/packages/icon/components/Icon.styles.luau +3 -0
  89. package/out/ui/packages/icon/components/glyphs.d.ts +28 -0
  90. package/out/ui/packages/icon/components/glyphs.luau +64 -0
  91. package/out/ui/packages/icon/index.d.ts +1 -0
  92. package/out/ui/packages/iconButton/components/IconButton.d.ts +5 -2
  93. package/out/ui/packages/iconButton/components/IconButton.luau +83 -16
  94. package/out/ui/packages/iconButton/components/IconButton.styles.luau +4 -27
  95. package/out/ui/packages/iconButton/components/iconButtonBox.d.ts +11 -0
  96. package/out/ui/packages/iconButton/components/iconButtonBox.luau +48 -0
  97. package/out/ui/packages/iconButton/components/transportGlyph.d.ts +1 -0
  98. package/out/ui/packages/iconButton/components/transportGlyph.luau +4 -0
  99. package/out/ui/packages/imageList/components/ImageList.luau +11 -36
  100. package/out/ui/packages/imageList/components/ImageList.styles.luau +1 -0
  101. package/out/ui/packages/imageList/components/imageListLayout.d.ts +0 -2
  102. package/out/ui/packages/imageList/components/imageListLayout.luau +0 -8
  103. package/out/ui/packages/index.d.ts +1 -0
  104. package/out/ui/packages/init.luau +3 -0
  105. package/out/ui/packages/input/components/Input.luau +46 -29
  106. package/out/ui/packages/input/components/Input.styles.luau +8 -11
  107. package/out/ui/packages/input/components/fieldChrome.d.ts +5 -0
  108. package/out/ui/packages/input/components/fieldChrome.luau +11 -0
  109. package/out/ui/packages/layout/components/Box.luau +92 -13
  110. package/out/ui/packages/layout/components/Box.styles.d.ts +0 -2
  111. package/out/ui/packages/layout/components/Box.styles.luau +0 -9
  112. package/out/ui/packages/layout/components/Grid.luau +81 -16
  113. package/out/ui/packages/layout/components/Pad.d.ts +24 -0
  114. package/out/ui/packages/layout/components/Pad.luau +88 -0
  115. package/out/ui/packages/layout/components/Stack.luau +79 -13
  116. package/out/ui/packages/link/components/Link.luau +19 -13
  117. package/out/ui/packages/link/components/Link.styles.luau +10 -1
  118. package/out/ui/packages/listItem/components/ListItem.luau +61 -4
  119. package/out/ui/packages/listItem/components/ListItem.styles.d.ts +1 -0
  120. package/out/ui/packages/listItem/components/ListItem.styles.luau +28 -11
  121. package/out/ui/packages/listItem/components/listItemInk.d.ts +1 -1
  122. package/out/ui/packages/listItem/components/listItemLayout.d.ts +12 -2
  123. package/out/ui/packages/listItem/components/listItemLayout.luau +29 -2
  124. package/out/ui/packages/markdown/components/Markdown.luau +163 -50
  125. package/out/ui/packages/markdown/components/Markdown.styles.luau +125 -76
  126. package/out/ui/packages/markdown/components/MarkdownEditor.luau +215 -146
  127. package/out/ui/packages/markdown/components/MarkdownEditor.styles.d.ts +1 -0
  128. package/out/ui/packages/markdown/components/MarkdownEditor.styles.luau +153 -83
  129. package/out/ui/packages/markdown/index.d.ts +1 -1
  130. package/out/ui/packages/markdown/parseMarkdown.d.ts +9 -1
  131. package/out/ui/packages/markdown/parseMarkdown.luau +350 -29
  132. package/out/ui/packages/menu/components/Menu.d.ts +1 -1
  133. package/out/ui/packages/menu/components/Menu.luau +12 -11
  134. package/out/ui/packages/menu/components/Menu.styles.luau +6 -1
  135. package/out/ui/packages/menu/components/menuIcon.d.ts +1 -1
  136. package/out/ui/packages/numberInput/components/NumberInput.luau +19 -4
  137. package/out/ui/packages/numberRangeEditor/components/NumberRangeEditor.luau +9 -1
  138. package/out/ui/packages/numberRangeEditor/components/NumberRangeEditor.styles.luau +23 -16
  139. package/out/ui/packages/pager/components/Pager.luau +15 -13
  140. package/out/ui/packages/pager/components/Pager.styles.luau +5 -0
  141. package/out/ui/packages/pagination/components/Pagination.styles.luau +4 -1
  142. package/out/ui/packages/paper/components/Paper.luau +17 -11
  143. package/out/ui/packages/paper/components/Paper.styles.luau +12 -5
  144. package/out/ui/packages/physicalPropertiesEditor/components/PhysicalPropertiesEditor.luau +9 -1
  145. package/out/ui/packages/physicalPropertiesEditor/components/PhysicalPropertiesEditor.styles.luau +24 -19
  146. package/out/ui/packages/popover/components/Popover.d.ts +1 -1
  147. package/out/ui/packages/popover/components/Popover.luau +6 -4
  148. package/out/ui/packages/popover/components/Popover.styles.luau +6 -0
  149. package/out/ui/packages/popup/components/Popup.d.ts +2 -0
  150. package/out/ui/packages/popup/components/Popup.luau +64 -2
  151. package/out/ui/packages/popup/components/placement.luau +6 -4
  152. package/out/ui/packages/progressBar/components/ProgressBar.luau +1 -1
  153. package/out/ui/packages/progressBar/components/ProgressBar.styles.luau +3 -2
  154. package/out/ui/packages/radioGroup/components/RadioGroup.luau +2 -1
  155. package/out/ui/packages/rating/components/Rating.luau +45 -3
  156. package/out/ui/packages/rating/components/Rating.styles.luau +1 -1
  157. package/out/ui/packages/rayEditor/components/RayEditor.luau +9 -1
  158. package/out/ui/packages/rayEditor/components/RayEditor.styles.luau +17 -11
  159. package/out/ui/packages/rectEditor/components/RectEditor.luau +9 -1
  160. package/out/ui/packages/rectEditor/components/RectEditor.styles.luau +49 -42
  161. package/out/ui/packages/select/components/Select.d.ts +2 -0
  162. package/out/ui/packages/select/components/Select.luau +148 -106
  163. package/out/ui/packages/select/components/Select.styles.d.ts +2 -0
  164. package/out/ui/packages/select/components/Select.styles.luau +29 -5
  165. package/out/ui/packages/shadow/components/Shadow.luau +188 -19
  166. package/out/ui/packages/sidebar/components/Sidebar.styles.luau +1 -0
  167. package/out/ui/packages/skeleton/components/Skeleton.luau +4 -0
  168. package/out/ui/packages/slider/components/RangeSlider.luau +6 -5
  169. package/out/ui/packages/slider/components/Slider.luau +11 -16
  170. package/out/ui/packages/sparkline/components/Sparkline.luau +7 -5
  171. package/out/ui/packages/speedDial/components/SpeedDial.luau +4 -1
  172. package/out/ui/packages/speedDial/components/SpeedDial.styles.luau +5 -0
  173. package/out/ui/packages/speedDial/components/speedDialLabel.d.ts +1 -1
  174. package/out/ui/packages/splitPane/components/splitLook.d.ts +1 -1
  175. package/out/ui/packages/stepper/components/Stepper.styles.luau +9 -6
  176. package/out/ui/packages/switch/components/Switch.luau +2 -2
  177. package/out/ui/packages/switch/components/switchLook.d.ts +3 -3
  178. package/out/ui/packages/switch/components/switchLook.luau +4 -10
  179. package/out/ui/packages/table/components/Table.d.ts +1 -0
  180. package/out/ui/packages/table/components/Table.luau +92 -53
  181. package/out/ui/packages/table/components/Table.styles.luau +23 -6
  182. package/out/ui/packages/table/components/tableColumns.d.ts +2 -0
  183. package/out/ui/packages/table/components/tableColumns.luau +2 -0
  184. package/out/ui/packages/tabs/components/Tabs.luau +7 -4
  185. package/out/ui/packages/tabs/components/Tabs.styles.luau +12 -11
  186. package/out/ui/packages/tabs/components/tabIndicator.d.ts +7 -0
  187. package/out/ui/packages/tabs/components/tabIndicator.luau +21 -0
  188. package/out/ui/packages/text/components/Text.d.ts +2 -0
  189. package/out/ui/packages/text/components/Text.luau +12 -2
  190. package/out/ui/packages/timeField/components/TimeField.luau +11 -7
  191. package/out/ui/packages/timeline/components/Timeline.luau +35 -32
  192. package/out/ui/packages/timeline/components/Timeline.styles.luau +19 -10
  193. package/out/ui/packages/toast/components/Toast.luau +168 -72
  194. package/out/ui/packages/toast/components/Toast.styles.luau +36 -19
  195. package/out/ui/packages/toast/components/toastPlace.d.ts +4 -0
  196. package/out/ui/packages/toast/components/toastPlace.luau +13 -0
  197. package/out/ui/packages/toast/enums/ToastVariants.d.ts +2 -1
  198. package/out/ui/packages/toast/enums/ToastVariants.luau +1 -0
  199. package/out/ui/packages/toggleButton/components/ToggleButton.luau +43 -4
  200. package/out/ui/packages/toggleButton/components/ToggleButton.styles.luau +1 -1
  201. package/out/ui/packages/tooltip/components/Tooltip.styles.luau +2 -2
  202. package/out/ui/packages/treeView/components/TreeView.luau +12 -13
  203. package/out/ui/packages/treeView/components/TreeView.styles.luau +6 -0
  204. package/out/ui/packages/typography/components/Typography.d.ts +2 -0
  205. package/out/ui/packages/typography/components/Typography.luau +8 -0
  206. package/out/ui/packages/typography/components/Typography.styles.luau +3 -1
  207. package/out/ui/packages/udimEditor/components/UDimEditor.luau +9 -1
  208. package/out/ui/packages/udimEditor/components/UDimEditor.styles.luau +25 -18
  209. package/out/ui/packages/vectorEditor/components/VectorEditor.luau +17 -3
  210. package/out/ui/packages/vectorEditor/components/VectorEditor.styles.luau +30 -16
  211. package/out/ui/packages/virtualList/components/VirtualList.styles.luau +1 -0
  212. package/package.json +69 -67
@@ -46,6 +46,71 @@ local function trim(value)
46
46
  local _stop = stop
47
47
  return string.sub(_value, _start, _stop)
48
48
  end
49
+ local function stripCr(raw)
50
+ local _condition = #raw > 0
51
+ if _condition then
52
+ local _raw = raw
53
+ local _arg0 = #raw
54
+ local _arg1 = #raw
55
+ _condition = string.sub(_raw, _arg0, _arg1) == "\r"
56
+ end
57
+ if _condition then
58
+ local _raw = raw
59
+ local _arg1 = #raw - 1
60
+ return string.sub(_raw, 1, _arg1)
61
+ end
62
+ return raw
63
+ end
64
+ --* Two trailing spaces end a paragraph line. A trailing backslash is not a break.
65
+ local function endsWithHardBreak(raw)
66
+ local line = stripCr(raw)
67
+ local _condition = #line >= 2
68
+ if _condition then
69
+ local _arg0 = #line - 1
70
+ local _arg1 = #line
71
+ _condition = string.sub(line, _arg0, _arg1) == " "
72
+ end
73
+ return _condition
74
+ end
75
+ local function withoutHardBreak(raw)
76
+ local line = stripCr(raw)
77
+ if not endsWithHardBreak(line) then
78
+ return trimEnd(line)
79
+ end
80
+ local _arg1 = #line - 2
81
+ return trimEnd(string.sub(line, 1, _arg1))
82
+ end
83
+ --* Adjacent lines join with a space. A hard break on the previous line inserts a newline.
84
+ local function foldLines(rawLines)
85
+ local acc = ""
86
+ local breakNext = false
87
+ for index = 0, #rawLines - 1 do
88
+ local text = withoutHardBreak(rawLines[index + 1])
89
+ if index == 0 then
90
+ acc = text
91
+ elseif breakNext then
92
+ acc = `{acc}\n{text}`
93
+ else
94
+ acc = if #acc == 0 then text else `{acc} {text}`
95
+ end
96
+ breakNext = endsWithHardBreak(rawLines[index + 1])
97
+ end
98
+ return acc
99
+ end
100
+ --* `>` or `> ` starts a quote line. `>>` does not, so it stays ordinary text.
101
+ local function quoteBody(raw)
102
+ local line = stripCr(raw)
103
+ if #line == 0 or string.sub(line, 1, 1) ~= ">" then
104
+ return nil
105
+ end
106
+ if #line == 1 then
107
+ return ""
108
+ end
109
+ if string.sub(line, 2, 2) ~= " " then
110
+ return nil
111
+ end
112
+ return string.sub(line, 3)
113
+ end
49
114
  local function headingLevel(line)
50
115
  local n = 0
51
116
  while true do
@@ -240,6 +305,138 @@ local function isHr(line)
240
305
  end
241
306
  return true
242
307
  end
308
+ --* Split a pipe row. Leading and trailing pipes are optional. `\|` is a literal pipe.
309
+ local function splitCells(line)
310
+ local t = trim(line)
311
+ if (string.find(t, "|", 1, true)) == nil then
312
+ return nil
313
+ end
314
+ local body = t
315
+ if string.sub(body, 1, 1) == "|" then
316
+ body = string.sub(body, 2)
317
+ end
318
+ local _condition = #body > 0
319
+ if _condition then
320
+ local _body = body
321
+ local _arg0 = #body
322
+ local _arg1 = #body
323
+ _condition = string.sub(_body, _arg0, _arg1) == "|"
324
+ end
325
+ if _condition then
326
+ local _body = body
327
+ local _arg1 = #body - 1
328
+ body = string.sub(_body, 1, _arg1)
329
+ end
330
+ local cells = {}
331
+ local buf = ""
332
+ local i = 1
333
+ while i <= #body do
334
+ local _body = body
335
+ local _i = i
336
+ local _i_1 = i
337
+ local ch = string.sub(_body, _i, _i_1)
338
+ local _condition_1 = ch == "\\" and i < #body
339
+ if _condition_1 then
340
+ local _body_1 = body
341
+ local _arg0 = i + 1
342
+ local _arg1 = i + 1
343
+ _condition_1 = string.sub(_body_1, _arg0, _arg1) == "|"
344
+ end
345
+ if _condition_1 then
346
+ buf = `{buf}|`
347
+ i += 2
348
+ continue
349
+ end
350
+ if ch == "|" then
351
+ local _arg0 = trim(buf)
352
+ table.insert(cells, _arg0)
353
+ buf = ""
354
+ i += 1
355
+ continue
356
+ end
357
+ buf = `{buf}{ch}`
358
+ i += 1
359
+ end
360
+ local _arg0 = trim(buf)
361
+ table.insert(cells, _arg0)
362
+ return cells
363
+ end
364
+ local function cellAlign(cell)
365
+ local t = trim(cell)
366
+ local i = 1
367
+ local left = false
368
+ local right = false
369
+ if string.sub(t, 1, 1) == ":" then
370
+ left = true
371
+ i = 2
372
+ end
373
+ local dashes = 0
374
+ while true do
375
+ local _condition = i <= #t
376
+ if _condition then
377
+ local _i = i
378
+ local _i_1 = i
379
+ _condition = string.sub(t, _i, _i_1) == "-"
380
+ end
381
+ if not _condition then
382
+ break
383
+ end
384
+ dashes += 1
385
+ i += 1
386
+ end
387
+ local _condition = i <= #t
388
+ if _condition then
389
+ local _i = i
390
+ local _i_1 = i
391
+ _condition = string.sub(t, _i, _i_1) == ":"
392
+ end
393
+ if _condition then
394
+ right = true
395
+ i += 1
396
+ end
397
+ if i <= #t or dashes < 3 then
398
+ return nil
399
+ end
400
+ if left and right then
401
+ return "center"
402
+ end
403
+ if right then
404
+ return "right"
405
+ end
406
+ return "left"
407
+ end
408
+ local function delimiterAlign(cells)
409
+ if #cells == 0 then
410
+ return nil
411
+ end
412
+ local align = {}
413
+ for _, cell in cells do
414
+ local aligned = cellAlign(cell)
415
+ if aligned == nil then
416
+ return nil
417
+ end
418
+ table.insert(align, aligned)
419
+ end
420
+ return align
421
+ end
422
+ local function tableAt(lines, index)
423
+ if index + 1 >= #lines then
424
+ return nil
425
+ end
426
+ local header = splitCells(trimEnd(lines[index + 1]))
427
+ local delim = splitCells(trimEnd(lines[index + 2]))
428
+ if header == nil or delim == nil then
429
+ return nil
430
+ end
431
+ local align = delimiterAlign(delim)
432
+ if align == nil or #align ~= #header then
433
+ return nil
434
+ end
435
+ return {
436
+ align = align,
437
+ header = header,
438
+ }
439
+ end
243
440
  local function listMarker(line)
244
441
  local t = trim(line)
245
442
  if #t >= 2 and (string.sub(t, 1, 2) == "- " or string.sub(t, 1, 2) == "* ") then
@@ -275,6 +472,24 @@ local function listMarker(line)
275
472
  end
276
473
  return nil
277
474
  end
475
+ local function codeLanguage(info)
476
+ local _condition = string.split(trim(info), " ")[1]
477
+ if _condition == nil then
478
+ _condition = ""
479
+ end
480
+ local token = _condition
481
+ local name = string.lower(token)
482
+ if name == "luau" then
483
+ return "luau"
484
+ end
485
+ if name == "ts" then
486
+ return "ts"
487
+ end
488
+ if name == "json" then
489
+ return "json"
490
+ end
491
+ return "text"
492
+ end
278
493
  --* Small markdown subset → blocks. Unsupported syntax stays plain text.
279
494
  local function parseMarkdown(source)
280
495
  local lines = string.split(source, "\n")
@@ -288,6 +503,7 @@ local function parseMarkdown(source)
288
503
  continue
289
504
  end
290
505
  if #line >= 3 and string.sub(line, 1, 3) == "```" then
506
+ local language = codeLanguage(string.sub(line, 4))
291
507
  local body = {}
292
508
  i += 1
293
509
  while i < #lines and not (#lines[i + 1] >= 3 and string.sub(trim(lines[i + 1]), 1, 3) == "```") do
@@ -301,6 +517,7 @@ local function parseMarkdown(source)
301
517
  local _arg0 = {
302
518
  kind = "code",
303
519
  text = table.concat(body, "\n"),
520
+ language = language,
304
521
  }
305
522
  table.insert(blocks, _arg0)
306
523
  continue
@@ -325,20 +542,113 @@ local function parseMarkdown(source)
325
542
  i += 1
326
543
  continue
327
544
  end
328
- if string.sub(line, 1, 1) == ">" and (#line == 1 or string.sub(line, 2, 2) == " ") then
329
- local parts = {}
545
+ if quoteBody(lines[i + 1]) ~= nil then
546
+ local groups = {}
547
+ local current = {}
548
+ while i < #lines do
549
+ local body = quoteBody(lines[i + 1])
550
+ if body == nil then
551
+ if trim(lines[i + 1]) ~= "" then
552
+ break
553
+ end
554
+ local ahead = i + 1
555
+ while ahead < #lines and trim(lines[ahead + 1]) == "" do
556
+ ahead += 1
557
+ end
558
+ if ahead >= #lines or quoteBody(lines[ahead + 1]) == nil then
559
+ break
560
+ end
561
+ body = ""
562
+ i = ahead
563
+ else
564
+ i += 1
565
+ end
566
+ if trim(body) == "" then
567
+ if #current > 0 then
568
+ local _current = current
569
+ table.insert(groups, _current)
570
+ end
571
+ current = {}
572
+ else
573
+ local _current = current
574
+ local _body = body
575
+ table.insert(_current, _body)
576
+ end
577
+ end
578
+ if #current > 0 then
579
+ local _current = current
580
+ table.insert(groups, _current)
581
+ end
582
+ if #groups == 0 then
583
+ table.insert(groups, {})
584
+ end
585
+ local _object = {
586
+ kind = "blockquote",
587
+ }
588
+ local _left = "paragraphs"
589
+ -- ▼ ReadonlyArray.map ▼
590
+ local _newValue = table.create(#groups)
591
+ local _callback = function(group)
592
+ -- ▼ ReadonlyArray.map ▼
593
+ local _newValue_1 = table.create(#group)
594
+ local _callback_1 = function(line)
595
+ return withoutHardBreak(line)
596
+ end
597
+ for _k, _v in group do
598
+ _newValue_1[_k] = _callback_1(_v, _k - 1, group)
599
+ end
600
+ -- ▲ ReadonlyArray.map ▲
601
+ return parseInlines(table.concat(_newValue_1, "\n"))
602
+ end
603
+ for _k, _v in groups do
604
+ _newValue[_k] = _callback(_v, _k - 1, groups)
605
+ end
606
+ -- ▲ ReadonlyArray.map ▲
607
+ _object[_left] = _newValue
608
+ table.insert(blocks, _object)
609
+ continue
610
+ end
611
+ local parsed = tableAt(lines, i)
612
+ if parsed ~= nil then
613
+ local _exp = parsed.header
614
+ -- ▼ ReadonlyArray.map ▼
615
+ local _newValue = table.create(#_exp)
616
+ local _callback = function(cell)
617
+ return parseInlines(cell)
618
+ end
619
+ for _k, _v in _exp do
620
+ _newValue[_k] = _callback(_v, _k - 1, _exp)
621
+ end
622
+ -- ▲ ReadonlyArray.map ▲
623
+ local header = _newValue
624
+ local rows = {}
625
+ i += 2
330
626
  while i < #lines do
331
627
  local cur = trimEnd(lines[i + 1])
332
- if not (string.sub(cur, 1, 1) == ">" and (#cur == 1 or string.sub(cur, 2, 2) == " ")) then
628
+ if trim(cur) == "" then
629
+ break
630
+ end
631
+ local row = splitCells(cur)
632
+ if row == nil then
333
633
  break
334
634
  end
335
- local _arg0 = if #cur >= 2 then string.sub(cur, 3) else ""
336
- table.insert(parts, _arg0)
635
+ local cells = {}
636
+ for col = 0, #parsed.align - 1 do
637
+ local _condition = row[col + 1]
638
+ if _condition == nil then
639
+ _condition = ""
640
+ end
641
+ local _arg0 = parseInlines(_condition)
642
+ table.insert(cells, _arg0)
643
+ end
644
+ table.insert(rows, cells)
337
645
  i += 1
338
646
  end
339
647
  local _arg0 = {
340
- kind = "blockquote",
341
- inlines = parseInlines(table.concat(parts, " ")),
648
+ kind = "table",
649
+ align = parsed.align,
650
+ header = header,
651
+ rows = rows,
342
652
  }
343
653
  table.insert(blocks, _arg0)
344
654
  continue
@@ -365,7 +675,7 @@ local function parseMarkdown(source)
365
675
  table.insert(blocks, _arg0)
366
676
  continue
367
677
  end
368
- local para = { line }
678
+ local rawPara = { lines[i + 1] }
369
679
  i += 1
370
680
  while i < #lines do
371
681
  local cur = trimEnd(lines[i + 1])
@@ -381,31 +691,22 @@ local function parseMarkdown(source)
381
691
  if headingLevel(cur) ~= nil then
382
692
  break
383
693
  end
384
- if string.sub(cur, 1, 1) == ">" and (#cur == 1 or string.sub(cur, 2, 2) == " ") then
694
+ if quoteBody(lines[i + 1]) ~= nil then
385
695
  break
386
696
  end
387
697
  if listMarker(cur) ~= nil then
388
698
  break
389
699
  end
390
- -- two trailing spaces = hard break
391
- local prev = para[#para]
392
- local _condition = #prev >= 2
393
- if _condition then
394
- local _arg0 = #prev - 1
395
- _condition = string.sub(prev, _arg0) == " "
396
- end
397
- if _condition then
398
- local _arg1 = #prev - 2
399
- para[#para] = trimEnd(string.sub(prev, 1, _arg1))
400
- table.insert(para, cur)
401
- else
402
- para[#para] = `{prev} {cur}`
700
+ if tableAt(lines, i) ~= nil then
701
+ break
403
702
  end
703
+ local _arg0 = lines[i + 1]
704
+ table.insert(rawPara, _arg0)
404
705
  i += 1
405
706
  end
406
707
  local _arg0 = {
407
708
  kind = "paragraph",
408
- inlines = parseInlines(table.concat(para, "\n")),
709
+ inlines = parseInlines(foldLines(rawPara)),
409
710
  }
410
711
  table.insert(blocks, _arg0)
411
712
  end
@@ -447,7 +748,7 @@ local function inlinesToRichText(inlines)
447
748
  elseif part.kind == "code" then
448
749
  out = `{out}<font face="RobotoMono">{escapeRich(part.text)}</font>`
449
750
  elseif part.kind == "link" then
450
- out = `{out}<font color="#4C9AFF"><u>{escapeRich(part.text)}</u></font>`
751
+ out = `{out}<u>{escapeRich(part.text)}</u>`
451
752
  end
452
753
  end
453
754
  return out
@@ -462,6 +763,21 @@ local function markdownLinkPayload(inline)
462
763
  href = inline.href,
463
764
  }
464
765
  end
766
+ local function isPunctuation(word)
767
+ if #word == 0 then
768
+ return false
769
+ end
770
+ for i = 1, #word do
771
+ local _word = word
772
+ local _i = i
773
+ local _i_1 = i
774
+ local ch = string.sub(_word, _i, _i_1)
775
+ if ch ~= "," and ch ~= "." and ch ~= ";" and ch ~= ":" and ch ~= "!" and ch ~= "?" and ch ~= ")" and ch ~= "]" then
776
+ return false
777
+ end
778
+ end
779
+ return true
780
+ end
465
781
  local function richWord(kind, word)
466
782
  local safe = escapeRich(word)
467
783
  if kind == "bold" then
@@ -497,11 +813,16 @@ local function inlinePieces(inlines)
497
813
  if #word == 0 then
498
814
  return nil
499
815
  end
500
- local _arg0 = {
501
- kind = "word",
502
- text = richWord(part.kind, word),
503
- }
504
- table.insert(out, _arg0)
816
+ local prev = out[#out]
817
+ if prev ~= nil and prev.kind ~= "break" and isPunctuation(word) then
818
+ prev.text = `{prev.text}{word}`
819
+ else
820
+ local _arg0 = {
821
+ kind = "word",
822
+ text = richWord(part.kind, word),
823
+ }
824
+ table.insert(out, _arg0)
825
+ end
505
826
  word = ""
506
827
  end
507
828
  local source = part.text
@@ -19,5 +19,5 @@ export interface MenuProps {
19
19
  dense?: boolean;
20
20
  selected?: string;
21
21
  }
22
- declare function Menu(props: CustomizedProps<Frame, MenuProps>): JSX.Element | undefined;
22
+ declare function Menu(props: CustomizedProps<Frame, MenuProps>): JSX.Element;
23
23
  export default Menu;
@@ -32,9 +32,6 @@ local function Menu(props)
32
32
  local _binding_1 = useTheme()
33
33
  local theme = _binding_1.theme
34
34
  local styles = useMenuStyles()
35
- if not open then
36
- return nil
37
- end
38
35
  local vacant = #items == 0
39
36
  -- ▼ ReadonlyArray.some ▼
40
37
  local _result = false
@@ -50,7 +47,7 @@ local function Menu(props)
50
47
  -- ▲ ReadonlyArray.some ▲
51
48
  local icons = _result
52
49
  local row = menuRow(dense, icons)
53
- local height = if vacant then menuRow(dense) else #items * row
50
+ local height = (if vacant then menuRow(dense) else #items * row) + theme.shape.borderRadius * 2 + 2
54
51
  local font = theme.typography.fontFamilies.default or Enum.Font.SourceSans
55
52
  local _condition = (if dense == true then theme.typography.fontSizes.caption else theme.typography.fontSizes.body)
56
53
  if _condition == nil then
@@ -85,21 +82,24 @@ local function Menu(props)
85
82
  local _attributes_2 = table.clone(styles.stroke)
86
83
  setmetatable(_attributes_2, nil)
87
84
  local _exp_1 = React.createElement("uistroke", _attributes_2)
88
- local _attributes_3 = table.clone(styles.list)
85
+ local _attributes_3 = table.clone(styles.inset)
89
86
  setmetatable(_attributes_3, nil)
90
- local _exp_2 = React.createElement("uilistlayout", _attributes_3)
87
+ local _exp_2 = React.createElement("uipadding", _attributes_3)
88
+ local _attributes_4 = table.clone(styles.list)
89
+ setmetatable(_attributes_4, nil)
90
+ local _exp_3 = React.createElement("uilistlayout", _attributes_4)
91
91
  local _result_1
92
92
  if vacant then
93
93
  local _condition_2 = empty
94
94
  if _condition_2 == nil then
95
- local _attributes_4 = {}
95
+ local _attributes_5 = {}
96
96
  local _condition_3 = emptyText
97
97
  if _condition_3 == nil then
98
98
  _condition_3 = "No options"
99
99
  end
100
- _attributes_4.text = _condition_3
101
- _attributes_4.height = row
102
- _condition_2 = React.createElement(EmptyListHint, _attributes_4)
100
+ _attributes_5.text = _condition_3
101
+ _attributes_5.height = row
102
+ _condition_2 = React.createElement(EmptyListHint, _attributes_5)
103
103
  end
104
104
  _result_1 = _condition_2
105
105
  else
@@ -137,11 +137,12 @@ local function Menu(props)
137
137
  _result_1 = (React.createElement(React.Fragment, nil, _newValue))
138
138
  end
139
139
  return React.createElement(Popup, {
140
+ open = open,
140
141
  anchor = anchor,
141
142
  preferredHeight = height,
142
143
  preferredWidth = width,
143
144
  onDismiss = onClose,
144
- }, React.createElement(SxHost, _attributes, _exp, _exp_1, _exp_2, _result_1))
145
+ }, React.createElement(SxHost, _attributes, _exp, _exp_1, _exp_2, _exp_3, _result_1))
145
146
  end
146
147
  local default = Menu
147
148
  return {
@@ -6,7 +6,8 @@ local componentStyles = _theme.componentStyles
6
6
  local useMenuStyles = componentStyles("Menu", function(theme)
7
7
  return createStyles({
8
8
  surface = {
9
- Size = UDim2.new(1, 0, 0, 0),
9
+ Position = UDim2.fromOffset(1, 1),
10
+ Size = UDim2.new(1, -2, 0, 0),
10
11
  AutomaticSize = Enum.AutomaticSize.Y,
11
12
  BackgroundColor3 = theme.palette.surface.elevated,
12
13
  BorderSizePixel = 0,
@@ -18,6 +19,10 @@ local useMenuStyles = componentStyles("Menu", function(theme)
18
19
  Color = theme.palette.border,
19
20
  ApplyStrokeMode = Enum.ApplyStrokeMode.Border,
20
21
  },
22
+ inset = {
23
+ PaddingTop = UDim.new(0, theme.shape.borderRadius),
24
+ PaddingBottom = UDim.new(0, theme.shape.borderRadius),
25
+ },
21
26
  list = {
22
27
  FillDirection = Enum.FillDirection.Vertical,
23
28
  SortOrder = Enum.SortOrder.LayoutOrder,
@@ -1,6 +1,6 @@
1
1
  /** An empty glyph stays off the row. */
2
2
  export declare function menuIcon(icon?: string): string | undefined;
3
3
  /** Icon rows need the leading slot. Plain rows stay the short menu height. */
4
- export declare function menuRow(dense?: boolean, icon?: boolean): 22 | 48 | 28 | 44;
4
+ export declare function menuRow(dense?: boolean, icon?: boolean): 28 | 22 | 44 | 48;
5
5
  /** Grow past a narrow anchor so the label and glyph fit. Stay at least as wide as the anchor. */
6
6
  export declare function menuWidth(text: number, icon: boolean, pad: number, floor: number): number;
@@ -1,7 +1,9 @@
1
1
  -- Compiled with roblox-ts v3.0.0
2
2
  local TS = _G[script]
3
3
  local React = TS.import(script, TS.getModule(script, "@rbxts", "react"))
4
- local useTheme = TS.import(script, script.Parent.Parent.Parent.Parent.Parent, "theme").useTheme
4
+ local _theme = TS.import(script, script.Parent.Parent.Parent.Parent.Parent, "theme")
5
+ local controlMetrics = _theme.controlMetrics
6
+ local useTheme = _theme.useTheme
5
7
  local Input = TS.import(script, script.Parent.Parent.Parent, "input").Input
6
8
  local _numberValue = TS.import(script, script.Parent, "numberValue")
7
9
  local formatNumber = _numberValue.formatNumber
@@ -12,13 +14,13 @@ local function StepButton(props)
12
14
  local theme = _binding.theme
13
15
  return React.createElement("textbutton", {
14
16
  LayoutOrder = props.order,
15
- Size = UDim2.fromOffset(28, 28),
17
+ Size = UDim2.fromOffset(props.extent, props.extent),
16
18
  BackgroundColor3 = theme.palette.surface.paper,
17
19
  BackgroundTransparency = if props.enabled then 0 else 0.45,
18
20
  BorderSizePixel = 0,
19
21
  Text = props.text,
20
22
  Font = theme.typography.fontFamilies.default,
21
- TextSize = theme.typography.fontSizes.body,
23
+ TextSize = props.font,
22
24
  TextColor3 = if props.enabled then theme.palette.text.primary else theme.palette.text.secondary,
23
25
  AutoButtonColor = props.enabled,
24
26
  Active = props.enabled,
@@ -31,6 +33,10 @@ local function StepButton(props)
31
33
  },
32
34
  }, React.createElement("uicorner", {
33
35
  CornerRadius = UDim.new(0, theme.shape.borderRadius),
36
+ }), React.createElement("uistroke", {
37
+ Color = theme.palette.border,
38
+ Thickness = 1,
39
+ ApplyStrokeMode = Enum.ApplyStrokeMode.Border,
34
40
  }))
35
41
  end
36
42
  local function NumberInput(props)
@@ -53,6 +59,8 @@ local function NumberInput(props)
53
59
  local sx = _binding.sx
54
60
  local id = _binding.id
55
61
  local ref = _binding.ref
62
+ local _binding_1 = useTheme()
63
+ local theme = _binding_1.theme
56
64
  local locked = disabled == true or readOnly == true
57
65
  local _attributes = {}
58
66
  local _condition = id
@@ -87,6 +95,9 @@ local function NumberInput(props)
87
95
  if stepper ~= true then
88
96
  return field
89
97
  end
98
+ local metrics = controlMetrics(theme.density, size)
99
+ local extent = metrics.height
100
+ local stepFont = math.floor(metrics.font * 1.5)
90
101
  local down = stepNumber(value, -1, min, max, step)
91
102
  local up = stepNumber(value, 1, min, max, step)
92
103
  return React.createElement("frame", {
@@ -100,8 +111,10 @@ local function NumberInput(props)
100
111
  VerticalAlignment = Enum.VerticalAlignment.Center,
101
112
  SortOrder = Enum.SortOrder.LayoutOrder,
102
113
  }), React.createElement(StepButton, {
103
- text = "-",
114
+ text = "−",
104
115
  order = 0,
116
+ extent = extent,
117
+ font = stepFont,
105
118
  enabled = not locked and down ~= nil,
106
119
  onClick = function()
107
120
  return down ~= nil and onChange(down)
@@ -115,6 +128,8 @@ local function NumberInput(props)
115
128
  }, field), React.createElement(StepButton, {
116
129
  text = "+",
117
130
  order = 2,
131
+ extent = extent,
132
+ font = stepFont,
118
133
  enabled = not locked and up ~= nil,
119
134
  onClick = function()
120
135
  return up ~= nil and onChange(up)
@@ -1,6 +1,7 @@
1
1
  -- Compiled with roblox-ts v3.0.0
2
2
  local TS = _G[script]
3
3
  local React = TS.import(script, TS.getModule(script, "@rbxts", "react"))
4
+ local useEditorHover = TS.import(script, script.Parent.Parent.Parent, "editorFace").useEditorHover
4
5
  local SxHost = TS.import(script, script.Parent.Parent.Parent, "host").SxHost
5
6
  local NumberInput = TS.import(script, script.Parent.Parent.Parent, "numberInput").NumberInput
6
7
  local useNumberRangeEditorStyles = TS.import(script, script.Parent, "NumberRangeEditor.styles").default
@@ -15,6 +16,7 @@ local function NumberRangeEditor(props)
15
16
  local id = _binding.id
16
17
  local ref = _binding.ref
17
18
  local styles = useNumberRangeEditorStyles()
19
+ local hover = useEditorHover(disabled)
18
20
  local commit = function(field, amount)
19
21
  local parts = writeNumberRange(value.Min, value.Max, field, amount)
20
22
  onChange(NumberRange.new(parts.Min, parts.Max))
@@ -28,12 +30,18 @@ local function NumberRangeEditor(props)
28
30
  end
29
31
  _attributes.key = _condition
30
32
  _attributes.hostRef = ref
31
- _attributes.base = styles.root
33
+ local _object = table.clone(styles.root)
34
+ setmetatable(_object, nil)
35
+ for _k, _v in hover.face do
36
+ _object[_k] = _v
37
+ end
38
+ _attributes.base = _object
32
39
  _attributes.className = className
33
40
  _attributes.sx = sx
34
41
  _attributes.state = {
35
42
  disabled = disabled,
36
43
  }
44
+ _attributes.Event = hover.event
37
45
  local _attributes_1 = table.clone(styles.row)
38
46
  setmetatable(_attributes_1, nil)
39
47
  local _exp = React.createElement("uilistlayout", _attributes_1)