@lostgradient/cinder 0.9.0 → 0.12.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 (169) hide show
  1. package/CHANGELOG.md +26 -0
  2. package/components.json +82 -4
  3. package/dist/components/access-gate/index.js +381 -239
  4. package/dist/components/chat/builders.d.ts +17 -8
  5. package/dist/components/chat/conversation-model.d.ts +1 -1
  6. package/dist/components/chat/index.d.ts +1 -1
  7. package/dist/components/chat/index.js +300 -17
  8. package/dist/components/chat/utilities/conversation.d.ts +6 -6
  9. package/dist/components/chat-conversation-header/index.js +19 -6
  10. package/dist/components/chat-conversation-list/index.js +19 -6
  11. package/dist/components/code-block/code-block.css +15 -9
  12. package/dist/components/code-block/code-block.variables.js +8 -2
  13. package/dist/components/confirm-dialog/confirm-dialog.css +2 -0
  14. package/dist/components/confirm-dialog/confirm-dialog.schema.js +10 -1
  15. package/dist/components/confirm-dialog/confirm-dialog.types.d.ts +7 -0
  16. package/dist/components/confirm-dialog/index.js +478 -106
  17. package/dist/components/connection-indicator/connection-indicator.css +136 -0
  18. package/dist/components/connection-indicator/connection-indicator.css.d.ts +1 -0
  19. package/dist/components/connection-indicator/connection-indicator.schema.d.ts +3 -0
  20. package/dist/components/connection-indicator/connection-indicator.schema.js +89 -0
  21. package/dist/components/connection-indicator/connection-indicator.svelte.d.ts +21 -0
  22. package/dist/components/connection-indicator/connection-indicator.types.d.ts +46 -0
  23. package/dist/components/connection-indicator/connection-indicator.variables.d.ts +2 -0
  24. package/dist/components/connection-indicator/connection-indicator.variables.js +61 -0
  25. package/dist/components/connection-indicator/index.d.ts +5 -0
  26. package/dist/components/connection-indicator/index.js +409 -0
  27. package/dist/components/container/container.schema.js +4 -4
  28. package/dist/components/faceted-filter-bar/faceted-filter-bar.schema.js +5 -1
  29. package/dist/components/faceted-filter-bar/faceted-filter-bar.types.d.ts +2 -0
  30. package/dist/components/faceted-filter-bar/index.js +40 -31
  31. package/dist/components/invocation-rule-builder/index.d.ts +1 -1
  32. package/dist/components/invocation-rule-builder/index.js +305 -150
  33. package/dist/components/invocation-rule-builder/invocation-rule-builder.css +28 -0
  34. package/dist/components/invocation-rule-builder/invocation-rule-builder.schema.js +89 -5
  35. package/dist/components/invocation-rule-builder/invocation-rule-builder.svelte.d.ts +2 -1
  36. package/dist/components/invocation-rule-builder/invocation-rule-builder.types.d.ts +114 -16
  37. package/dist/components/navigation-bar/index.js +11 -17
  38. package/dist/components/run-step-timeline/index.d.ts +1 -1
  39. package/dist/components/run-step-timeline/index.js +1052 -560
  40. package/dist/components/run-step-timeline/run-step-branch-disclosure.svelte.d.ts +17 -0
  41. package/dist/components/run-step-timeline/run-step-timeline.css +124 -0
  42. package/dist/components/run-step-timeline/run-step-timeline.schema.js +873 -350
  43. package/dist/components/run-step-timeline/run-step-timeline.svelte.d.ts +1 -15
  44. package/dist/components/run-step-timeline/run-step-timeline.types.d.ts +182 -5
  45. package/dist/components/run-step-timeline/run-step-timeline.utilities.d.ts +60 -0
  46. package/dist/components/schedule-builder/index.d.ts +5 -0
  47. package/dist/components/schedule-builder/index.js +3176 -0
  48. package/dist/components/schedule-builder/schedule-builder.css +121 -0
  49. package/dist/components/schedule-builder/schedule-builder.css.d.ts +1 -0
  50. package/dist/components/schedule-builder/schedule-builder.schema.d.ts +3 -0
  51. package/dist/components/schedule-builder/schedule-builder.schema.js +141 -0
  52. package/dist/components/schedule-builder/schedule-builder.svelte.d.ts +22 -0
  53. package/dist/components/schedule-builder/schedule-builder.types.d.ts +130 -0
  54. package/dist/components/schedule-builder/schedule-builder.utilities.d.ts +78 -0
  55. package/dist/components/schedule-builder/schedule-builder.variables.d.ts +2 -0
  56. package/dist/components/schedule-builder/schedule-builder.variables.js +61 -0
  57. package/dist/components/tag-input/index.js +22 -4
  58. package/dist/components/tag-input/tag-input.schema.js +5 -1
  59. package/dist/components/tag-input/tag-input.types.d.ts +4 -0
  60. package/dist/index.d.ts +6 -2
  61. package/dist/index.js +23069 -20833
  62. package/dist/server/components/access-gate/index.js +2 -1
  63. package/dist/server/components/chat/index.js +4 -4
  64. package/dist/server/components/chat-conversation-header/index.js +5 -5
  65. package/dist/server/components/chat-conversation-list/index.js +3 -3
  66. package/dist/server/components/color-field/index.js +2 -2
  67. package/dist/server/components/confirm-dialog/index.js +7 -2
  68. package/dist/server/components/connection-indicator/index.js +16 -0
  69. package/dist/server/components/data-table/index.js +3 -3
  70. package/dist/server/components/diff-viewer/index.js +4 -3
  71. package/dist/server/components/faceted-filter-bar/index.js +1 -1
  72. package/dist/server/components/invocation-rule-builder/index.js +1 -1
  73. package/dist/server/components/json-schema-editor/index.js +4 -3
  74. package/dist/server/components/navigation-bar/index.js +1 -1
  75. package/dist/server/components/review-editor/index.js +4 -3
  76. package/dist/server/components/run-step-timeline/index.js +1 -1
  77. package/dist/server/components/schedule-builder/index.js +30 -0
  78. package/dist/server/components/side-navigation/index.js +2 -2
  79. package/dist/server/components/table/index.js +3 -3
  80. package/dist/server/components/tag-input/index.js +1 -1
  81. package/dist/server/components/time-field/index.js +5 -3
  82. package/dist/server/index.js +105 -92
  83. package/dist/server/index.server-0sx92swg.js +9 -0
  84. package/dist/server/{index.server-mzzb7dnm.js → index.server-2bbwajb2.js} +1 -1
  85. package/dist/server/{index.server-q7w4jw89.js → index.server-2s5h1d05.js} +2 -2
  86. package/dist/server/{index.server-dg83ke3k.js → index.server-2zdbz3rj.js} +1 -1
  87. package/dist/server/{index.server-0jhra85x.js → index.server-3w72dxz7.js} +4 -4
  88. package/dist/server/{index.server-5tf22d6e.js → index.server-4wx0qven.js} +3 -3
  89. package/dist/server/{index.server-qh9qzd5t.js → index.server-4x4hgvqe.js} +283 -13
  90. package/dist/server/{index.server-c6pe4kaf.js → index.server-5gzyqv78.js} +1 -1
  91. package/dist/server/{index.server-mqt1ngqw.js → index.server-6hnfzc7f.js} +19 -6
  92. package/dist/server/{index.server-894t97kv.js → index.server-7yvpb6z7.js} +4 -4
  93. package/dist/server/index.server-be9bpqeh.js +93 -0
  94. package/dist/server/{index.server-f3z7tpxr.js → index.server-c42b462p.js} +2 -4
  95. package/dist/server/{index.server-7vyzen5x.js → index.server-c5qv3p61.js} +171 -63
  96. package/dist/server/index.server-cch0eed5.js +144 -0
  97. package/dist/server/{index.server-btgb3d56.js → index.server-d5a5ccz7.js} +18 -12
  98. package/dist/server/index.server-g5jgq3jp.js +793 -0
  99. package/dist/server/index.server-gmh5ar16.js +2 -0
  100. package/dist/server/{index.server-0atyznp7.js → index.server-h89zk5ev.js} +7 -7
  101. package/dist/server/{index.server-jxg42jpz.js → index.server-jdcq5zza.js} +7 -7
  102. package/dist/server/{index.server-2dga5yzr.js → index.server-jfrssta6.js} +1 -1
  103. package/dist/server/{index.server-fy068yne.js → index.server-jj76374p.js} +1 -1
  104. package/dist/server/{index.server-39ne5cd1.js → index.server-pxq277t5.js} +32 -1
  105. package/dist/server/index.server-qbkxz7r2.js +750 -0
  106. package/dist/server/{index.server-marjz8ps.js → index.server-tcay903b.js} +3 -2
  107. package/dist/server/{index.server-yz4k36cw.js → index.server-z7hxtqs1.js} +1 -1
  108. package/package.json +87 -97
  109. package/src/components/chat/builders.ts +445 -14
  110. package/src/components/chat/conversation-model.ts +1 -0
  111. package/src/components/chat/index.ts +1 -0
  112. package/src/components/chat/utilities/conversation.ts +33 -15
  113. package/src/components/code-block/code-block.css +15 -9
  114. package/src/components/code-block/code-block.variables.json +7 -1
  115. package/src/components/code-block/code-block.variables.ts +7 -1
  116. package/src/components/confirm-dialog/confirm-dialog.css +2 -0
  117. package/src/components/confirm-dialog/confirm-dialog.schema.json +8 -0
  118. package/src/components/confirm-dialog/confirm-dialog.schema.ts +10 -0
  119. package/src/components/confirm-dialog/confirm-dialog.svelte +31 -3
  120. package/src/components/confirm-dialog/confirm-dialog.types.ts +7 -0
  121. package/src/components/connection-indicator/connection-indicator.css +136 -0
  122. package/src/components/connection-indicator/connection-indicator.examples.json +31 -0
  123. package/src/components/connection-indicator/connection-indicator.schema.json +29 -0
  124. package/src/components/connection-indicator/connection-indicator.schema.ts +36 -0
  125. package/src/components/connection-indicator/connection-indicator.svelte +63 -0
  126. package/src/components/connection-indicator/connection-indicator.types.ts +58 -0
  127. package/src/components/connection-indicator/connection-indicator.variables.json +1 -0
  128. package/src/components/connection-indicator/connection-indicator.variables.ts +3 -0
  129. package/src/components/connection-indicator/index.ts +10 -0
  130. package/src/components/container/container.schema.json +3 -3
  131. package/src/components/container/container.schema.ts +3 -3
  132. package/src/components/faceted-filter-bar/faceted-filter-bar.schema.json +4 -0
  133. package/src/components/faceted-filter-bar/faceted-filter-bar.schema.ts +4 -0
  134. package/src/components/faceted-filter-bar/faceted-filter-bar.svelte +13 -11
  135. package/src/components/faceted-filter-bar/faceted-filter-bar.types.ts +2 -0
  136. package/src/components/invocation-rule-builder/index.ts +4 -0
  137. package/src/components/invocation-rule-builder/invocation-rule-builder.css +28 -0
  138. package/src/components/invocation-rule-builder/invocation-rule-builder.examples.json +6 -0
  139. package/src/components/invocation-rule-builder/invocation-rule-builder.schema.json +76 -3
  140. package/src/components/invocation-rule-builder/invocation-rule-builder.schema.ts +83 -3
  141. package/src/components/invocation-rule-builder/invocation-rule-builder.svelte +326 -113
  142. package/src/components/invocation-rule-builder/invocation-rule-builder.types.ts +157 -43
  143. package/src/components/navigation-bar/navigation-bar.svelte +2 -2
  144. package/src/components/run-step-timeline/index.ts +8 -0
  145. package/src/components/run-step-timeline/run-step-branch-disclosure.svelte +16 -0
  146. package/src/components/run-step-timeline/run-step-timeline.css +124 -0
  147. package/src/components/run-step-timeline/run-step-timeline.examples.json +18 -0
  148. package/src/components/run-step-timeline/run-step-timeline.schema.json +872 -349
  149. package/src/components/run-step-timeline/run-step-timeline.schema.ts +931 -349
  150. package/src/components/run-step-timeline/run-step-timeline.svelte +388 -269
  151. package/src/components/run-step-timeline/run-step-timeline.types.ts +192 -5
  152. package/src/components/run-step-timeline/run-step-timeline.utilities.ts +310 -0
  153. package/src/components/schedule-builder/index.ts +14 -0
  154. package/src/components/schedule-builder/schedule-builder.css +121 -0
  155. package/src/components/schedule-builder/schedule-builder.examples.json +31 -0
  156. package/src/components/schedule-builder/schedule-builder.schema.json +78 -0
  157. package/src/components/schedule-builder/schedule-builder.schema.ts +86 -0
  158. package/src/components/schedule-builder/schedule-builder.svelte +629 -0
  159. package/src/components/schedule-builder/schedule-builder.types.ts +137 -0
  160. package/src/components/schedule-builder/schedule-builder.utilities.ts +344 -0
  161. package/src/components/schedule-builder/schedule-builder.variables.json +1 -0
  162. package/src/components/schedule-builder/schedule-builder.variables.ts +3 -0
  163. package/src/components/tag-input/tag-input.schema.json +4 -0
  164. package/src/components/tag-input/tag-input.schema.ts +4 -0
  165. package/src/components/tag-input/tag-input.svelte +20 -3
  166. package/src/components/tag-input/tag-input.types.ts +4 -0
  167. package/src/index.ts +23 -0
  168. package/src/styles/components.css +2 -0
  169. package/dist/server/index.server-qk1h0n02.js +0 -393
@@ -0,0 +1,121 @@
1
+ @layer cinder.tokens, cinder.foundation, cinder.components, cinder.utilities;
2
+ @import '../chip/chip.css';
3
+ @import '../input/input.css';
4
+ @import '../number-input/number-input.css';
5
+ @import '../segmented-control/segmented-control.css';
6
+ @import '../select/select.css';
7
+ @import '../time-field/time-field.css';
8
+
9
+ @layer cinder.components {
10
+ /* ========================================
11
+ * SCHEDULE-BUILDER
12
+ * Recurrence-definition control: presets, cron, and interval authoring
13
+ * modes behind a tablist, with an always-visible summary line, next-fires
14
+ * preview, and timezone display slot.
15
+ * ======================================== */
16
+
17
+ .cinder-schedule-builder {
18
+ display: flex;
19
+ flex-direction: column;
20
+ gap: var(--cinder-space-4);
21
+ }
22
+
23
+ /* ----------------------------------------
24
+ * Mode panel
25
+ * ---------------------------------------- */
26
+
27
+ .cinder-schedule-builder__panel {
28
+ display: flex;
29
+ flex-direction: column;
30
+ gap: var(--cinder-space-3);
31
+ padding-block-start: var(--cinder-space-1);
32
+ }
33
+
34
+ .cinder-schedule-builder__preset-kind {
35
+ margin-block-end: var(--cinder-space-1);
36
+ }
37
+
38
+ .cinder-schedule-builder__field-row {
39
+ display: flex;
40
+ flex-wrap: wrap;
41
+ align-items: flex-end;
42
+ gap: var(--cinder-space-3);
43
+ }
44
+
45
+ .cinder-schedule-builder__field-row > * {
46
+ flex: 1 1 10rem;
47
+ min-inline-size: 8rem;
48
+ }
49
+
50
+ .cinder-schedule-builder__weekday-group {
51
+ display: flex;
52
+ flex-wrap: wrap;
53
+ gap: var(--cinder-space-2);
54
+ }
55
+
56
+ .cinder-schedule-builder__cron-fields {
57
+ display: grid;
58
+ grid-template-columns: repeat(auto-fit, minmax(7rem, 1fr));
59
+ gap: var(--cinder-space-3);
60
+ }
61
+
62
+ /* ----------------------------------------
63
+ * Always-visible informational blocks: summary, preview, timezone
64
+ * ---------------------------------------- */
65
+
66
+ .cinder-schedule-builder__summary,
67
+ .cinder-schedule-builder__preview,
68
+ .cinder-schedule-builder__timezone {
69
+ display: flex;
70
+ flex-direction: column;
71
+ gap: var(--cinder-space-1);
72
+ margin: 0;
73
+ padding: var(--cinder-space-3);
74
+ border: 1px solid var(--cinder-border-muted);
75
+ border-radius: var(--cinder-radius-md);
76
+ background: var(--cinder-surface-inset);
77
+ }
78
+
79
+ .cinder-schedule-builder__section-label {
80
+ display: block;
81
+ margin: 0;
82
+ font-size: var(--cinder-text-xs);
83
+ font-weight: var(--cinder-font-semibold);
84
+ text-transform: uppercase;
85
+ color: var(--cinder-text-muted);
86
+ }
87
+
88
+ .cinder-schedule-builder__summary-text {
89
+ margin: 0;
90
+ font-size: var(--cinder-text-sm);
91
+ color: var(--cinder-text);
92
+ }
93
+
94
+ .cinder-schedule-builder__preview-list {
95
+ margin: 0;
96
+ padding: 0;
97
+ list-style: none;
98
+ display: flex;
99
+ flex-direction: column;
100
+ gap: var(--cinder-space-1);
101
+ }
102
+
103
+ .cinder-schedule-builder__preview-item {
104
+ font-size: var(--cinder-text-sm);
105
+ color: var(--cinder-text);
106
+ font-variant-numeric: tabular-nums;
107
+ }
108
+
109
+ .cinder-schedule-builder__timezone-value {
110
+ margin: 0;
111
+ font-size: var(--cinder-text-sm);
112
+ color: var(--cinder-text);
113
+ font-family: var(--cinder-font-mono);
114
+ }
115
+
116
+ .cinder-schedule-builder__empty {
117
+ font-size: var(--cinder-text-sm);
118
+ color: var(--cinder-text-muted);
119
+ font-style: italic;
120
+ }
121
+ }
@@ -0,0 +1,3 @@
1
+ import type { ComponentSchema } from '../../schema-types';
2
+ declare const _default: ComponentSchema;
3
+ export default _default;
@@ -0,0 +1,141 @@
1
+ var __create = Object.create;
2
+ var __getProtoOf = Object.getPrototypeOf;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ function __accessProp(key) {
7
+ return this[key];
8
+ }
9
+ var __toESMCache_node;
10
+ var __toESMCache_esm;
11
+ var __toESM = (mod, isNodeMode, target) => {
12
+ var canCache = mod != null && typeof mod === "object";
13
+ if (canCache) {
14
+ var cache = isNodeMode ? __toESMCache_node ??= new WeakMap : __toESMCache_esm ??= new WeakMap;
15
+ var cached = cache.get(mod);
16
+ if (cached)
17
+ return cached;
18
+ }
19
+ target = mod != null ? __create(__getProtoOf(mod)) : {};
20
+ const to = isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target;
21
+ for (let key of __getOwnPropNames(mod))
22
+ if (!__hasOwnProp.call(to, key))
23
+ __defProp(to, key, {
24
+ get: __accessProp.bind(mod, key),
25
+ enumerable: true
26
+ });
27
+ if (canCache)
28
+ cache.set(mod, to);
29
+ return to;
30
+ };
31
+ var __commonJS = (cb, mod) => () => (mod || cb((mod = { exports: {} }).exports, mod), mod.exports);
32
+ var __returnValue = (v) => v;
33
+ function __exportSetter(name, newValue) {
34
+ this[name] = __returnValue.bind(null, newValue);
35
+ }
36
+ var __export = (target, all) => {
37
+ for (var name in all)
38
+ __defProp(target, name, {
39
+ get: all[name],
40
+ enumerable: true,
41
+ configurable: true,
42
+ set: __exportSetter.bind(all, name)
43
+ });
44
+ };
45
+ var __esm = (fn, res) => () => (fn && (res = fn(fn = 0)), res);
46
+ var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
47
+ get: (a, b) => (typeof require !== "undefined" ? require : a)[b]
48
+ }) : x)(function(x) {
49
+ if (typeof require !== "undefined")
50
+ return require.apply(this, arguments);
51
+ throw Error('Dynamic require of "' + x + '" is not supported');
52
+ });
53
+
54
+ // src/components/schedule-builder/schedule-builder.schema.ts
55
+ var schema = {
56
+ $schema: "https://json-schema.org/draft/2020-12/schema",
57
+ type: "object",
58
+ properties: {
59
+ value: {
60
+ anyOf: [
61
+ {
62
+ type: "object",
63
+ properties: {
64
+ mode: {
65
+ const: "cron"
66
+ },
67
+ expression: {
68
+ type: "string"
69
+ }
70
+ },
71
+ additionalProperties: false,
72
+ required: ["expression", "mode"]
73
+ },
74
+ {
75
+ type: "object",
76
+ properties: {
77
+ mode: {
78
+ const: "interval"
79
+ },
80
+ every: {
81
+ type: "integer",
82
+ minimum: 1
83
+ },
84
+ unit: {
85
+ enum: ["minutes", "hours", "days", "weeks"]
86
+ }
87
+ },
88
+ additionalProperties: false,
89
+ required: ["every", "mode", "unit"]
90
+ }
91
+ ],
92
+ description: "The current recurrence value (controlled). When omitted, the component\nstarts from a sensible default (`interval`, every 15 minutes)."
93
+ },
94
+ previewCount: {
95
+ type: "integer",
96
+ description: "How many upcoming fires to request from `computeNextFires`. Defaults to 5.",
97
+ minimum: 1
98
+ },
99
+ timezoneLabel: {
100
+ type: "string",
101
+ description: "Timezone label rendered in the always-visible timezone display slot."
102
+ },
103
+ label: {
104
+ type: "string",
105
+ description: 'Accessible label for the whole control. Defaults to "Schedule".'
106
+ },
107
+ class: {
108
+ type: "string",
109
+ description: "Additional CSS classes applied to the root element."
110
+ }
111
+ },
112
+ additionalProperties: false,
113
+ metadata: {
114
+ unsupportedProps: [
115
+ {
116
+ name: "computeNextFires",
117
+ reason: "function-or-snippet",
118
+ description: `Injected next-fires computation. The component passes the current value and
119
+ the requested count and renders whatever fires the consumer returns. When
120
+ omitted, the preview list is hidden (the component ships no date logic).`
121
+ },
122
+ {
123
+ name: "onchange",
124
+ reason: "function-or-snippet",
125
+ description: `Called whenever the user edits the recurrence. Receives the next lossless
126
+ {@link ScheduleValue}. The consumer owns persistence and validation.`
127
+ },
128
+ {
129
+ name: "timezone",
130
+ reason: "function-or-snippet",
131
+ description: "Custom content for the timezone display slot. Takes precedence over\n`timezoneLabel` when both are supplied."
132
+ }
133
+ ]
134
+ }
135
+ };
136
+ var schedule_builder_schema_default = schema;
137
+ export {
138
+ schedule_builder_schema_default as default
139
+ };
140
+
141
+ //# debugId=AA80EA75536D901B64756E2164756E21
@@ -0,0 +1,22 @@
1
+ /**
2
+ * @cinder
3
+ * @category form
4
+ * @status beta
5
+ * @purpose Recurrence-definition control that authors a cron or fixed-interval schedule via presets, raw cron fields, or an interval, alongside an always-visible summary, next-fires preview, and timezone slot.
6
+ * @tag schedule
7
+ * @tag recurrence
8
+ * @tag cron
9
+ * @tag form
10
+ * @useWhen Letting a user define when a job or notification recurs, supplying your own date/cron library to compute upcoming fire times.
11
+ * @useWhen You want a friendly presets UI (every N, daily, weekly, monthly) that still round-trips to a portable cron or interval value.
12
+ * @avoidWhen You need overlap policy, jitter, or backfill controls — those belong to the consumer's surrounding form. | invocation-rule-builder
13
+ * @avoidWhen You only need to pick a single point in time, not a recurrence — use date-picker instead. | date-picker
14
+ * @related date-picker, segmented-control, input, time-field
15
+ * @a11yPattern WAI-ARIA Tabs
16
+ * @a11yNote The three authoring modes (presets, cron, interval) are a tablist; each cron field reports validity via aria-invalid and an associated hint/error.
17
+ */
18
+ export type { ScheduleAuthoringMode, ScheduleBuilderProps, ScheduleFire, ScheduleIntervalUnit, ScheduleValue, } from './schedule-builder.types.ts';
19
+ import type { ScheduleBuilderProps } from './schedule-builder.types.ts';
20
+ declare const ScheduleBuilder: import("svelte").Component<ScheduleBuilderProps, {}, "">;
21
+ type ScheduleBuilder = ReturnType<typeof ScheduleBuilder>;
22
+ export default ScheduleBuilder;
@@ -0,0 +1,130 @@
1
+ import type { Snippet } from 'svelte';
2
+ import type { HTMLAttributes } from 'svelte/elements';
3
+ /**
4
+ * The unit for an interval recurrence.
5
+ */
6
+ export type ScheduleIntervalUnit = 'minutes' | 'hours' | 'days' | 'weeks';
7
+ /**
8
+ * The emitted, lossless recurrence value. There are only ever TWO value
9
+ * variants — `cron` and `interval` — even though the UI offers a third
10
+ * "presets" authoring mode. Presets are sugar that lower to one of these two
11
+ * (e.g. "every 15 minutes" → `interval`; "daily at 09:00" → `cron`); there is
12
+ * no `mode: 'preset'` in the value a consumer receives.
13
+ */
14
+ export type ScheduleValue = {
15
+ /** Discriminator: a 5-field cron recurrence. */
16
+ mode: 'cron';
17
+ /** The 5-field cron expression, space-separated (minute hour day-of-month month day-of-week). */
18
+ expression: string;
19
+ } | {
20
+ /** Discriminator: a fixed-interval recurrence. */
21
+ mode: 'interval';
22
+ /** How many `unit`s between fires. A positive integer. */
23
+ every: number;
24
+ /** The interval unit. */
25
+ unit: ScheduleIntervalUnit;
26
+ };
27
+ /**
28
+ * The authoring mode surfaced in the UI's SegmentedControl. Distinct from
29
+ * {@link ScheduleValue}'s `mode` discriminator: `presets` is an authoring
30
+ * convenience that emits a `cron` or `interval` value.
31
+ */
32
+ export type ScheduleAuthoringMode = 'presets' | 'cron' | 'interval';
33
+ /**
34
+ * A single computed upcoming fire, as returned by the injected
35
+ * {@link ScheduleBuilderProps.computeNextFires} callback. The component never
36
+ * computes or formats times itself (it ships no date/cron dependency): the
37
+ * consumer returns already-formatted display strings.
38
+ */
39
+ export type ScheduleFire = {
40
+ /** Stable identity for the keyed preview list. */
41
+ id: string;
42
+ /** Human-readable label for this fire, e.g. "Mon Jun 1, 09:00". */
43
+ label: string;
44
+ };
45
+ /**
46
+ * Props for the ScheduleBuilder component.
47
+ *
48
+ * ScheduleBuilder is a presentational recurrence-definition control. It owns
49
+ * no scheduling execution, persistence, or date math. It is date-library-free:
50
+ * the "next N fires" preview is produced by the injected `computeNextFires`
51
+ * callback, and degrades gracefully (the preview is hidden) when the callback
52
+ * is absent. Scope is recurrence only — overlap policy, jitter, and backfill
53
+ * belong to the consumer's surrounding form.
54
+ */
55
+ export type ScheduleBuilderProps = Omit<HTMLAttributes<HTMLDivElement>, 'class' | 'children' | 'onchange'> & {
56
+ /**
57
+ * The current recurrence value (controlled). Pass the value returned from
58
+ * `onchange` back in to commit an edit. When omitted, the component starts
59
+ * from a sensible default (`interval`, every 15 minutes).
60
+ */
61
+ value?: ScheduleValue | undefined;
62
+ /**
63
+ * Called whenever the user edits the recurrence. Receives the next lossless
64
+ * {@link ScheduleValue}. The consumer owns persistence and validation.
65
+ */
66
+ onchange?: ((value: ScheduleValue) => void) | undefined;
67
+ /**
68
+ * Injected next-fires computation. The component passes the current value and
69
+ * the requested count and renders whatever fires the consumer returns. When
70
+ * omitted, the preview list is hidden (the component ships no date logic).
71
+ */
72
+ computeNextFires?: ((value: ScheduleValue, count: number) => ScheduleFire[]) | undefined;
73
+ /**
74
+ * How many upcoming fires to request from `computeNextFires`. Defaults to 5.
75
+ */
76
+ previewCount?: number | undefined;
77
+ /**
78
+ * Timezone label rendered in the always-visible timezone display slot, e.g.
79
+ * "America/New_York" or "UTC". Purely presentational — the component does not
80
+ * interpret it. When omitted, provide the `timezone` snippet instead; if
81
+ * neither is supplied the slot shows a "Not set" placeholder (the slot itself
82
+ * is always rendered).
83
+ */
84
+ timezoneLabel?: string | undefined;
85
+ /**
86
+ * Custom content for the timezone display slot. Takes precedence over
87
+ * `timezoneLabel` when both are supplied.
88
+ */
89
+ timezone?: Snippet | undefined;
90
+ /** Accessible label for the whole control. Defaults to "Schedule". */
91
+ label?: string | undefined;
92
+ /** Additional CSS classes applied to the root element. */
93
+ class?: string | undefined;
94
+ };
95
+ /**
96
+ * Schema-facing mirror of {@link ScheduleValue}.
97
+ * @schemaObject
98
+ */
99
+ export type ScheduleValueSchema = {
100
+ mode: 'cron';
101
+ expression: string;
102
+ } | {
103
+ mode: 'interval';
104
+ every: number;
105
+ unit: ScheduleIntervalUnit;
106
+ };
107
+ /**
108
+ * Cinder-specific schema surface for ScheduleBuilder.
109
+ *
110
+ * The `onchange`, `computeNextFires`, and `timezone` props are documented but
111
+ * unsupported by JSON Schema because functions and snippets cannot be modeled.
112
+ */
113
+ export type ScheduleBuilderSchemaProps = {
114
+ /**
115
+ * The current recurrence value (controlled). When omitted, the component
116
+ * starts from a sensible default (`interval`, every 15 minutes).
117
+ * @schemaObject
118
+ */
119
+ value?: ScheduleValueSchema | undefined;
120
+ /**
121
+ * How many upcoming fires to request from `computeNextFires`. Defaults to 5.
122
+ */
123
+ previewCount?: number | undefined;
124
+ /** Timezone label rendered in the always-visible timezone display slot. */
125
+ timezoneLabel?: string | undefined;
126
+ /** Accessible label for the whole control. Defaults to "Schedule". */
127
+ label?: string | undefined;
128
+ /** Additional CSS classes applied to the root element. */
129
+ class?: string | undefined;
130
+ };
@@ -0,0 +1,78 @@
1
+ import type { ScheduleIntervalUnit, ScheduleValue } from './schedule-builder.types.ts';
2
+ /** The interval units offered in the interval mode selector, in order. */
3
+ export declare const INTERVAL_UNITS: readonly ScheduleIntervalUnit[];
4
+ /** Weekday chips for the weekly preset. `value` matches cron day-of-week (0 = Sunday). */
5
+ export declare const WEEKDAYS: readonly {
6
+ value: number;
7
+ short: string;
8
+ long: string;
9
+ }[];
10
+ /** The five cron fields, in order, with their valid numeric ranges and hints. */
11
+ export declare const CRON_FIELDS: readonly {
12
+ name: string;
13
+ min: number;
14
+ max: number;
15
+ hint: string;
16
+ }[];
17
+ /** The default value used when the consumer passes none. */
18
+ export declare function defaultScheduleValue(): ScheduleValue;
19
+ /**
20
+ * Validate a single cron field value against its field range. Accepts a
21
+ * wildcard, a step, a range, a comma list, or a plain number. Returns an error
22
+ * message when invalid, or `undefined` when the field is acceptable.
23
+ */
24
+ export declare function validateCronField(rawValue: string, fieldIndex: number): string | undefined;
25
+ /** Whether all five cron fields are individually valid. */
26
+ export declare function cronFieldsValid(fields: string[]): boolean;
27
+ /** Join five cron fields into a normalized single-space expression. */
28
+ export declare function joinCron(fields: string[]): string;
29
+ /** Split a cron expression into exactly five fields, padding with `*` if short. */
30
+ export declare function splitCron(expression: string): [string, string, string, string, string];
31
+ /** Clamp/parse a `HH:MM` time string into `{ hour, minute }`, defaulting to 00:00. */
32
+ export declare function parseTime(time: string): {
33
+ hour: number;
34
+ minute: number;
35
+ };
36
+ /** "every N minutes/hours" → an interval value. */
37
+ export declare function lowerEveryN(every: number, unit: ScheduleIntervalUnit): ScheduleValue;
38
+ /** "daily at HH:MM" → a cron value. */
39
+ export declare function lowerDailyAt(time: string): ScheduleValue;
40
+ /** "weekly on [days] at HH:MM" → a cron value. Empty days falls back to every day. */
41
+ export declare function lowerWeeklyAt(days: number[], time: string): ScheduleValue;
42
+ /** "monthly on day N at HH:MM" → a cron value. */
43
+ export declare function lowerMonthlyOnDay(day: number, time: string): ScheduleValue;
44
+ /**
45
+ * Convert any value into cron fields, so switching into cron mode always has
46
+ * something sensible to show. Only `minutes` and `hours` intervals whose
47
+ * `every` evenly divides their field's cycle (60 for minutes, 24 for hours)
48
+ * are losslessly representable as a cron step wildcard — see
49
+ * `isEvenDivisorStep`. A non-dividing minute/hour interval (e.g. every 45
50
+ * minutes or every 5 hours), and `days`/`weeks` intervals (a step wildcard on
51
+ * the day-of-month field resets at the start of every month rather than
52
+ * repeating every N days, and cron has no field for "every N weeks" at all),
53
+ * would silently change the schedule's actual cadence the moment a user
54
+ * merely LOOKED at the Cron tab if lowered to a step wildcard. Seed an honest
55
+ * neutral default (daily at midnight) instead for all of those — see
56
+ * `valueToInterval` below, which mirrors this by only recovering a step that
57
+ * actually divides evenly.
58
+ */
59
+ export declare function valueToCronFields(value: ScheduleValue): string[];
60
+ /**
61
+ * Recover an interval `{ every, unit }` from a value when representable, so
62
+ * switching into interval mode is lossless for simple step patterns. Only a
63
+ * `minutes` or `hours` step that evenly divides its field's cycle (60 or 24
64
+ * — see `isEvenDivisorStep`) is recovered: a non-dividing minute/hour step
65
+ * (e.g. a 45-minute step wildcard) is not a true fixed-gap interval, and a
66
+ * day-of-month step
67
+ * wildcard is deliberately NOT read back as `{ unit: 'days' }` at all —
68
+ * cron's day-of-month step resets every month, so it is not equivalent to
69
+ * "every N days" and `valueToCronFields` never produces one for an interval
70
+ * value. Returns `undefined` when the cron expression is not a pure,
71
+ * evenly-dividing minute/hour interval.
72
+ */
73
+ export declare function valueToInterval(value: ScheduleValue): {
74
+ every: number;
75
+ unit: ScheduleIntervalUnit;
76
+ } | undefined;
77
+ /** A concise, human-readable description of a recurrence value. */
78
+ export declare function describeValue(value: ScheduleValue): string;
@@ -0,0 +1,2 @@
1
+ declare const variables: readonly string[];
2
+ export default variables;
@@ -0,0 +1,61 @@
1
+ var __create = Object.create;
2
+ var __getProtoOf = Object.getPrototypeOf;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ function __accessProp(key) {
7
+ return this[key];
8
+ }
9
+ var __toESMCache_node;
10
+ var __toESMCache_esm;
11
+ var __toESM = (mod, isNodeMode, target) => {
12
+ var canCache = mod != null && typeof mod === "object";
13
+ if (canCache) {
14
+ var cache = isNodeMode ? __toESMCache_node ??= new WeakMap : __toESMCache_esm ??= new WeakMap;
15
+ var cached = cache.get(mod);
16
+ if (cached)
17
+ return cached;
18
+ }
19
+ target = mod != null ? __create(__getProtoOf(mod)) : {};
20
+ const to = isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target;
21
+ for (let key of __getOwnPropNames(mod))
22
+ if (!__hasOwnProp.call(to, key))
23
+ __defProp(to, key, {
24
+ get: __accessProp.bind(mod, key),
25
+ enumerable: true
26
+ });
27
+ if (canCache)
28
+ cache.set(mod, to);
29
+ return to;
30
+ };
31
+ var __commonJS = (cb, mod) => () => (mod || cb((mod = { exports: {} }).exports, mod), mod.exports);
32
+ var __returnValue = (v) => v;
33
+ function __exportSetter(name, newValue) {
34
+ this[name] = __returnValue.bind(null, newValue);
35
+ }
36
+ var __export = (target, all) => {
37
+ for (var name in all)
38
+ __defProp(target, name, {
39
+ get: all[name],
40
+ enumerable: true,
41
+ configurable: true,
42
+ set: __exportSetter.bind(all, name)
43
+ });
44
+ };
45
+ var __esm = (fn, res) => () => (fn && (res = fn(fn = 0)), res);
46
+ var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
47
+ get: (a, b) => (typeof require !== "undefined" ? require : a)[b]
48
+ }) : x)(function(x) {
49
+ if (typeof require !== "undefined")
50
+ return require.apply(this, arguments);
51
+ throw Error('Dynamic require of "' + x + '" is not supported');
52
+ });
53
+
54
+ // src/components/schedule-builder/schedule-builder.variables.ts
55
+ var variables = [];
56
+ var schedule_builder_variables_default = variables;
57
+ export {
58
+ schedule_builder_variables_default as default
59
+ };
60
+
61
+ //# debugId=638BB268C8E04A7364756E2164756E21
@@ -57,7 +57,7 @@ import"@lostgradient/cinder/tag-input/styles";
57
57
  // src/components/tag-input/tag-input.svelte
58
58
  import"svelte/internal/disclose-version";
59
59
  import * as $2 from "svelte/internal/client";
60
- import { tick, untrack } from "svelte";
60
+ import { flushSync, tick, untrack } from "svelte";
61
61
 
62
62
  // ../../node_modules/esm-env/true.js
63
63
  var true_default = true;
@@ -267,6 +267,7 @@ var rest_excludes = new Set([
267
267
  "max",
268
268
  "validate",
269
269
  "allowDuplicates",
270
+ "commitOnSubmit",
270
271
  "disabled",
271
272
  "readonly",
272
273
  "name",
@@ -290,7 +291,7 @@ var root_4 = $2.from_html(`<div><div class="cinder-tag-input__control"><ul class
290
291
  function Tag_input($$anchor, $$props) {
291
292
  const generatedId = $2.props_id();
292
293
  $2.push($$props, true);
293
- let delimiter = $2.prop($$props, "delimiter", 3, ","), allowDuplicates = $2.prop($$props, "allowDuplicates", 3, false), readonly = $2.prop($$props, "readonly", 3, false), rest = $2.rest_props($$props, rest_excludes);
294
+ let delimiter = $2.prop($$props, "delimiter", 3, ","), allowDuplicates = $2.prop($$props, "allowDuplicates", 3, false), commitOnSubmit = $2.prop($$props, "commitOnSubmit", 3, false), readonly = $2.prop($$props, "readonly", 3, false), rest = $2.rest_props($$props, rest_excludes);
294
295
  const initialDefaultTags = untrack(() => [...$$props.defaultValue ?? []]);
295
296
  const context = getFormFieldContext();
296
297
  let rootElement = $2.state(null);
@@ -345,6 +346,19 @@ function Tag_input($$anchor, $$props) {
345
346
  const form = $2.get(inputElement).closest("form");
346
347
  if (!form)
347
348
  return;
349
+ const onSubmit = (event2) => {
350
+ if (!commitOnSubmit() || $2.get(field).disabled || $2.get(resolvedReadonly))
351
+ return;
352
+ if (!$2.get(draftValue).trim())
353
+ return;
354
+ let committed = false;
355
+ flushSync(() => {
356
+ committed = commitDraft();
357
+ });
358
+ if (!committed) {
359
+ event2.preventDefault();
360
+ }
361
+ };
348
362
  const onReset = () => {
349
363
  $2.set(draftValue, "");
350
364
  $2.set(inlineError, null);
@@ -353,8 +367,12 @@ function Tag_input($$anchor, $$props) {
353
367
  $2.set(uncontrolledTags, [...initialDefaultTags], true);
354
368
  }
355
369
  };
370
+ form.addEventListener("submit", onSubmit, true);
356
371
  form.addEventListener("reset", onReset);
357
- return () => form.removeEventListener("reset", onReset);
372
+ return () => {
373
+ form.removeEventListener("submit", onSubmit, true);
374
+ form.removeEventListener("reset", onReset);
375
+ };
358
376
  });
359
377
  function getChipElements() {
360
378
  return Array.from($2.get(rootElement)?.querySelectorAll(".cinder-tag-input__remove") ?? []);
@@ -622,4 +640,4 @@ export {
622
640
  Tag_input as TagInput
623
641
  };
624
642
 
625
- //# debugId=12AA77072E10848564756E2164756E21
643
+ //# debugId=5AB42CD56739898464756E2164756E21
@@ -82,6 +82,10 @@ var schema = {
82
82
  type: "boolean",
83
83
  description: "Allow the same trimmed tag value to appear more than once."
84
84
  },
85
+ commitOnSubmit: {
86
+ type: "boolean",
87
+ description: "Commit a non-empty pending draft before the parent form submits."
88
+ },
85
89
  autocapitalize: {
86
90
  enum: ["off", "on", "characters", "none", "sentences", "words", null],
87
91
  description: "Autocapitalization hint forwarded to the visible text input."
@@ -219,4 +223,4 @@ export {
219
223
  tag_input_schema_default as default
220
224
  };
221
225
 
222
- //# debugId=D2D352F30D877CF864756E2164756E21
226
+ //# debugId=9E1D0F308A91268B64756E2164756E21
@@ -15,6 +15,8 @@ export type TagInputProps = SupportedInputAttributes & {
15
15
  validate?: (tag: string) => boolean | string;
16
16
  /** Allow the same trimmed tag value to appear more than once. */
17
17
  allowDuplicates?: boolean;
18
+ /** Commit a non-empty pending draft before the parent form submits. */
19
+ commitOnSubmit?: boolean;
18
20
  /** Disable the input and chip removal affordances. */
19
21
  disabled?: boolean;
20
22
  /** Render the pending-tag input as read-only and make committed tags non-removable. */
@@ -39,6 +41,8 @@ export interface TagInputSchemaProps {
39
41
  delimiter?: string | RegExp;
40
42
  /** Allow the same trimmed tag value to appear more than once. */
41
43
  allowDuplicates?: boolean;
44
+ /** Commit a non-empty pending draft before the parent form submits. */
45
+ commitOnSubmit?: boolean;
42
46
  /** Autocomplete hint forwarded to the visible text input. */
43
47
  autocomplete?: HTMLInputAttributes['autocomplete'];
44
48
  /** Autocapitalization hint forwarded to the visible text input. */