@monimesl/dot-cli 1.0.0-beta.1 → 1.0.0-beta.11

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 (98) hide show
  1. package/README.md +22 -9
  2. package/dist/cli.js +15 -12
  3. package/dist/cli.js.map +1 -1
  4. package/dist/{server-DMnWDdJ6.js → server-BhnO9_Zu.js} +56 -7
  5. package/dist/server-BhnO9_Zu.js.map +1 -0
  6. package/dist/templates/showcase/.env +2 -2
  7. package/dist/templates/showcase/dot.ts +22 -2
  8. package/dist/templates/showcase/pages/basics/bars/controller.ts +2 -2
  9. package/dist/templates/showcase/pages/basics/bars/view.dml +2 -1
  10. package/dist/templates/showcase/pages/basics/bindings/state.ts +2 -2
  11. package/dist/templates/showcase/pages/basics/bindings/view.dml +2 -2
  12. package/dist/templates/showcase/pages/basics/colors/controller.ts +1 -1
  13. package/dist/templates/showcase/pages/basics/concert/view.dml +1 -1
  14. package/dist/templates/showcase/pages/basics/control-flow/controller.ts +1 -1
  15. package/dist/templates/showcase/pages/basics/control-flow/view.dml +1 -1
  16. package/dist/templates/showcase/pages/basics/events/controller.ts +1 -1
  17. package/dist/templates/showcase/pages/basics/events/view.dml +1 -1
  18. package/dist/templates/showcase/pages/basics/hooks/controller.ts +2 -1
  19. package/dist/templates/showcase/pages/basics/hooks/view.dml +2 -2
  20. package/dist/templates/showcase/pages/basics/navigation/controller.ts +1 -0
  21. package/dist/templates/showcase/pages/basics/navigation/view.dml +1 -1
  22. package/dist/templates/showcase/pages/basics/pick-genre/controller.ts +3 -3
  23. package/dist/templates/showcase/pages/basics/share/view.dml +2 -2
  24. package/dist/templates/showcase/pages/basics/state/controller.ts +9 -0
  25. package/dist/templates/showcase/pages/basics/state/state.ts +3 -0
  26. package/dist/templates/showcase/pages/basics/theme/controller.ts +28 -0
  27. package/dist/templates/showcase/pages/basics/theme/state.ts +4 -0
  28. package/dist/templates/showcase/pages/basics/theme/view.dml +50 -0
  29. package/dist/templates/showcase/pages/components/capture/controller.ts +25 -0
  30. package/dist/templates/showcase/pages/components/capture/state.ts +7 -0
  31. package/dist/templates/showcase/pages/components/capture/view.dml +32 -0
  32. package/dist/templates/showcase/pages/components/carousel/view.dml +2 -2
  33. package/dist/templates/showcase/pages/components/feedback/controller.ts +2 -1
  34. package/dist/templates/showcase/pages/components/feedback/state.ts +2 -2
  35. package/dist/templates/showcase/pages/components/feedback/view.dml +2 -2
  36. package/dist/templates/showcase/pages/components/forms/controller.ts +2 -2
  37. package/dist/templates/showcase/pages/components/forms/state.ts +1 -1
  38. package/dist/templates/showcase/pages/components/forms/view.dml +6 -5
  39. package/dist/templates/showcase/pages/components/icons/controller.ts +1 -0
  40. package/dist/templates/showcase/pages/components/icons/state.ts +1 -1
  41. package/dist/templates/showcase/pages/components/images/controller.ts +1 -1
  42. package/dist/templates/showcase/pages/components/images/state.ts +1 -1
  43. package/dist/templates/showcase/pages/components/images/view.dml +4 -4
  44. package/dist/templates/showcase/pages/components/layout/controller.ts +5 -1
  45. package/dist/templates/showcase/pages/components/layout/state.ts +2 -0
  46. package/dist/templates/showcase/pages/components/layout/view.dml +44 -6
  47. package/dist/templates/showcase/pages/components/lists/view.dml +12 -7
  48. package/dist/templates/showcase/pages/components/money/controller.ts +1 -1
  49. package/dist/templates/showcase/pages/components/money/view.dml +2 -2
  50. package/dist/templates/showcase/pages/components/pinned/controller.ts +10 -0
  51. package/dist/templates/showcase/pages/components/pinned/state.ts +25 -0
  52. package/dist/templates/showcase/pages/components/pinned/view.dml +42 -0
  53. package/dist/templates/showcase/pages/components/reading/state.ts +2 -2
  54. package/dist/templates/showcase/pages/components/sheets/controller.ts +1 -1
  55. package/dist/templates/showcase/pages/components/sheets/view.dml +1 -1
  56. package/dist/templates/showcase/pages/components/styles/view.dml +39 -4
  57. package/dist/templates/showcase/pages/components/tabs/state.ts +2 -2
  58. package/dist/templates/showcase/pages/components/tabs/view.dml +6 -5
  59. package/dist/templates/showcase/pages/components/text/view.dml +4 -4
  60. package/dist/templates/showcase/pages/dash/account/controller.ts +3 -0
  61. package/dist/templates/showcase/pages/dash/account/view.dml +2 -2
  62. package/dist/templates/showcase/pages/dash/cache/controller.ts +45 -16
  63. package/dist/templates/showcase/pages/dash/cache/state.ts +1 -0
  64. package/dist/templates/showcase/pages/dash/cache/view.dml +4 -0
  65. package/dist/templates/showcase/pages/dash/calls/controller.ts +3 -2
  66. package/dist/templates/showcase/pages/dash/contacts/controller.ts +1 -0
  67. package/dist/templates/showcase/pages/dash/crypto/controller.ts +2 -0
  68. package/dist/templates/showcase/pages/dash/crypto/view.dml +1 -1
  69. package/dist/templates/showcase/pages/dash/files/controller.ts +67 -32
  70. package/dist/templates/showcase/pages/dash/files/state.ts +1 -0
  71. package/dist/templates/showcase/pages/dash/files/view.dml +5 -1
  72. package/dist/templates/showcase/pages/dash/media/controller.ts +7 -1
  73. package/dist/templates/showcase/pages/dash/media/state.ts +2 -0
  74. package/dist/templates/showcase/pages/dash/network/controller.ts +5 -1
  75. package/dist/templates/showcase/pages/dash/network/view.dml +1 -1
  76. package/dist/templates/showcase/pages/dash/payments/cases.ts +40 -22
  77. package/dist/templates/showcase/pages/dash/payments/controller.ts +27 -3
  78. package/dist/templates/showcase/pages/dash/payments/state.ts +2 -0
  79. package/dist/templates/showcase/pages/dash/payments/view.dml +3 -1
  80. package/dist/templates/showcase/pages/dash/reminders/controller.ts +73 -0
  81. package/dist/templates/showcase/pages/dash/reminders/state.ts +6 -0
  82. package/dist/templates/showcase/pages/dash/reminders/view.dml +34 -0
  83. package/dist/templates/showcase/pages/dash/secrets/controller.ts +37 -14
  84. package/dist/templates/showcase/pages/dash/secrets/state.ts +1 -0
  85. package/dist/templates/showcase/pages/dash/secrets/view.dml +4 -0
  86. package/dist/templates/showcase/pages/dash/system/controller.ts +5 -0
  87. package/dist/templates/showcase/pages/dash/system/view.dml +4 -4
  88. package/dist/templates/showcase/pages/dash/ui/controller.ts +6 -1
  89. package/dist/templates/showcase/pages/index/controller.ts +1 -0
  90. package/dist/templates/showcase/pages/index/state.ts +30 -6
  91. package/dist/templates/showcase/statics/icons/ticket-stub.svg +1 -0
  92. package/dist/templates/starter/.env +2 -2
  93. package/dist/templates/starter/dot.ts +1 -0
  94. package/dist/templates/starter/pages/index/controller.ts +2 -0
  95. package/dist/templates/starter/pages/index/state.ts +2 -0
  96. package/dist/templates/starter/pages/index/view.dml +2 -1
  97. package/package.json +6 -6
  98. package/dist/server-DMnWDdJ6.js.map +0 -1
@@ -1,7 +1,7 @@
1
1
  import { t as findDotRoot } from "./cli.js";
2
2
  import { createRequire } from "node:module";
3
3
  import { dirname, join } from "node:path";
4
- import { CONTROL_FLOW_TAGS, DATA_PREFIX, ROOT_TAG, canHaveChildren, compileView, dataKey, listStatics } from "@monimesl/dot-compiler";
4
+ import { CONTROL_FLOW_TAGS, DATA_PREFIX, DOT_FILE, ROOT_TAG, canHaveChildren, compileView, dataKey, listStatics } from "@monimesl/dot-compiler";
5
5
  import { existsSync } from "node:fs";
6
6
  import { readFile } from "node:fs/promises";
7
7
  import { parseDmlToIR } from "@monimesl/dot-dml-parser";
@@ -10599,10 +10599,10 @@ function valueCompletions(element, attribute, page, scope, components) {
10599
10599
  if (!component) return [];
10600
10600
  if (isEventProp(attribute) && component.events.includes(eventName(attribute))) return handlerCompletions(page);
10601
10601
  const type = component.props[attribute];
10602
- if (type && isWordsOr(type)) return type.words.map((value) => ({
10602
+ if (type && isWordsOr(type)) return [...type.words.map((value) => ({
10603
10603
  label: value,
10604
10604
  kind: import_main.CompletionItemKind.EnumMember
10605
- }));
10605
+ })), ...themeCompletions(type, attribute, page)];
10606
10606
  if (Array.isArray(type)) return type.map((value) => ({
10607
10607
  label: value,
10608
10608
  kind: import_main.CompletionItemKind.EnumMember
@@ -10617,6 +10617,18 @@ function valueCompletions(element, attribute, page, scope, components) {
10617
10617
  }));
10618
10618
  return [];
10619
10619
  }
10620
+ function themeCompletions(type, attribute, page) {
10621
+ const { theme } = page;
10622
+ if (!theme) return [];
10623
+ let names = [];
10624
+ if (type.or === "themeIcon") names = theme.icons;
10625
+ else if (type.or === "themeColor") names = attribute === "background" ? [...theme.colors, ...theme.gradients] : theme.colors;
10626
+ return names.map((name) => ({
10627
+ label: name,
10628
+ kind: import_main.CompletionItemKind.Color,
10629
+ detail: "from the theme in dot.ts"
10630
+ }));
10631
+ }
10620
10632
  function forKeyCompletions(element, scope) {
10621
10633
  let properties = [];
10622
10634
  if (scope) {
@@ -10810,22 +10822,59 @@ function diagnosticAt(document, start, message, severity) {
10810
10822
  };
10811
10823
  }
10812
10824
  //#endregion
10825
+ //#region src/lsp/theme-names.ts
10826
+ function readThemeNames(text, file) {
10827
+ const theme = memberOf(dotOptions(ts.createSourceFile(file, text, ts.ScriptTarget.Latest)), "theme");
10828
+ return {
10829
+ colors: namesIn(memberOf(memberOf(theme, "colors"), "custom")),
10830
+ gradients: namesIn(memberOf(theme, "gradients")),
10831
+ icons: namesIn(memberOf(theme, "icons"))
10832
+ };
10833
+ }
10834
+ function dotOptions(source) {
10835
+ for (const statement of source.statements) if (ts.isExportAssignment(statement) && ts.isCallExpression(statement.expression)) {
10836
+ const [options] = statement.expression.arguments;
10837
+ if (options && ts.isObjectLiteralExpression(options)) return options;
10838
+ }
10839
+ }
10840
+ function memberOf(object, name) {
10841
+ for (const property of object?.properties ?? []) if (ts.isPropertyAssignment(property) && propertyName(property) === name && ts.isObjectLiteralExpression(property.initializer)) return property.initializer;
10842
+ }
10843
+ function namesIn(object) {
10844
+ const names = [];
10845
+ for (const property of object?.properties ?? []) {
10846
+ const name = ts.isPropertyAssignment(property) ? propertyName(property) : void 0;
10847
+ if (name !== void 0) names.push(name);
10848
+ }
10849
+ return names;
10850
+ }
10851
+ function propertyName(property) {
10852
+ const { name } = property;
10853
+ if (ts.isIdentifier(name) || ts.isStringLiteral(name)) return name.text;
10854
+ }
10855
+ //#endregion
10813
10856
  //#region src/lsp/page.ts
10814
10857
  async function readPage(viewFile, readText, stateTypes) {
10815
10858
  const dir = dirname(viewFile);
10816
10859
  const root = findDotRoot(dir);
10817
- const [state, controller, statics] = await Promise.all([
10860
+ const [state, controller, statics, theme] = await Promise.all([
10818
10861
  readState(join(dir, "state.ts"), root, readText, stateTypes),
10819
10862
  readController(join(dir, "controller.ts"), readText),
10820
- root === void 0 ? void 0 : listStatics(root).catch(() => void 0)
10863
+ root === void 0 ? void 0 : listStatics(root).catch(() => void 0),
10864
+ root === void 0 ? void 0 : readTheme(join(root, DOT_FILE), readText)
10821
10865
  ]);
10822
10866
  return {
10823
10867
  root,
10824
10868
  state,
10825
10869
  controller,
10826
- statics
10870
+ statics,
10871
+ theme
10827
10872
  };
10828
10873
  }
10874
+ async function readTheme(file, readText) {
10875
+ const text = await readText(file);
10876
+ return text === void 0 ? void 0 : readThemeNames(text, file);
10877
+ }
10829
10878
  async function readState(file, root, readText, stateTypes) {
10830
10879
  const text = await readText(file);
10831
10880
  if (text === void 0) return;
@@ -11305,4 +11354,4 @@ function serveStdio() {
11305
11354
  //#endregion
11306
11355
  export { serveStdio };
11307
11356
 
11308
- //# sourceMappingURL=server-DMnWDdJ6.js.map
11357
+ //# sourceMappingURL=server-BhnO9_Zu.js.map