@digilogiclabs/saas-factory-ui 1.24.0 → 1.25.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.
package/dist/index.d.mts CHANGED
@@ -5120,6 +5120,8 @@ type RoundRobinTheme = RoundRobinThemePreset | RoundRobinCustomTheme;
5120
5120
  interface RoundRobinLabels {
5121
5121
  inputPlaceholder?: string;
5122
5122
  addButton?: string;
5123
+ /** Label on the import button (appears when `enableImport` is true). */
5124
+ importButton?: string;
5123
5125
  generateButton?: string;
5124
5126
  randomizeButton?: string;
5125
5127
  clearButton?: string;
@@ -5151,8 +5153,11 @@ interface RoundRobinSchedulerProps {
5151
5153
  ariaLabel?: string;
5152
5154
  /** CSS class on root element. */
5153
5155
  className?: string;
5156
+ /** Show the "Import" button so users can upload / paste a CSV / TSV
5157
+ * roster from a spreadsheet. Default `true`. */
5158
+ enableImport?: boolean;
5154
5159
  }
5155
- declare function RoundRobinScheduler({ theme, darkMode, minTeams, defaultTeams, onTeamsChange, onGenerate, labels, ariaLabel, className, }: RoundRobinSchedulerProps): react_jsx_runtime.JSX.Element;
5160
+ declare function RoundRobinScheduler({ theme, darkMode, minTeams, defaultTeams, onTeamsChange, onGenerate, labels, ariaLabel, className, enableImport, }: RoundRobinSchedulerProps): react_jsx_runtime.JSX.Element;
5156
5161
  declare namespace RoundRobinScheduler {
5157
5162
  var displayName: string;
5158
5163
  }
package/dist/index.d.ts CHANGED
@@ -5120,6 +5120,8 @@ type RoundRobinTheme = RoundRobinThemePreset | RoundRobinCustomTheme;
5120
5120
  interface RoundRobinLabels {
5121
5121
  inputPlaceholder?: string;
5122
5122
  addButton?: string;
5123
+ /** Label on the import button (appears when `enableImport` is true). */
5124
+ importButton?: string;
5123
5125
  generateButton?: string;
5124
5126
  randomizeButton?: string;
5125
5127
  clearButton?: string;
@@ -5151,8 +5153,11 @@ interface RoundRobinSchedulerProps {
5151
5153
  ariaLabel?: string;
5152
5154
  /** CSS class on root element. */
5153
5155
  className?: string;
5156
+ /** Show the "Import" button so users can upload / paste a CSV / TSV
5157
+ * roster from a spreadsheet. Default `true`. */
5158
+ enableImport?: boolean;
5154
5159
  }
5155
- declare function RoundRobinScheduler({ theme, darkMode, minTeams, defaultTeams, onTeamsChange, onGenerate, labels, ariaLabel, className, }: RoundRobinSchedulerProps): react_jsx_runtime.JSX.Element;
5160
+ declare function RoundRobinScheduler({ theme, darkMode, minTeams, defaultTeams, onTeamsChange, onGenerate, labels, ariaLabel, className, enableImport, }: RoundRobinSchedulerProps): react_jsx_runtime.JSX.Element;
5156
5161
  declare namespace RoundRobinScheduler {
5157
5162
  var displayName: string;
5158
5163
  }
package/dist/index.js CHANGED
@@ -36587,6 +36587,7 @@ function generateSchedule(teams, roundLabel) {
36587
36587
  var DEFAULT_LABELS4 = {
36588
36588
  inputPlaceholder: "Team or player name (comma-separated for batch)",
36589
36589
  addButton: "Add",
36590
+ importButton: "Import",
36590
36591
  generateButton: "Generate Schedule",
36591
36592
  randomizeButton: "Randomize Order",
36592
36593
  clearButton: "Clear All",
@@ -36607,7 +36608,8 @@ function RoundRobinScheduler({
36607
36608
  onGenerate,
36608
36609
  labels,
36609
36610
  ariaLabel = "Round robin scheduler",
36610
- className
36611
+ className,
36612
+ enableImport = true
36611
36613
  }) {
36612
36614
  const isDark = useDarkMode(darkMode);
36613
36615
  const palette = isDark ? DARK3 : LIGHT3;
@@ -36637,6 +36639,22 @@ function RoundRobinScheduler({
36637
36639
  setInput("");
36638
36640
  setRounds([]);
36639
36641
  }, []);
36642
+ const importTeams = (0, import_react75.useCallback)((incoming) => {
36643
+ if (incoming.length === 0) return;
36644
+ setTeams((prev) => {
36645
+ const existing = new Set(prev.map((t) => t.toLowerCase()));
36646
+ const next = [...prev];
36647
+ for (const name of incoming) {
36648
+ const key = name.toLowerCase();
36649
+ if (!existing.has(key)) {
36650
+ existing.add(key);
36651
+ next.push(name);
36652
+ }
36653
+ }
36654
+ return next;
36655
+ });
36656
+ setRounds([]);
36657
+ }, []);
36640
36658
  const handleKeyDown = (0, import_react75.useCallback)(
36641
36659
  (e) => {
36642
36660
  if (e.key === "Enter") {
@@ -36783,6 +36801,27 @@ function RoundRobinScheduler({
36783
36801
  /* @__PURE__ */ (0, import_jsx_runtime122.jsx)("span", { children: L.addButton })
36784
36802
  ]
36785
36803
  }
36804
+ ),
36805
+ enableImport && /* @__PURE__ */ (0, import_jsx_runtime122.jsx)(
36806
+ RosterImport,
36807
+ {
36808
+ darkMode: isDark,
36809
+ onImport: importTeams,
36810
+ labels: { triggerButton: L.importButton },
36811
+ triggerStyle: {
36812
+ display: "inline-flex",
36813
+ alignItems: "center",
36814
+ gap: 6,
36815
+ padding: "8px 12px",
36816
+ borderRadius: 8,
36817
+ border: `1px solid ${palette.border}`,
36818
+ background: palette.surface,
36819
+ color: palette.text,
36820
+ fontSize: 14,
36821
+ fontWeight: 500,
36822
+ cursor: "pointer"
36823
+ }
36824
+ }
36786
36825
  )
36787
36826
  ] }),
36788
36827
  teams.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime122.jsx)("div", { style: { display: "flex", flexWrap: "wrap", gap: 8 }, children: teams.map((name, idx) => /* @__PURE__ */ (0, import_jsx_runtime122.jsxs)("span", { style: chipStyle, children: [