@synnaxlabs/pluto 0.16.0 → 0.18.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 (94) hide show
  1. package/dist/{Keyboard-79lsaV0f.cjs → Keyboard-Jopa0ImN.cjs} +2 -2
  2. package/dist/{Keyboard-79lsaV0f.cjs.map → Keyboard-Jopa0ImN.cjs.map} +1 -1
  3. package/dist/{Keyboard-SVZgM51r.js → Keyboard-kcohZ0JP.js} +2 -2
  4. package/dist/{Keyboard-SVZgM51r.js.map → Keyboard-kcohZ0JP.js.map} +1 -1
  5. package/dist/{Link-PQmsc2rv.js → Link-4oN98LnE.js} +2 -2
  6. package/dist/{Link-PQmsc2rv.js.map → Link-4oN98LnE.js.map} +1 -1
  7. package/dist/{Link-z0ioMNDX.cjs → Link-5t5MufKE.cjs} +2 -2
  8. package/dist/{Link-z0ioMNDX.cjs.map → Link-5t5MufKE.cjs.map} +1 -1
  9. package/dist/{Toggle-wVZJoVtX.cjs → Toggle-qW_TcIDh.cjs} +13 -13
  10. package/dist/{Toggle-wVZJoVtX.cjs.map → Toggle-qW_TcIDh.cjs.map} +1 -1
  11. package/dist/{Toggle-3mGeA8rE.js → Toggle-zmqGwWeq.js} +39 -37
  12. package/dist/{Toggle-3mGeA8rE.js.map → Toggle-zmqGwWeq.js.map} +1 -1
  13. package/dist/button.cjs +1 -1
  14. package/dist/button.js +1 -1
  15. package/dist/color.cjs +1 -1
  16. package/dist/color.js +1 -1
  17. package/dist/dropdown.cjs +1 -1
  18. package/dist/dropdown.js +1 -1
  19. package/dist/{external-jrFYN1k7.js → external-1WVrscEc.js} +2 -2
  20. package/dist/{external-jrFYN1k7.js.map → external-1WVrscEc.js.map} +1 -1
  21. package/dist/{external-V5Rc7RD4.cjs → external-6DXc9G-d.cjs} +2 -2
  22. package/dist/{external-V5Rc7RD4.cjs.map → external-6DXc9G-d.cjs.map} +1 -1
  23. package/dist/{external-j1RQBbSY.js → external-7FFXJt69.js} +2 -2
  24. package/dist/external-7FFXJt69.js.map +1 -0
  25. package/dist/{external-CRkuAd6C.cjs → external-A4JYxI--.cjs} +2 -2
  26. package/dist/external-A4JYxI--.cjs.map +1 -0
  27. package/dist/{external-1scdpCD9.js → external-D_-pAYEQ.js} +3 -3
  28. package/dist/{external-1scdpCD9.js.map → external-D_-pAYEQ.js.map} +1 -1
  29. package/dist/{external-FtteEuf4.js → external-K7wZqIN6.js} +2 -2
  30. package/dist/{external-FtteEuf4.js.map → external-K7wZqIN6.js.map} +1 -1
  31. package/dist/{external-WdZmpbBs.cjs → external-KoFBpSsV.cjs} +2 -2
  32. package/dist/{external-WdZmpbBs.cjs.map → external-KoFBpSsV.cjs.map} +1 -1
  33. package/dist/{external-PuMpEjUQ.cjs → external-Mc8M8Xzl.cjs} +2 -2
  34. package/dist/{external-PuMpEjUQ.cjs.map → external-Mc8M8Xzl.cjs.map} +1 -1
  35. package/dist/{external-QpYuwpfo.js → external-P6hmttIX.js} +2 -2
  36. package/dist/{external-QpYuwpfo.js.map → external-P6hmttIX.js.map} +1 -1
  37. package/dist/{external-hclXaeBH.cjs → external-RsG62zSr.cjs} +2 -2
  38. package/dist/{external-hclXaeBH.cjs.map → external-RsG62zSr.cjs.map} +1 -1
  39. package/dist/{external-LDAF36fG.js → external-Sip1coAq.js} +3 -3
  40. package/dist/{external-LDAF36fG.js.map → external-Sip1coAq.js.map} +1 -1
  41. package/dist/{external-qFz2sVjt.cjs → external-UezDJS5P.cjs} +2 -2
  42. package/dist/{external-qFz2sVjt.cjs.map → external-UezDJS5P.cjs.map} +1 -1
  43. package/dist/{external-bw_0NdEr.js → external-dD3TNRhO.js} +3 -3
  44. package/dist/{external-bw_0NdEr.js.map → external-dD3TNRhO.js.map} +1 -1
  45. package/dist/{external-iZdy0KqS.cjs → external-dFd3d4ZY.cjs} +2 -2
  46. package/dist/{external-iZdy0KqS.cjs.map → external-dFd3d4ZY.cjs.map} +1 -1
  47. package/dist/{external-7CL_DLHQ.cjs → external-er-l9iZA.cjs} +2 -2
  48. package/dist/{external-7CL_DLHQ.cjs.map → external-er-l9iZA.cjs.map} +1 -1
  49. package/dist/{external-f3-E2t1n.js → external-luTLo-w7.js} +2 -2
  50. package/dist/{external-f3-E2t1n.js.map → external-luTLo-w7.js.map} +1 -1
  51. package/dist/{external-ogG2kUq2.cjs → external-n4UdyJ7i.cjs} +2 -2
  52. package/dist/{external-ogG2kUq2.cjs.map → external-n4UdyJ7i.cjs.map} +1 -1
  53. package/dist/{external-mgTxEe4K.js → external-rZ3m5Z0a.js} +2 -2
  54. package/dist/{external-mgTxEe4K.js.map → external-rZ3m5Z0a.js.map} +1 -1
  55. package/dist/external-vjJtYX9R.cjs +2 -0
  56. package/dist/external-vjJtYX9R.cjs.map +1 -0
  57. package/dist/{external-194aFdnj.js → external-wMjPMnSO.js} +3 -3
  58. package/dist/{external-194aFdnj.js.map → external-wMjPMnSO.js.map} +1 -1
  59. package/dist/{external-jcvqdb1Z.cjs → external-y6ws_3c6.cjs} +2 -2
  60. package/dist/{external-jcvqdb1Z.cjs.map → external-y6ws_3c6.cjs.map} +1 -1
  61. package/dist/{external-HTq0VBUW.js → external-zoOMJkop.js} +3 -3
  62. package/dist/external-zoOMJkop.js.map +1 -0
  63. package/dist/header.cjs +1 -1
  64. package/dist/header.js +1 -1
  65. package/dist/index.cjs +1 -1
  66. package/dist/index.cjs.map +1 -1
  67. package/dist/index.js +800 -799
  68. package/dist/index.js.map +1 -1
  69. package/dist/input.cjs +1 -1
  70. package/dist/input.js +1 -1
  71. package/dist/list.cjs +1 -1
  72. package/dist/list.js +1 -1
  73. package/dist/menu.cjs +1 -1
  74. package/dist/menu.js +1 -1
  75. package/dist/select/Multiple.d.ts +2 -2
  76. package/dist/select/Select.spec.d.ts +9 -0
  77. package/dist/select/Single.d.ts +2 -2
  78. package/dist/tabs.cjs +1 -1
  79. package/dist/tabs.js +1 -1
  80. package/dist/text.cjs +1 -1
  81. package/dist/text.js +2 -2
  82. package/dist/theming.cjs +1 -1
  83. package/dist/theming.js +2 -2
  84. package/dist/tree.cjs +1 -1
  85. package/dist/tree.js +1 -1
  86. package/dist/triggers.cjs +1 -1
  87. package/dist/triggers.js +1 -1
  88. package/package.json +6 -6
  89. package/dist/external-CRkuAd6C.cjs.map +0 -1
  90. package/dist/external-HTq0VBUW.js.map +0 -1
  91. package/dist/external-VwYNFmdb.cjs +0 -2
  92. package/dist/external-VwYNFmdb.cjs.map +0 -1
  93. package/dist/external-j1RQBbSY.js.map +0 -1
  94. package/dist/select/SelectA.spec.d.ts +0 -1
package/dist/button.cjs CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./external-VwYNFmdb.cjs");exports.Button=e.external;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./external-vjJtYX9R.cjs");exports.Button=e.external;
2
2
  //# sourceMappingURL=button.cjs.map
package/dist/button.js CHANGED
@@ -1,4 +1,4 @@
1
- import { e } from "./external-HTq0VBUW.js";
1
+ import { e } from "./external-zoOMJkop.js";
2
2
  export {
3
3
  e as Button
4
4
  };
package/dist/color.cjs CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./external-V5Rc7RD4.cjs");exports.Color=e.external;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./external-6DXc9G-d.cjs");exports.Color=e.external;
2
2
  //# sourceMappingURL=color.cjs.map
package/dist/color.js CHANGED
@@ -1,4 +1,4 @@
1
- import { e } from "./external-mgTxEe4K.js";
1
+ import { e } from "./external-rZ3m5Z0a.js";
2
2
  export {
3
3
  e as Color
4
4
  };
package/dist/dropdown.cjs CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./Toggle-wVZJoVtX.cjs");exports.Dropdown=e.Dropdown;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./Toggle-qW_TcIDh.cjs");exports.Dropdown=e.Dropdown;
2
2
  //# sourceMappingURL=dropdown.cjs.map
package/dist/dropdown.js CHANGED
@@ -1,4 +1,4 @@
1
- import { D as p } from "./Toggle-3mGeA8rE.js";
1
+ import { D as p } from "./Toggle-zmqGwWeq.js";
2
2
  export {
3
3
  p as Dropdown
4
4
  };
@@ -1,4 +1,4 @@
1
- import { e as b, h as v, ae as j, af as B, ag as U, ah as w, ai as D, aj as _, ak as z, al as A, am as N, an as V } from "./Toggle-3mGeA8rE.js";
1
+ import { e as b, h as v, ae as j, af as B, ag as U, ah as w, ai as D, aj as _, ak as z, al as A, am as N, an as V } from "./Toggle-zmqGwWeq.js";
2
2
  import { j as l } from "./jsx-runtime-NmMXPjeo.js";
3
3
  import { C as u, d as k, T as x, h as M } from "./css-rizsElAK.js";
4
4
  import { useCallback as $, useState as C } from "react";
@@ -145,4 +145,4 @@ export {
145
145
  O as I,
146
146
  Y as e
147
147
  };
148
- //# sourceMappingURL=external-jrFYN1k7.js.map
148
+ //# sourceMappingURL=external-1WVrscEc.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"external-jrFYN1k7.js","sources":["../src/input/HelpText.tsx","../src/input/Label.tsx","../src/util/case.ts","../src/input/Item.tsx","../src/input/DateTime.tsx"],"sourcesContent":["// Copyright 2023 Synnax Labs, Inc.\n//\n// Use of this software is governed by the Business Source License included in the file\n// licenses/BSL.txt.\n//\n// As of the Change Date specified in that file, in accordance with the Business Source\n// License, use of this software will be governed by the Apache License, Version 2.0,\n// included in the file licenses/APL.txt.\n\nimport { type ReactElement } from \"react\";\n\nimport { CSS } from \"@/css\";\nimport { type Status } from \"@/status\";\nimport { Text } from \"@/text\";\n\nimport \"@/input/HelpText.css\";\n\n/** Props for the {@link HelpText} component. */\nexport interface HelpTextProps extends Omit<Text.TextProps<\"small\">, \"level\" | \"ref\"> {\n variant?: Status.Variant;\n}\n\n/**\n * Help text for an input component. We generally recommend using Input.Item with a\n * 'helpText' prop instead of this component. This component is useful for low-level\n * control over the help text element.\n *\n * @param props - Props for the help text component. Unlisted props are passed to the\n * underlying text element.\n * @param props.variant - The variant of the help text.\n * \"success\" | \"error\" | \"warning\" | \"info\" | \"loading\" | \"disabled\n * @default \"info\"\n */\nexport const HelpText = ({\n className,\n variant = \"error\",\n ...props\n}: HelpTextProps): ReactElement => (\n <Text.Text<\"small\">\n className={CSS(\n CSS.B(\"input-help-text\"),\n CSS.BM(\"input-help-text\", variant),\n className,\n )}\n level=\"small\"\n {...props}\n />\n);\n","// Copyright 2023 Synnax Labs, Inc.\n//\n// Use of this software is governed by the Business Source License included in the file\n// licenses/BSL.txt.\n//\n// As of the Change Date specified in that file, in accordance with the Business Source\n// License, use of this software will be governed by the Apache License, Version 2.0,\n// included in the file licenses/APL.txt.\n\nimport { type DetailedHTMLProps, type HTMLAttributes, type ReactElement } from \"react\";\n\nimport { CSS } from \"@/css\";\n\nimport \"@/input/Label.css\";\n\n/** Props for the {@link Label} component. */\nexport interface LabelProps\n extends DetailedHTMLProps<HTMLAttributes<HTMLLabelElement>, HTMLLabelElement> {}\n\n/**\n * A thin, styled wrapper for an input label. We generally recommend using Input.Item\n * with a 'label' prop instead of this component. This component is useful for\n * low-level control over the label element.\n *\n * @param props - Props for the label component. Unlisted props are passed to the\n * underlying label element.\n */\nexport const Label = ({ className, ...props }: LabelProps): ReactElement => {\n return <label className={CSS(CSS.B(\"input-label\"), className)} {...props} />;\n};\n","// Copyright 2023 Synnax Labs, Inc.\n//\n// Use of this software is governed by the Business Source License included in the file\n// licenses/BSL.txt.\n//\n// As of the Change Date specified in that file, in accordance with the Business Source\n// License, use of this software will be governed by the Apache License, Version 2.0,\n// included in the file licenses/APL.txt.\n\nexport const camelToTitle = (str: string): string =>\n str.replace(/([A-Z])/g, \" $1\").replace(/^./, (str) => str.toUpperCase());\n","// Copyright 2023 Synnax Labs, Inc.\n//\n// Use of this software is governed by the Business Source License included in the file\n// licenses/BSL.txt.\n//\n// As of the Change Date specified in that file, in accordance with the Business Source\n// License, use of this software will be governed by the Apache License, Version 2.0,\n// included in the file licenses/APL.txt.\n\nimport { useCallback, type ReactElement } from \"react\";\n\nimport { direction } from \"@synnaxlabs/x\";\nimport {\n type UseControllerProps,\n useController,\n useFormContext,\n} from \"react-hook-form\";\n\nimport { Align } from \"@/align\";\nimport { CSS } from \"@/css\";\nimport { HelpText } from \"@/input/HelpText\";\nimport { Label } from \"@/input/Label\";\nimport { Text } from \"@/input/Text\";\nimport { type Control, type Value } from \"@/input/types\";\nimport { camelToTitle } from \"@/util/case\";\nimport { componentRenderProp, type RenderProp } from \"@/util/renderProp\";\n\nimport \"@/input/Item.css\";\n\nexport interface ItemProps extends Align.SpaceProps {\n label?: string;\n showLabel?: boolean;\n helpText?: string;\n padHelpText?: boolean;\n}\n\nconst maybeDefaultAlignment = (\n align?: Align.Alignment,\n dir: direction.Crude = \"x\",\n): Align.Alignment => {\n if (align != null) return align;\n return direction.construct(dir) === \"y\" ? \"stretch\" : \"center\";\n};\n\nexport const Item = ({\n label,\n showLabel = true,\n helpText,\n direction = \"y\",\n className,\n children,\n align,\n size = \"small\",\n padHelpText = false,\n ...props\n}: ItemProps): ReactElement => {\n let inputAndHelp: ReactElement;\n if (direction === \"x\")\n inputAndHelp = (\n <Align.Space direction=\"y\" size=\"small\">\n {children}\n {(padHelpText || helpText != null) && <HelpText>{helpText}</HelpText>}\n </Align.Space>\n );\n else\n inputAndHelp = (\n <Align.Space direction=\"y\" size={1 / 3}>\n {children}\n {(padHelpText || helpText != null) && <HelpText>{helpText}</HelpText>}\n </Align.Space>\n );\n\n return (\n <Align.Space\n className={CSS(CSS.B(\"input-item\"), className)}\n direction={direction}\n size={size}\n align={maybeDefaultAlignment(align, direction)}\n {...props}\n >\n {showLabel && <Label>{label}</Label>}\n {inputAndHelp}\n </Align.Space>\n );\n};\n\nexport type ItemControlledProps<\n I extends Value = string | number,\n O extends Value = I,\n> = Omit<ItemProps, \"children\"> &\n Omit<UseControllerProps<any, string>, \"controller\"> & {\n children?: RenderProp<\n Control<I, O> & { onBlur?: () => void; ref?: React.Ref<any> }\n >;\n alsoValidate?: string[];\n padHelpText?: boolean;\n };\n\nconst defaultChild = componentRenderProp(Text);\n\nexport const HFItem = <I extends Value = string | number, O extends Value = I>({\n name,\n rules,\n shouldUnregister,\n defaultValue,\n label,\n children = defaultChild as unknown as RenderProp<Control<I, O>>,\n alsoValidate,\n padHelpText = true,\n ref: _,\n ...props\n}: ItemControlledProps<I, O>): ReactElement => {\n const { field, fieldState } = useController({\n rules,\n name,\n });\n const { trigger } = useFormContext();\n if (label == null) label = camelToTitle(name);\n\n const handleBlur = useCallback(() => {\n field.onBlur();\n if (alsoValidate != null) void trigger(alsoValidate);\n }, [field.onBlur, trigger, alsoValidate, name]);\n\n return (\n <Item\n label={label}\n padHelpText={padHelpText}\n helpText={fieldState.error?.message}\n {...props}\n >\n {children({\n onChange: field.onChange,\n value: field.value,\n onBlur: handleBlur,\n })}\n </Item>\n );\n};\n","import { useState } from \"react\";\n\nimport { TimeSpan, TimeStamp } from \"@synnaxlabs/x\";\n\nimport { Text } from \"@/input/Text\";\n\nimport { type BaseProps } from \"./types\";\n\nexport interface DateTimeProps extends BaseProps<number> {}\n\nexport const DateTime = ({ value, onChange, onBlur, ...props }: DateTimeProps) => {\n const ts = new TimeStamp(value, \"UTC\");\n const [internalValue, setInternalVlaue] = useState(\n ts.fString(\"ISO\", \"local\").slice(0, -1),\n );\n const [valueIsValid, setValueIsValid] = useState(true);\n\n const handleChange = (next: string | number): void => {\n let nextStr = next.toString();\n setInternalVlaue(nextStr);\n\n let ts = new TimeStamp(next, \"UTC\");\n if (nextStr.length < 23) nextStr += \".000\";\n\n ts = ts.add(\n (TimeStamp.now().date().getTimezoneOffset() - ts.date().getTimezoneOffset()) *\n TimeSpan.MINUTE.valueOf(),\n );\n let ok = false;\n try {\n const str = ts.fString(\"ISO\", \"local\");\n ok = str.slice(0, -1) === nextStr;\n } catch (_) {\n console.error(\"e\");\n }\n if (!ok) {\n setValueIsValid(false);\n return;\n }\n onChange(ts.valueOf());\n setValueIsValid(true);\n };\n\n const handleBlur: React.FocusEventHandler<HTMLInputElement> = (e) => {\n setValueIsValid(true);\n setInternalVlaue(new TimeStamp(value, \"UTC\").fString(\"ISO\", \"local\").slice(0, -1));\n onBlur?.(e);\n };\n\n return (\n <Text\n type=\"datetime-local\"\n onBlur={handleBlur}\n required={false}\n value={\n valueIsValid\n ? new TimeStamp(value, \"UTC\").fString(\"ISO\", \"local\").slice(0, -1)\n : internalValue\n }\n onChange={handleChange}\n {...props}\n />\n );\n};\n"],"names":["HelpText","className","variant","props","jsx","Text.Text","CSS","Label","camelToTitle","str","maybeDefaultAlignment","align","dir","direction","Item","label","showLabel","helpText","children","size","padHelpText","inputAndHelp","Align.Space","jsxs","defaultChild","componentRenderProp","Text","HFItem","name","rules","shouldUnregister","defaultValue","alsoValidate","_","field","fieldState","useController","trigger","useFormContext","handleBlur","useCallback","_a","DateTime","value","onChange","onBlur","ts","TimeStamp","internalValue","setInternalVlaue","useState","valueIsValid","setValueIsValid","handleChange","next","nextStr","TimeSpan","ok","e"],"mappings":"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"}
1
+ {"version":3,"file":"external-1WVrscEc.js","sources":["../src/input/HelpText.tsx","../src/input/Label.tsx","../src/util/case.ts","../src/input/Item.tsx","../src/input/DateTime.tsx"],"sourcesContent":["// Copyright 2023 Synnax Labs, Inc.\n//\n// Use of this software is governed by the Business Source License included in the file\n// licenses/BSL.txt.\n//\n// As of the Change Date specified in that file, in accordance with the Business Source\n// License, use of this software will be governed by the Apache License, Version 2.0,\n// included in the file licenses/APL.txt.\n\nimport { type ReactElement } from \"react\";\n\nimport { CSS } from \"@/css\";\nimport { type Status } from \"@/status\";\nimport { Text } from \"@/text\";\n\nimport \"@/input/HelpText.css\";\n\n/** Props for the {@link HelpText} component. */\nexport interface HelpTextProps extends Omit<Text.TextProps<\"small\">, \"level\" | \"ref\"> {\n variant?: Status.Variant;\n}\n\n/**\n * Help text for an input component. We generally recommend using Input.Item with a\n * 'helpText' prop instead of this component. This component is useful for low-level\n * control over the help text element.\n *\n * @param props - Props for the help text component. Unlisted props are passed to the\n * underlying text element.\n * @param props.variant - The variant of the help text.\n * \"success\" | \"error\" | \"warning\" | \"info\" | \"loading\" | \"disabled\n * @default \"info\"\n */\nexport const HelpText = ({\n className,\n variant = \"error\",\n ...props\n}: HelpTextProps): ReactElement => (\n <Text.Text<\"small\">\n className={CSS(\n CSS.B(\"input-help-text\"),\n CSS.BM(\"input-help-text\", variant),\n className,\n )}\n level=\"small\"\n {...props}\n />\n);\n","// Copyright 2023 Synnax Labs, Inc.\n//\n// Use of this software is governed by the Business Source License included in the file\n// licenses/BSL.txt.\n//\n// As of the Change Date specified in that file, in accordance with the Business Source\n// License, use of this software will be governed by the Apache License, Version 2.0,\n// included in the file licenses/APL.txt.\n\nimport { type DetailedHTMLProps, type HTMLAttributes, type ReactElement } from \"react\";\n\nimport { CSS } from \"@/css\";\n\nimport \"@/input/Label.css\";\n\n/** Props for the {@link Label} component. */\nexport interface LabelProps\n extends DetailedHTMLProps<HTMLAttributes<HTMLLabelElement>, HTMLLabelElement> {}\n\n/**\n * A thin, styled wrapper for an input label. We generally recommend using Input.Item\n * with a 'label' prop instead of this component. This component is useful for\n * low-level control over the label element.\n *\n * @param props - Props for the label component. Unlisted props are passed to the\n * underlying label element.\n */\nexport const Label = ({ className, ...props }: LabelProps): ReactElement => {\n return <label className={CSS(CSS.B(\"input-label\"), className)} {...props} />;\n};\n","// Copyright 2023 Synnax Labs, Inc.\n//\n// Use of this software is governed by the Business Source License included in the file\n// licenses/BSL.txt.\n//\n// As of the Change Date specified in that file, in accordance with the Business Source\n// License, use of this software will be governed by the Apache License, Version 2.0,\n// included in the file licenses/APL.txt.\n\nexport const camelToTitle = (str: string): string =>\n str.replace(/([A-Z])/g, \" $1\").replace(/^./, (str) => str.toUpperCase());\n","// Copyright 2023 Synnax Labs, Inc.\n//\n// Use of this software is governed by the Business Source License included in the file\n// licenses/BSL.txt.\n//\n// As of the Change Date specified in that file, in accordance with the Business Source\n// License, use of this software will be governed by the Apache License, Version 2.0,\n// included in the file licenses/APL.txt.\n\nimport { useCallback, type ReactElement } from \"react\";\n\nimport { direction } from \"@synnaxlabs/x\";\nimport {\n type UseControllerProps,\n useController,\n useFormContext,\n} from \"react-hook-form\";\n\nimport { Align } from \"@/align\";\nimport { CSS } from \"@/css\";\nimport { HelpText } from \"@/input/HelpText\";\nimport { Label } from \"@/input/Label\";\nimport { Text } from \"@/input/Text\";\nimport { type Control, type Value } from \"@/input/types\";\nimport { camelToTitle } from \"@/util/case\";\nimport { componentRenderProp, type RenderProp } from \"@/util/renderProp\";\n\nimport \"@/input/Item.css\";\n\nexport interface ItemProps extends Align.SpaceProps {\n label?: string;\n showLabel?: boolean;\n helpText?: string;\n padHelpText?: boolean;\n}\n\nconst maybeDefaultAlignment = (\n align?: Align.Alignment,\n dir: direction.Crude = \"x\",\n): Align.Alignment => {\n if (align != null) return align;\n return direction.construct(dir) === \"y\" ? \"stretch\" : \"center\";\n};\n\nexport const Item = ({\n label,\n showLabel = true,\n helpText,\n direction = \"y\",\n className,\n children,\n align,\n size = \"small\",\n padHelpText = false,\n ...props\n}: ItemProps): ReactElement => {\n let inputAndHelp: ReactElement;\n if (direction === \"x\")\n inputAndHelp = (\n <Align.Space direction=\"y\" size=\"small\">\n {children}\n {(padHelpText || helpText != null) && <HelpText>{helpText}</HelpText>}\n </Align.Space>\n );\n else\n inputAndHelp = (\n <Align.Space direction=\"y\" size={1 / 3}>\n {children}\n {(padHelpText || helpText != null) && <HelpText>{helpText}</HelpText>}\n </Align.Space>\n );\n\n return (\n <Align.Space\n className={CSS(CSS.B(\"input-item\"), className)}\n direction={direction}\n size={size}\n align={maybeDefaultAlignment(align, direction)}\n {...props}\n >\n {showLabel && <Label>{label}</Label>}\n {inputAndHelp}\n </Align.Space>\n );\n};\n\nexport type ItemControlledProps<\n I extends Value = string | number,\n O extends Value = I,\n> = Omit<ItemProps, \"children\"> &\n Omit<UseControllerProps<any, string>, \"controller\"> & {\n children?: RenderProp<\n Control<I, O> & { onBlur?: () => void; ref?: React.Ref<any> }\n >;\n alsoValidate?: string[];\n padHelpText?: boolean;\n };\n\nconst defaultChild = componentRenderProp(Text);\n\nexport const HFItem = <I extends Value = string | number, O extends Value = I>({\n name,\n rules,\n shouldUnregister,\n defaultValue,\n label,\n children = defaultChild as unknown as RenderProp<Control<I, O>>,\n alsoValidate,\n padHelpText = true,\n ref: _,\n ...props\n}: ItemControlledProps<I, O>): ReactElement => {\n const { field, fieldState } = useController({\n rules,\n name,\n });\n const { trigger } = useFormContext();\n if (label == null) label = camelToTitle(name);\n\n const handleBlur = useCallback(() => {\n field.onBlur();\n if (alsoValidate != null) void trigger(alsoValidate);\n }, [field.onBlur, trigger, alsoValidate, name]);\n\n return (\n <Item\n label={label}\n padHelpText={padHelpText}\n helpText={fieldState.error?.message}\n {...props}\n >\n {children({\n onChange: field.onChange,\n value: field.value,\n onBlur: handleBlur,\n })}\n </Item>\n );\n};\n","import { useState } from \"react\";\n\nimport { TimeSpan, TimeStamp } from \"@synnaxlabs/x\";\n\nimport { Text } from \"@/input/Text\";\n\nimport { type BaseProps } from \"./types\";\n\nexport interface DateTimeProps extends BaseProps<number> {}\n\nexport const DateTime = ({ value, onChange, onBlur, ...props }: DateTimeProps) => {\n const ts = new TimeStamp(value, \"UTC\");\n const [internalValue, setInternalVlaue] = useState(\n ts.fString(\"ISO\", \"local\").slice(0, -1),\n );\n const [valueIsValid, setValueIsValid] = useState(true);\n\n const handleChange = (next: string | number): void => {\n let nextStr = next.toString();\n setInternalVlaue(nextStr);\n\n let ts = new TimeStamp(next, \"UTC\");\n if (nextStr.length < 23) nextStr += \".000\";\n\n ts = ts.add(\n (TimeStamp.now().date().getTimezoneOffset() - ts.date().getTimezoneOffset()) *\n TimeSpan.MINUTE.valueOf(),\n );\n let ok = false;\n try {\n const str = ts.fString(\"ISO\", \"local\");\n ok = str.slice(0, -1) === nextStr;\n } catch (_) {\n console.error(\"e\");\n }\n if (!ok) {\n setValueIsValid(false);\n return;\n }\n onChange(ts.valueOf());\n setValueIsValid(true);\n };\n\n const handleBlur: React.FocusEventHandler<HTMLInputElement> = (e) => {\n setValueIsValid(true);\n setInternalVlaue(new TimeStamp(value, \"UTC\").fString(\"ISO\", \"local\").slice(0, -1));\n onBlur?.(e);\n };\n\n return (\n <Text\n type=\"datetime-local\"\n onBlur={handleBlur}\n required={false}\n value={\n valueIsValid\n ? new TimeStamp(value, \"UTC\").fString(\"ISO\", \"local\").slice(0, -1)\n : internalValue\n }\n onChange={handleChange}\n {...props}\n />\n );\n};\n"],"names":["HelpText","className","variant","props","jsx","Text.Text","CSS","Label","camelToTitle","str","maybeDefaultAlignment","align","dir","direction","Item","label","showLabel","helpText","children","size","padHelpText","inputAndHelp","Align.Space","jsxs","defaultChild","componentRenderProp","Text","HFItem","name","rules","shouldUnregister","defaultValue","alsoValidate","_","field","fieldState","useController","trigger","useFormContext","handleBlur","useCallback","_a","DateTime","value","onChange","onBlur","ts","TimeStamp","internalValue","setInternalVlaue","useState","valueIsValid","setValueIsValid","handleChange","next","nextStr","TimeSpan","ok","e"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use strict";const e=require("./css-JWFtNl10.cjs"),l=require("./jsx-runtime-evvPGacs.cjs"),r=require("./Toggle-wVZJoVtX.cjs"),b=require("react");require("./Center-Q-fgAb96.cjs");require("./aggregator-6_J8kSSO.cjs");const d=({value:t,onChange:o,...u})=>{const i=s=>{s.hex==="transparent"&&o(e.ZERO),o(new e.Color(s.hex,s.rgb.a))};return l.jsxRuntimeExports.jsx(r.SketchPicker,{className:e.CSS.B("color-picker"),color:new e.Color(t).hex,onChange:i,presetColors:[],...u})},x="color",g=({value:t,onChange:o,className:u,size:i="medium",onVisibleChange:s,initialVisible:m,draggable:h=!0,...j})=>{const{visible:k,open:y,close:C}=r.use$1({onVisibleChange:s,initialVisible:m}),w=r.use().colors.gray.l0,c=new e.Color(t),R=r.useDraggingState(),S=b.useCallback(({items:a})=>{const[n]=r.filterByType(x,a);return n!=null&&n.key!==c.hex},[c.hex]),{startDrag:f,...E}=r.useDragAndDrop({type:"Color.Swatch",onDrop:({items:a})=>{const n=r.filterByType(x,a);return a.length>0&&(o==null||o(new e.Color(n[0].key))),n},canDrop:S}),p=l.jsxRuntimeExports.jsx(r.Button,{className:e.CSS(e.CSS.B("color-swatch"),e.CSS.size(i),c.contrast(w)>1.5&&c.a>.5&&e.CSS.M("no-border"),e.CSS.dropRegion(S(R)),u),draggable:h,onDragStart:()=>f([{type:x,key:c.hex}]),style:{backgroundColor:e.cssString(t)},variant:"text",onClick:y,size:i,tooltip:o!=null?l.jsxRuntimeExports.jsx(r.Text,{level:"small",children:"Click to change color"}):void 0,...E,...j});return o==null?p:l.jsxRuntimeExports.jsxs(r.Dialog,{close:C,visible:k,className:e.CSS.BE("color-swatch","dropdown"),keepMounted:!1,children:[p,l.jsxRuntimeExports.jsx(d,{value:t,onChange:o})]})},D=Object.freeze(Object.defineProperty({__proto__:null,Color:e.Color,Picker:d,Swatch:g,ZERO:e.ZERO,cssString:e.cssString,fromHSLA:e.fromHSLA,toHex:e.toHex},Symbol.toStringTag,{value:"Module"}));exports.Swatch=g;exports.external=D;
2
- //# sourceMappingURL=external-V5Rc7RD4.cjs.map
1
+ "use strict";const e=require("./css-JWFtNl10.cjs"),l=require("./jsx-runtime-evvPGacs.cjs"),r=require("./Toggle-qW_TcIDh.cjs"),b=require("react");require("./Center-Q-fgAb96.cjs");require("./aggregator-6_J8kSSO.cjs");const d=({value:t,onChange:o,...u})=>{const i=s=>{s.hex==="transparent"&&o(e.ZERO),o(new e.Color(s.hex,s.rgb.a))};return l.jsxRuntimeExports.jsx(r.SketchPicker,{className:e.CSS.B("color-picker"),color:new e.Color(t).hex,onChange:i,presetColors:[],...u})},x="color",g=({value:t,onChange:o,className:u,size:i="medium",onVisibleChange:s,initialVisible:m,draggable:h=!0,...j})=>{const{visible:k,open:y,close:C}=r.use$1({onVisibleChange:s,initialVisible:m}),w=r.use().colors.gray.l0,c=new e.Color(t),R=r.useDraggingState(),S=b.useCallback(({items:a})=>{const[n]=r.filterByType(x,a);return n!=null&&n.key!==c.hex},[c.hex]),{startDrag:f,...E}=r.useDragAndDrop({type:"Color.Swatch",onDrop:({items:a})=>{const n=r.filterByType(x,a);return a.length>0&&(o==null||o(new e.Color(n[0].key))),n},canDrop:S}),p=l.jsxRuntimeExports.jsx(r.Button,{className:e.CSS(e.CSS.B("color-swatch"),e.CSS.size(i),c.contrast(w)>1.5&&c.a>.5&&e.CSS.M("no-border"),e.CSS.dropRegion(S(R)),u),draggable:h,onDragStart:()=>f([{type:x,key:c.hex}]),style:{backgroundColor:e.cssString(t)},variant:"text",onClick:y,size:i,tooltip:o!=null?l.jsxRuntimeExports.jsx(r.Text,{level:"small",children:"Click to change color"}):void 0,...E,...j});return o==null?p:l.jsxRuntimeExports.jsxs(r.Dialog,{close:C,visible:k,className:e.CSS.BE("color-swatch","dropdown"),keepMounted:!1,children:[p,l.jsxRuntimeExports.jsx(d,{value:t,onChange:o})]})},D=Object.freeze(Object.defineProperty({__proto__:null,Color:e.Color,Picker:d,Swatch:g,ZERO:e.ZERO,cssString:e.cssString,fromHSLA:e.fromHSLA,toHex:e.toHex},Symbol.toStringTag,{value:"Module"}));exports.Swatch=g;exports.external=D;
2
+ //# sourceMappingURL=external-6DXc9G-d.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"external-V5Rc7RD4.cjs","sources":["../src/color/Picker/Picker.tsx","../src/color/Swatch/Swatch.tsx"],"sourcesContent":["// Copyright 2023 Synnax Labs, Inc.\n//\n// Use of this software is governed by the Business Source License included in the file\n// licenses/BSL.txt.\n//\n// As of the Change Date specified in that file, in accordance with the Business Source\n// License, use of this software will be governed by the Apache License, Version 2.0,\n// included in the file licenses/APL.txt.\n\nimport {\n useCallback,\n type ComponentPropsWithoutRef,\n type ReactElement,\n useId,\n} from \"react\";\n\nimport { SketchPicker, type ColorResult } from \"react-color\";\n\nimport { color } from \"@/color/core\";\nimport { CSS } from \"@/css\";\nimport { type Input } from \"@/input\";\n\nimport \"@/color/Picker/Picker.css\";\n\nexport interface PickerProps\n extends Input.Control<color.Crude, color.Color>,\n Omit<ComponentPropsWithoutRef<\"div\">, \"onChange\"> {}\n\nexport const Picker = ({ value, onChange, ...props }: PickerProps): ReactElement => {\n const handleChange = (res: ColorResult): void => {\n if (res.hex === \"transparent\") onChange(color.ZERO);\n onChange(new color.Color(res.hex, res.rgb.a));\n };\n\n return (\n <SketchPicker\n className={CSS.B(\"color-picker\")}\n color={new color.Color(value).hex}\n onChange={handleChange}\n presetColors={[]}\n {...props}\n />\n );\n};\n","// Copyright 2023 Synnax Labs, Inc.\n//\n// Use of this software is governed by the Business Source License included in the file\n// licenses/BSL.txt.\n//\n// As of the Change Date specified in that file, in accordance with the Business Source\n// License, use of this software will be governed by the Apache License, Version 2.0,\n// included in the file licenses/APL.txt.\n\nimport { type ReactElement, useCallback } from \"react\";\n\nimport { Button } from \"@/button\";\nimport { color } from \"@/color/core\";\nimport { type Crude, type Color } from \"@/color/core/color\";\nimport { Picker } from \"@/color/Picker\";\nimport { CSS } from \"@/css\";\nimport { Dropdown } from \"@/dropdown\";\nimport { type UseProps } from \"@/dropdown/Dropdown\";\nimport { Haul } from \"@/haul\";\nimport { type Input } from \"@/input\";\nimport { Text } from \"@/text\";\nimport { Theming } from \"@/theming\";\n\nimport \"@/color/Swatch/Swatch.css\";\n\nexport interface SwatchProps\n extends Input.Control<Crude, Color>,\n Omit<Button.ButtonProps, \"onChange\" | \"value\">,\n UseProps {}\n\nconst HAUL_TYPE = \"color\";\n\nexport const Swatch = ({\n value,\n onChange,\n className,\n size = \"medium\",\n onVisibleChange,\n initialVisible,\n draggable = true,\n ...props\n}: SwatchProps): ReactElement => {\n const { visible, open, close } = Dropdown.use({ onVisibleChange, initialVisible });\n\n const bg = Theming.use().colors.gray.l0;\n\n const d = new color.Color(value);\n\n const dragging = Haul.useDraggingState();\n\n const canDrop: Haul.CanDrop = useCallback(\n ({ items }) => {\n const [k] = Haul.filterByType(HAUL_TYPE, items);\n return k != null && k.key !== d.hex;\n },\n [d.hex],\n );\n\n const { startDrag, ...haulProps } = Haul.useDragAndDrop({\n type: \"Color.Swatch\",\n onDrop: ({ items }) => {\n const dropped = Haul.filterByType(HAUL_TYPE, items);\n if (items.length > 0) onChange?.(new color.Color(dropped[0].key as string));\n return dropped;\n },\n canDrop,\n });\n\n const swatch = (\n <Button.Button\n className={CSS(\n CSS.B(\"color-swatch\"),\n CSS.size(size),\n d.contrast(bg) > 1.5 && d.a > 0.5 && CSS.M(\"no-border\"),\n CSS.dropRegion(canDrop(dragging)),\n className,\n )}\n draggable={draggable}\n onDragStart={() => startDrag([{ type: HAUL_TYPE, key: d.hex }])}\n style={{ backgroundColor: color.cssString(value) }}\n variant=\"text\"\n onClick={open}\n size={size}\n tooltip={\n onChange != null ? (\n <Text.Text level=\"small\">Click to change color</Text.Text>\n ) : undefined\n }\n {...haulProps}\n {...props}\n />\n );\n\n if (onChange == null) return swatch;\n\n return (\n <Dropdown.Dialog\n close={close}\n visible={visible}\n className={CSS.BE(\"color-swatch\", \"dropdown\")}\n keepMounted={false}\n >\n {swatch}\n <Picker value={value} onChange={onChange} />\n </Dropdown.Dialog>\n );\n};\n"],"names":["Picker","value","onChange","props","handleChange","res","color.ZERO","color.Color","jsx","SketchPicker","CSS","HAUL_TYPE","Swatch","className","size","onVisibleChange","initialVisible","draggable","visible","open","close","Dropdown.use","bg","Theming.use","d","dragging","Haul.useDraggingState","canDrop","useCallback","items","k","Haul.filterByType","startDrag","haulProps","Haul.useDragAndDrop","dropped","swatch","Button.Button","color.cssString","Text.Text","jsxs","Dropdown.Dialog"],"mappings":"uNA4BO,MAAMA,EAAS,CAAC,CAAE,MAAAC,EAAO,SAAAC,EAAU,GAAGC,KAAuC,CAC5E,MAAAC,EAAgBC,GAA2B,CAC3CA,EAAI,MAAQ,eAAeH,EAASI,EAAU,IAAA,EACzCJ,EAAA,IAAIK,EAAY,MAAAF,EAAI,IAAKA,EAAI,IAAI,CAAC,CAAC,CAAA,EAI5C,OAAAG,EAAA,kBAAA,IAACC,EAAA,aAAA,CACC,UAAWC,EAAAA,IAAI,EAAE,cAAc,EAC/B,MAAO,IAAIH,EAAAA,MAAYN,CAAK,EAAE,IAC9B,SAAUG,EACV,aAAc,CAAC,EACd,GAAGD,CAAA,CAAA,CAGV,ECbMQ,EAAY,QAELC,EAAS,CAAC,CACrB,MAAAX,EACA,SAAAC,EACA,UAAAW,EACA,KAAAC,EAAO,SACP,gBAAAC,EACA,eAAAC,EACA,UAAAC,EAAY,GACZ,GAAGd,CACL,IAAiC,CACzB,KAAA,CAAE,QAAAe,EAAS,KAAAC,EAAM,MAAAC,CAAM,EAAIC,EAAAA,MAAa,CAAE,gBAAAN,EAAiB,eAAAC,CAAA,CAAgB,EAE3EM,EAAKC,EAAY,IAAA,EAAE,OAAO,KAAK,GAE/BC,EAAI,IAAIjB,QAAYN,CAAK,EAEzBwB,EAAWC,EAAAA,mBAEXC,EAAwBC,EAAA,YAC5B,CAAC,CAAE,MAAAC,CAAA,IAAY,CACb,KAAM,CAACC,CAAC,EAAIC,EAAK,aAAapB,EAAWkB,CAAK,EAC9C,OAAOC,GAAK,MAAQA,EAAE,MAAQN,EAAE,GAClC,EACA,CAACA,EAAE,GAAG,CAAA,EAGF,CAAE,UAAAQ,EAAW,GAAGC,CAAU,EAAIC,EAAAA,eAAoB,CACtD,KAAM,eACN,OAAQ,CAAC,CAAE,MAAAL,KAAY,CACrB,MAAMM,EAAUJ,EAAAA,aAAkBpB,EAAWkB,CAAK,EAClD,OAAIA,EAAM,OAAS,IAAG3B,GAAA,MAAAA,EAAW,IAAIK,EAAAA,MAAY4B,EAAQ,CAAC,EAAE,GAAa,IAClEA,CACT,EACA,QAAAR,CAAA,CACD,EAEKS,EACJ5B,EAAA,kBAAA,IAAC6B,EAAO,OAAP,CACC,UAAW3B,EAAA,IACTA,EAAA,IAAI,EAAE,cAAc,EACpBA,EAAA,IAAI,KAAKI,CAAI,EACbU,EAAE,SAASF,CAAE,EAAI,KAAOE,EAAE,EAAI,IAAOd,EAAAA,IAAI,EAAE,WAAW,EACtDA,EAAAA,IAAI,WAAWiB,EAAQF,CAAQ,CAAC,EAChCZ,CACF,EACA,UAAAI,EACA,YAAa,IAAMe,EAAU,CAAC,CAAE,KAAMrB,EAAW,IAAKa,EAAE,GAAI,CAAC,CAAC,EAC9D,MAAO,CAAE,gBAAiBc,EAAM,UAAUrC,CAAK,CAAE,EACjD,QAAQ,OACR,QAASkB,EACT,KAAAL,EACA,QACEZ,GAAY,KACTM,EAAAA,kBAAAA,IAAA+B,EAAAA,KAAA,CAAU,MAAM,QAAQ,SAAA,uBAAqB,CAAA,EAC5C,OAEL,GAAGN,EACH,GAAG9B,CAAA,CAAA,EAIR,OAAID,GAAY,KAAakC,EAG3BI,EAAA,kBAAA,KAACC,EAAS,OAAT,CACC,MAAArB,EACA,QAAAF,EACA,UAAWR,EAAA,IAAI,GAAG,eAAgB,UAAU,EAC5C,YAAa,GAEZ,SAAA,CAAA0B,EACD5B,EAAAA,kBAAAA,IAACR,EAAO,CAAA,MAAAC,EAAc,SAAAC,CAAoB,CAAA,CAAA,CAAA,CAAA,CAGhD"}
1
+ {"version":3,"file":"external-6DXc9G-d.cjs","sources":["../src/color/Picker/Picker.tsx","../src/color/Swatch/Swatch.tsx"],"sourcesContent":["// Copyright 2023 Synnax Labs, Inc.\n//\n// Use of this software is governed by the Business Source License included in the file\n// licenses/BSL.txt.\n//\n// As of the Change Date specified in that file, in accordance with the Business Source\n// License, use of this software will be governed by the Apache License, Version 2.0,\n// included in the file licenses/APL.txt.\n\nimport {\n useCallback,\n type ComponentPropsWithoutRef,\n type ReactElement,\n useId,\n} from \"react\";\n\nimport { SketchPicker, type ColorResult } from \"react-color\";\n\nimport { color } from \"@/color/core\";\nimport { CSS } from \"@/css\";\nimport { type Input } from \"@/input\";\n\nimport \"@/color/Picker/Picker.css\";\n\nexport interface PickerProps\n extends Input.Control<color.Crude, color.Color>,\n Omit<ComponentPropsWithoutRef<\"div\">, \"onChange\"> {}\n\nexport const Picker = ({ value, onChange, ...props }: PickerProps): ReactElement => {\n const handleChange = (res: ColorResult): void => {\n if (res.hex === \"transparent\") onChange(color.ZERO);\n onChange(new color.Color(res.hex, res.rgb.a));\n };\n\n return (\n <SketchPicker\n className={CSS.B(\"color-picker\")}\n color={new color.Color(value).hex}\n onChange={handleChange}\n presetColors={[]}\n {...props}\n />\n );\n};\n","// Copyright 2023 Synnax Labs, Inc.\n//\n// Use of this software is governed by the Business Source License included in the file\n// licenses/BSL.txt.\n//\n// As of the Change Date specified in that file, in accordance with the Business Source\n// License, use of this software will be governed by the Apache License, Version 2.0,\n// included in the file licenses/APL.txt.\n\nimport { type ReactElement, useCallback } from \"react\";\n\nimport { Button } from \"@/button\";\nimport { color } from \"@/color/core\";\nimport { type Crude, type Color } from \"@/color/core/color\";\nimport { Picker } from \"@/color/Picker\";\nimport { CSS } from \"@/css\";\nimport { Dropdown } from \"@/dropdown\";\nimport { type UseProps } from \"@/dropdown/Dropdown\";\nimport { Haul } from \"@/haul\";\nimport { type Input } from \"@/input\";\nimport { Text } from \"@/text\";\nimport { Theming } from \"@/theming\";\n\nimport \"@/color/Swatch/Swatch.css\";\n\nexport interface SwatchProps\n extends Input.Control<Crude, Color>,\n Omit<Button.ButtonProps, \"onChange\" | \"value\">,\n UseProps {}\n\nconst HAUL_TYPE = \"color\";\n\nexport const Swatch = ({\n value,\n onChange,\n className,\n size = \"medium\",\n onVisibleChange,\n initialVisible,\n draggable = true,\n ...props\n}: SwatchProps): ReactElement => {\n const { visible, open, close } = Dropdown.use({ onVisibleChange, initialVisible });\n\n const bg = Theming.use().colors.gray.l0;\n\n const d = new color.Color(value);\n\n const dragging = Haul.useDraggingState();\n\n const canDrop: Haul.CanDrop = useCallback(\n ({ items }) => {\n const [k] = Haul.filterByType(HAUL_TYPE, items);\n return k != null && k.key !== d.hex;\n },\n [d.hex],\n );\n\n const { startDrag, ...haulProps } = Haul.useDragAndDrop({\n type: \"Color.Swatch\",\n onDrop: ({ items }) => {\n const dropped = Haul.filterByType(HAUL_TYPE, items);\n if (items.length > 0) onChange?.(new color.Color(dropped[0].key as string));\n return dropped;\n },\n canDrop,\n });\n\n const swatch = (\n <Button.Button\n className={CSS(\n CSS.B(\"color-swatch\"),\n CSS.size(size),\n d.contrast(bg) > 1.5 && d.a > 0.5 && CSS.M(\"no-border\"),\n CSS.dropRegion(canDrop(dragging)),\n className,\n )}\n draggable={draggable}\n onDragStart={() => startDrag([{ type: HAUL_TYPE, key: d.hex }])}\n style={{ backgroundColor: color.cssString(value) }}\n variant=\"text\"\n onClick={open}\n size={size}\n tooltip={\n onChange != null ? (\n <Text.Text level=\"small\">Click to change color</Text.Text>\n ) : undefined\n }\n {...haulProps}\n {...props}\n />\n );\n\n if (onChange == null) return swatch;\n\n return (\n <Dropdown.Dialog\n close={close}\n visible={visible}\n className={CSS.BE(\"color-swatch\", \"dropdown\")}\n keepMounted={false}\n >\n {swatch}\n <Picker value={value} onChange={onChange} />\n </Dropdown.Dialog>\n );\n};\n"],"names":["Picker","value","onChange","props","handleChange","res","color.ZERO","color.Color","jsx","SketchPicker","CSS","HAUL_TYPE","Swatch","className","size","onVisibleChange","initialVisible","draggable","visible","open","close","Dropdown.use","bg","Theming.use","d","dragging","Haul.useDraggingState","canDrop","useCallback","items","k","Haul.filterByType","startDrag","haulProps","Haul.useDragAndDrop","dropped","swatch","Button.Button","color.cssString","Text.Text","jsxs","Dropdown.Dialog"],"mappings":"uNA4BO,MAAMA,EAAS,CAAC,CAAE,MAAAC,EAAO,SAAAC,EAAU,GAAGC,KAAuC,CAC5E,MAAAC,EAAgBC,GAA2B,CAC3CA,EAAI,MAAQ,eAAeH,EAASI,EAAU,IAAA,EACzCJ,EAAA,IAAIK,EAAY,MAAAF,EAAI,IAAKA,EAAI,IAAI,CAAC,CAAC,CAAA,EAI5C,OAAAG,EAAA,kBAAA,IAACC,EAAA,aAAA,CACC,UAAWC,EAAAA,IAAI,EAAE,cAAc,EAC/B,MAAO,IAAIH,EAAAA,MAAYN,CAAK,EAAE,IAC9B,SAAUG,EACV,aAAc,CAAC,EACd,GAAGD,CAAA,CAAA,CAGV,ECbMQ,EAAY,QAELC,EAAS,CAAC,CACrB,MAAAX,EACA,SAAAC,EACA,UAAAW,EACA,KAAAC,EAAO,SACP,gBAAAC,EACA,eAAAC,EACA,UAAAC,EAAY,GACZ,GAAGd,CACL,IAAiC,CACzB,KAAA,CAAE,QAAAe,EAAS,KAAAC,EAAM,MAAAC,CAAM,EAAIC,EAAAA,MAAa,CAAE,gBAAAN,EAAiB,eAAAC,CAAA,CAAgB,EAE3EM,EAAKC,EAAY,IAAA,EAAE,OAAO,KAAK,GAE/BC,EAAI,IAAIjB,QAAYN,CAAK,EAEzBwB,EAAWC,EAAAA,mBAEXC,EAAwBC,EAAA,YAC5B,CAAC,CAAE,MAAAC,CAAA,IAAY,CACb,KAAM,CAACC,CAAC,EAAIC,EAAK,aAAapB,EAAWkB,CAAK,EAC9C,OAAOC,GAAK,MAAQA,EAAE,MAAQN,EAAE,GAClC,EACA,CAACA,EAAE,GAAG,CAAA,EAGF,CAAE,UAAAQ,EAAW,GAAGC,CAAU,EAAIC,EAAAA,eAAoB,CACtD,KAAM,eACN,OAAQ,CAAC,CAAE,MAAAL,KAAY,CACrB,MAAMM,EAAUJ,EAAAA,aAAkBpB,EAAWkB,CAAK,EAClD,OAAIA,EAAM,OAAS,IAAG3B,GAAA,MAAAA,EAAW,IAAIK,EAAAA,MAAY4B,EAAQ,CAAC,EAAE,GAAa,IAClEA,CACT,EACA,QAAAR,CAAA,CACD,EAEKS,EACJ5B,EAAA,kBAAA,IAAC6B,EAAO,OAAP,CACC,UAAW3B,EAAA,IACTA,EAAA,IAAI,EAAE,cAAc,EACpBA,EAAA,IAAI,KAAKI,CAAI,EACbU,EAAE,SAASF,CAAE,EAAI,KAAOE,EAAE,EAAI,IAAOd,EAAAA,IAAI,EAAE,WAAW,EACtDA,EAAAA,IAAI,WAAWiB,EAAQF,CAAQ,CAAC,EAChCZ,CACF,EACA,UAAAI,EACA,YAAa,IAAMe,EAAU,CAAC,CAAE,KAAMrB,EAAW,IAAKa,EAAE,GAAI,CAAC,CAAC,EAC9D,MAAO,CAAE,gBAAiBc,EAAM,UAAUrC,CAAK,CAAE,EACjD,QAAQ,OACR,QAASkB,EACT,KAAAL,EACA,QACEZ,GAAY,KACTM,EAAAA,kBAAAA,IAAA+B,EAAAA,KAAA,CAAU,MAAM,QAAQ,SAAA,uBAAqB,CAAA,EAC5C,OAEL,GAAGN,EACH,GAAG9B,CAAA,CAAA,EAIR,OAAID,GAAY,KAAakC,EAG3BI,EAAA,kBAAA,KAACC,EAAS,OAAT,CACC,MAAArB,EACA,QAAAF,EACA,UAAWR,EAAA,IAAI,GAAG,eAAgB,UAAU,EAC5C,YAAa,GAEZ,SAAA,CAAA0B,EACD5B,EAAAA,kBAAAA,IAACR,EAAO,CAAA,MAAAC,EAAc,SAAAC,CAAoB,CAAA,CAAA,CAAA,CAAA,CAGhD"}
@@ -1,4 +1,4 @@
1
- import { P as e, S as a, t as s, u as t, a as r, b as o, c as n } from "./Toggle-3mGeA8rE.js";
1
+ import { P as e, S as a, t as s, u as t, a as r, b as o, c as n } from "./Toggle-zmqGwWeq.js";
2
2
  import { s as i, a as u, t as m, b as p } from "./aggregator-Q_onjsH5.js";
3
3
  const g = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
4
4
  __proto__: null,
@@ -20,4 +20,4 @@ const g = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
20
20
  export {
21
21
  g as e
22
22
  };
23
- //# sourceMappingURL=external-j1RQBbSY.js.map
23
+ //# sourceMappingURL=external-7FFXJt69.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"external-7FFXJt69.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;"}
@@ -1,2 +1,2 @@
1
- "use strict";const e=require("./Toggle-wVZJoVtX.cjs"),r=require("./aggregator-6_J8kSSO.cjs"),t=Object.freeze(Object.defineProperty({__proto__:null,Provider:e.Provider,Switch:e.Switch,get Theming(){return t},synnaxDark:r.synnaxDark,synnaxLight:r.synnaxLight,themeZ:r.themeZ,themes:r.themes,toCSSVars:e.toCSSVars,use:e.use,useContext:e.useContext,useProvider:e.useProvider,useTypography:e.useTypography},Symbol.toStringTag,{value:"Module"}));exports.external=t;
2
- //# sourceMappingURL=external-CRkuAd6C.cjs.map
1
+ "use strict";const e=require("./Toggle-qW_TcIDh.cjs"),r=require("./aggregator-6_J8kSSO.cjs"),t=Object.freeze(Object.defineProperty({__proto__:null,Provider:e.Provider,Switch:e.Switch,get Theming(){return t},synnaxDark:r.synnaxDark,synnaxLight:r.synnaxLight,themeZ:r.themeZ,themes:r.themes,toCSSVars:e.toCSSVars,use:e.use,useContext:e.useContext,useProvider:e.useProvider,useTypography:e.useTypography},Symbol.toStringTag,{value:"Module"}));exports.external=t;
2
+ //# sourceMappingURL=external-A4JYxI--.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"external-A4JYxI--.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -1,7 +1,7 @@
1
1
  import { j as m } from "./jsx-runtime-NmMXPjeo.js";
2
2
  import { memo as D, useState as ee, useCallback as w, useMemo as te } from "react";
3
- import { g as A, z as ne, A as re, r as se, w as le, v as ae, M as oe, F as ie, G as ce, H as de, B as fe, J as U, K as ue, N as he, m as me, h as pe } from "./Toggle-3mGeA8rE.js";
4
- import { L as ge } from "./Link-PQmsc2rv.js";
3
+ import { g as A, z as ne, A as re, r as se, w as le, v as ae, M as oe, F as ie, G as ce, H as de, B as fe, J as U, K as ue, N as he, m as me, h as pe } from "./Toggle-zmqGwWeq.js";
4
+ import { L as ge } from "./Link-4oN98LnE.js";
5
5
  import { e as B, C as f } from "./css-rizsElAK.js";
6
6
  import "./Center-iTyfvHz5.js";
7
7
  import { i as xe } from "./aggregator-Q_onjsH5.js";
@@ -290,4 +290,4 @@ const Se = pe(H), je = ({
290
290
  export {
291
291
  Me as e
292
292
  };
293
- //# sourceMappingURL=external-1scdpCD9.js.map
293
+ //# sourceMappingURL=external-D_-pAYEQ.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"external-1scdpCD9.js","sources":["../src/tree/core.ts","../src/tree/Tree.tsx"],"sourcesContent":["// Copyright 2023 Synnax Labs, Inc.\n//\n// Use of this software is governed by the Business Source License included in the file\n// licenses/BSL.txt.\n//\n// As of the Change Date specified in that file, in accordance with the Business Source\n// License, use of this software will be governed by the Apache License, Version 2.0,\n// included in the file licenses/APL.txt.\n\nimport { type ReactElement } from \"react\";\n\nimport { toArray } from \"@synnaxlabs/x\";\n\nimport { type Haul } from \"@/haul\";\n\nexport interface Node {\n key: string;\n name: string;\n forcePosition?: number;\n icon?: ReactElement;\n allowRename?: boolean;\n hasChildren?: boolean;\n children?: Node[];\n haulItems?: Haul.Item[];\n canDrop?: (items: Haul.Item[]) => boolean;\n href?: string;\n}\n\nexport interface NodeWithPosition extends Node {\n depth: number;\n position: number;\n}\n\nexport interface FlattenedNode extends Node {\n index: number;\n depth: number;\n expanded: boolean;\n}\n\nexport const shouldExpand = (node: Node, expanded: string[]): boolean =>\n expanded.includes(node.key);\n\nexport interface FlattenProps {\n nodes: Node[];\n expanded: string[];\n depth?: number;\n sort?: boolean;\n}\n\nexport const sortAndSplice = (nodes: Node[], sort: boolean): Node[] => {\n if (sort) {\n nodes.sort((a, b) => a.name.localeCompare(b.name));\n }\n let found = false;\n for (let i = 0; i < nodes.length; i++) {\n const node = nodes[i];\n if (node.forcePosition != null) {\n found = true;\n // remove the node from its current position\n nodes.splice(i, 1);\n // splice it into the forced position\n nodes.splice(node.forcePosition, 0, node);\n node.forcePosition = undefined;\n }\n }\n if (found) return sortAndSplice(nodes, false);\n return nodes;\n};\n\nexport const flatten = ({\n nodes,\n expanded,\n depth = 0,\n sort = true,\n}: FlattenProps): FlattenedNode[] => {\n // Sort the first level of the tree independently of the rest\n if (depth === 0 && sort) nodes = nodes.sort((a, b) => a.name.localeCompare(b.name));\n const flattened: FlattenedNode[] = [];\n nodes.forEach((node, index) => {\n const expand = shouldExpand(node, expanded);\n flattened.push({ ...node, depth, expanded: expand, index });\n if (expand && node.children != null) {\n node.children = sortAndSplice(node.children, sort);\n flattened.push(\n ...flatten({ nodes: node.children, expanded, depth: depth + 1, sort }),\n );\n }\n });\n return flattened;\n};\n\nexport interface MoveNodeProps {\n tree: Node[];\n destination: string;\n keys: string | string[];\n}\n\nexport const moveNode = ({ tree, destination, keys }: MoveNodeProps): Node[] => {\n keys = toArray(keys);\n keys.forEach((key) => {\n const node = findNode({ tree, key });\n if (node == null) return;\n removeNode({ tree, keys: key });\n setNode({ tree, destination, additions: node });\n });\n return tree;\n};\n\nexport interface RemoveNodeProps {\n tree: Node[];\n keys: string | string[];\n}\n\nexport const removeNode = ({ tree, keys }: RemoveNodeProps): Node[] => {\n keys = toArray(keys);\n const treeKeys = tree.map((node) => node.key);\n keys.forEach((key) => {\n const index = treeKeys.indexOf(key);\n if (index !== -1) tree.splice(index, 1);\n else {\n const parent = findNodeParent({ tree, key });\n if (parent != null)\n parent.children = parent.children?.filter((child) => child.key !== key);\n }\n });\n return tree;\n};\n\nexport interface SetNodeProps {\n tree: Node[];\n destination: string;\n additions: Node | Node[];\n}\n\nexport const setNode = ({ tree, destination, additions }: SetNodeProps): Node[] => {\n additions = toArray(additions);\n const node = findNode({ tree, key: destination });\n if (node == null) throw new Error(`Could not find node with key ${destination}`);\n if (node.children == null) node.children = [];\n const addedKeys = additions.map((node) => node.key);\n node.children = [\n ...additions,\n ...node.children.filter((child) => !addedKeys.includes(child.key)),\n ];\n return tree;\n};\n\nexport interface UpdateNodeProps {\n tree: Node[];\n key: string;\n updater: (node: Node) => Node;\n throwOnMissing?: boolean;\n}\n\nexport const updateNode = ({\n tree,\n key,\n updater,\n throwOnMissing = true,\n}: UpdateNodeProps): Node[] => {\n const node = findNode({ tree, key });\n if (node == null) {\n if (throwOnMissing) throw new Error(`Could not find node with key ${key}`);\n return tree;\n }\n const parent = findNodeParent({ tree, key });\n if (parent != null) {\n // splice the updated node into the parent's children\n const index = parent.children?.findIndex((child) => child.key === key);\n if (index != null && index !== -1) parent.children?.splice(index, 1, updater(node));\n } else {\n // we're in the root, so just update the node\n tree.splice(\n tree.findIndex((node) => node.key === key),\n 1,\n updater(node),\n );\n }\n return tree;\n};\n\nexport interface FindNodeProps {\n tree: Node[];\n key: string;\n depth?: number;\n}\n\nexport const findNode = ({\n tree,\n key,\n depth = 0,\n}: FindNodeProps): NodeWithPosition | null => {\n for (let i = 0; i < tree.length; i++) {\n const node = tree[i];\n if (node.key === key) {\n const n = node as NodeWithPosition;\n n.depth = depth;\n n.position = i;\n return n;\n }\n if (node.children != null) {\n const found = findNode({ tree: node.children, key, depth: depth + 1 });\n if (found != null) return found;\n }\n }\n return null;\n};\n\nexport interface FindNodesProps {\n tree: Node[];\n keys: string[];\n}\n\nexport const findNodes = ({ tree, keys }: FindNodesProps): NodeWithPosition[] => {\n const nodes: NodeWithPosition[] = [];\n for (const key of keys) {\n const node = findNode({ tree, key });\n if (node != null) nodes.push(node);\n }\n return nodes;\n};\n\nexport interface FindNodeParentProps {\n tree: Node[];\n key: string;\n}\n\nexport const findNodeParent = ({ tree, key }: FindNodeParentProps): Node | null => {\n for (const node of tree) {\n if (node.children != null) {\n if (node.children.some((child) => child.key === key)) return node;\n const found = findNodeParent({ tree: node.children, key });\n if (found != null) return found;\n }\n }\n return null;\n};\n","// Copyright 2023 Synnax Labs, Inc.\n//\n// Use of this software is governed by the Business Source License included in the file\n// licenses/BSL.txt.\n//\n// As of the Change Date specified in that file, in accordance with the Business Source\n// License, use of this software will be governed by the Apache License, Version 2.0,\n// included in the file licenses/APL.txt.\n\nimport {\n type ReactElement,\n useCallback,\n useMemo,\n useState,\n type FC,\n memo,\n} from \"react\";\n\nimport { Icon } from \"@synnaxlabs/media\";\n\nimport { Button } from \"@/button\";\nimport { CSS } from \"@/css\";\nimport { Haul } from \"@/haul\";\nimport { useSyncedRef, useCombinedStateAndRef } from \"@/hooks\";\nimport { List } from \"@/list\";\nimport { type UseSelectOnChangeExtra, type UseSelectProps } from \"@/list/useSelect\";\nimport { CONTEXT_SELECTED, CONTEXT_TARGET } from \"@/menu/ContextMenu\";\nimport { state } from \"@/state\";\nimport { Text } from \"@/text\";\nimport { flatten, type Node, type FlattenedNode } from \"@/tree/core\";\nimport { Triggers } from \"@/triggers\";\nimport { type RenderProp, componentRenderProp } from \"@/util/renderProp\";\n\nimport \"@/tree/Tree.css\";\n\nexport const HAUL_TYPE = \"tree-item\";\n\nexport interface HandleExpandProps {\n current: string[];\n action: \"expand\" | \"contract\";\n clicked: string;\n}\n\nexport interface UseProps {\n onExpand?: (props: HandleExpandProps) => void;\n selected?: string[];\n onSelectedChange?: state.Set<string[]>;\n initialExpanded?: string[];\n nodes: Node[];\n sort?: boolean;\n}\n\nexport interface UseReturn {\n selected: string[];\n expanded: string[];\n onSelect: UseSelectProps<string, FlattenedNode>[\"onChange\"];\n nodes: FlattenedNode[];\n}\n\nconst SHIFT_TRIGGERS: Triggers.Trigger[] = [[\"Shift\"]];\n\nexport const use = (props: UseProps): UseReturn => {\n const {\n onExpand,\n nodes,\n initialExpanded = [],\n sort = true,\n selected: propsSelected,\n onSelectedChange,\n } = props ?? {};\n const [expanded, setExpanded, ref] =\n useCombinedStateAndRef<string[]>(initialExpanded);\n const [selected, setSelected] = state.usePassthrough<string[]>({\n initial: [],\n value: propsSelected,\n onChange: onSelectedChange,\n });\n const flat = useMemo(\n () => flatten({ nodes, expanded, sort }),\n [nodes, expanded, sort],\n );\n const flatRef = useSyncedRef(flat);\n\n const shiftRef = Triggers.useHeldRef({ triggers: SHIFT_TRIGGERS });\n\n const handleSelect: UseSelectProps<string, FlattenedNode>[\"onChange\"] = useCallback(\n (\n keys: string[],\n { clicked }: UseSelectOnChangeExtra<string, FlattenedNode>,\n ): void => {\n setSelected(keys);\n const n = flatRef.current.find((node) => node.key === clicked);\n if (n?.hasChildren === false) return;\n if (clicked == null || shiftRef.current.held) return;\n const currentlyExpanded = ref.current;\n const action = currentlyExpanded.some((key) => key === clicked)\n ? \"contract\"\n : \"expand\";\n let nextExpanded = currentlyExpanded;\n if (action === \"contract\")\n nextExpanded = currentlyExpanded.filter((key) => key !== clicked);\n else nextExpanded = [...currentlyExpanded, clicked];\n setExpanded(nextExpanded);\n onExpand?.({ current: nextExpanded, action, clicked });\n },\n [onExpand, flatRef, setExpanded, setSelected],\n );\n\n return {\n onSelect: handleSelect,\n selected,\n expanded,\n nodes: flat,\n };\n};\n\nexport interface ItemProps extends List.ItemProps<string, FlattenedNode> {\n onDrop?: (key: string, props: Haul.OnDropProps) => Haul.Item[];\n onSuccessfulDrop?: (key: string, props: Haul.OnSuccessfulDropProps) => void;\n onRename?: (key: string, name: string) => void;\n onDoubleClick?: (key: string, e: React.MouseEvent) => void;\n loading?: boolean;\n useMargin?: boolean;\n}\n\ntype TreePropsInheritedFromItem = Pick<\n ItemProps,\n \"onDrop\" | \"onRename\" | \"onSuccessfulDrop\" | \"onDoubleClick\" | \"useMargin\"\n>;\n\ntype TreePropsInheritedFromList = Omit<\n List.VirtualCoreProps<string, FlattenedNode>,\n \"onDrop\" | \"onSelect\" | \"children\" | \"onDoubleClick\" | \"itemHeight\"\n> & {\n itemHeight?: number;\n};\n\nexport interface TreeProps\n extends TreePropsInheritedFromItem,\n TreePropsInheritedFromList {\n nodes: FlattenedNode[];\n selected?: string[];\n onSelect: UseSelectProps<string, FlattenedNode>[\"onChange\"];\n children?: RenderProp<ItemProps, ReactElement>;\n virtual?: boolean;\n}\n\nconst expandedCaret = <Icon.Caret.Down className={CSS.B(\"caret\")} />;\nconst collapsedCaret = <Icon.Caret.Right className={CSS.B(\"caret\")} />;\n\nexport type Item = FC<ItemProps>;\n\nexport const DefaultItem = memo(\n ({\n entry,\n selected,\n onSelect,\n onDrop,\n onRename,\n onSuccessfulDrop,\n onDoubleClick,\n loading = false,\n useMargin = false,\n translate,\n }: ItemProps): ReactElement => {\n const {\n key,\n hasChildren = false,\n allowRename = false,\n children,\n icon,\n name,\n depth,\n expanded,\n href,\n haulItems = [],\n } = entry;\n\n const { getSelected } = List.useSelectionUtils<string>();\n const { getSourceData } = List.useDataUtilContext<string, FlattenedNode>();\n\n const actuallyHasChildren =\n hasChildren || (children != null && children.length > 0);\n\n // Expand, contract, and loading items.\n const startIcons: ReactElement[] = [];\n if (actuallyHasChildren) startIcons.push(expanded ? expandedCaret : collapsedCaret);\n if (icon != null) startIcons.push(icon);\n const endIcons: ReactElement[] = [];\n if (loading) endIcons.push(<Icon.Loading className={CSS.B(\"loading-indicator\")} />);\n\n const [draggingOver, setDraggingOver] = useState(false);\n\n // Drag and Drop\n const { startDrag, ...dropProps } = Haul.useDragAndDrop({\n type: \"Tree.Item\",\n key,\n canDrop: useCallback(({ items: entities, source }) => {\n const keys = entities.map((item) => item.key);\n setDraggingOver(false);\n return source.type === \"Tree.Item\" && !keys.includes(key);\n }, []),\n onDrop: useCallback((props) => onDrop?.(key, props) ?? [], [key, onDrop]),\n onDragOver: useCallback(() => setDraggingOver(true), []),\n });\n\n const handleDragStart = (): void => {\n const selectedItemKeys = getSelected();\n const selectedItems = getSourceData().filter((item) =>\n selectedItemKeys.includes(item.key),\n );\n if (selectedItemKeys.includes(key)) {\n const selectedHaulItems = selectedItems\n .map(({ key, haulItems }) => [{ type: HAUL_TYPE, key }, ...(haulItems ?? [])])\n .flat();\n return startDrag(selectedHaulItems, (props) => onSuccessfulDrop?.(key, props));\n }\n startDrag([{ type: HAUL_TYPE, key }, ...haulItems], (props) =>\n onSuccessfulDrop?.(key, props),\n );\n };\n\n const offsetKey = useMargin ? \"marginLeft\" : \"paddingLeft\";\n\n const baseProps: Button.LinkProps | Button.ButtonProps = {\n id: key,\n variant: \"text\",\n draggable: true,\n className: CSS(\n CONTEXT_TARGET,\n draggingOver && CSS.M(\"dragging-over\"),\n selected && CONTEXT_SELECTED,\n CSS.selected(selected),\n actuallyHasChildren && CSS.M(\"has-children\"),\n ),\n onDragLeave: () => setDraggingOver(false),\n onDragStart: handleDragStart,\n onClick: () => onSelect?.(key),\n style: {\n position: \"absolute\",\n transform: `translateY(${translate}px)`,\n [offsetKey]: `${depth * 1.5 + 1}rem`,\n },\n startIcon: startIcons,\n iconSpacing: \"small\",\n noWrap: true,\n endIcon: endIcons,\n onDoubleClick: (e) => onDoubleClick?.(key, e),\n href,\n ...dropProps,\n };\n\n const Base = href != null ? Button.Link : Button.Button;\n\n return (\n <Base {...baseProps}>\n <Text.MaybeEditable\n id={`text-${key}`}\n level=\"p\"\n allowDoubleClick={false}\n value={name}\n disabled={!allowRename}\n onChange={(name) => onRename?.(key, name)}\n />\n </Base>\n );\n },\n);\nDefaultItem.displayName = \"Tree.Item\";\n\nconst defaultChild = componentRenderProp(DefaultItem);\nexport const Tree = ({\n nodes,\n selected = [],\n onSelect,\n onDrop,\n onRename,\n onSuccessfulDrop,\n onDoubleClick,\n className,\n children = defaultChild,\n itemHeight = 27,\n useMargin = false,\n virtual = true,\n ...props\n}: TreeProps): ReactElement => {\n const Core = virtual ? List.Core.Virtual : List.Core;\n\n return (\n <List.List<string, FlattenedNode> data={nodes}>\n <List.Selector value={selected} onChange={onSelect} allowMultiple replaceOnSingle>\n <Core<string, FlattenedNode>\n itemHeight={itemHeight}\n className={CSS(className, CSS.B(\"tree\"))}\n {...props}\n >\n {(props) =>\n children({\n ...props,\n useMargin,\n onDrop,\n onRename,\n onSuccessfulDrop,\n onDoubleClick,\n })\n }\n </Core>\n </List.Selector>\n </List.List>\n );\n};\n\nexport const startRenaming = (key: string): void => Text.edit(`text-${key}`);\n"],"names":["shouldExpand","node","expanded","sortAndSplice","nodes","sort","a","b","found","i","flatten","depth","flattened","index","expand","moveNode","tree","destination","keys","toArray","key","findNode","removeNode","setNode","treeKeys","parent","findNodeParent","_a","child","additions","addedKeys","updateNode","updater","throwOnMissing","_b","n","findNodes","HAUL_TYPE","SHIFT_TRIGGERS","use","props","onExpand","initialExpanded","propsSelected","onSelectedChange","setExpanded","ref","useCombinedStateAndRef","selected","setSelected","state.usePassthrough","flat","useMemo","flatRef","useSyncedRef","shiftRef","Triggers.useHeldRef","useCallback","clicked","currentlyExpanded","action","nextExpanded","expandedCaret","jsx","Icon","CSS","collapsedCaret","DefaultItem","memo","entry","onSelect","onDrop","onRename","onSuccessfulDrop","onDoubleClick","loading","useMargin","translate","hasChildren","allowRename","children","icon","name","href","haulItems","getSelected","List.useSelectionUtils","getSourceData","List.useDataUtilContext","actuallyHasChildren","startIcons","endIcons","draggingOver","setDraggingOver","useState","startDrag","dropProps","Haul.useDragAndDrop","entities","source","item","handleDragStart","selectedItemKeys","selectedItems","selectedHaulItems","offsetKey","baseProps","CONTEXT_TARGET","CONTEXT_SELECTED","e","Base","Button.Link","Button.Button","Text.MaybeEditable","defaultChild","componentRenderProp","Tree","className","itemHeight","virtual","Core","List.Core","List.List","List.Selector","startRenaming","Text.edit"],"mappings":"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"}
1
+ {"version":3,"file":"external-D_-pAYEQ.js","sources":["../src/tree/core.ts","../src/tree/Tree.tsx"],"sourcesContent":["// Copyright 2023 Synnax Labs, Inc.\n//\n// Use of this software is governed by the Business Source License included in the file\n// licenses/BSL.txt.\n//\n// As of the Change Date specified in that file, in accordance with the Business Source\n// License, use of this software will be governed by the Apache License, Version 2.0,\n// included in the file licenses/APL.txt.\n\nimport { type ReactElement } from \"react\";\n\nimport { toArray } from \"@synnaxlabs/x\";\n\nimport { type Haul } from \"@/haul\";\n\nexport interface Node {\n key: string;\n name: string;\n forcePosition?: number;\n icon?: ReactElement;\n allowRename?: boolean;\n hasChildren?: boolean;\n children?: Node[];\n haulItems?: Haul.Item[];\n canDrop?: (items: Haul.Item[]) => boolean;\n href?: string;\n}\n\nexport interface NodeWithPosition extends Node {\n depth: number;\n position: number;\n}\n\nexport interface FlattenedNode extends Node {\n index: number;\n depth: number;\n expanded: boolean;\n}\n\nexport const shouldExpand = (node: Node, expanded: string[]): boolean =>\n expanded.includes(node.key);\n\nexport interface FlattenProps {\n nodes: Node[];\n expanded: string[];\n depth?: number;\n sort?: boolean;\n}\n\nexport const sortAndSplice = (nodes: Node[], sort: boolean): Node[] => {\n if (sort) {\n nodes.sort((a, b) => a.name.localeCompare(b.name));\n }\n let found = false;\n for (let i = 0; i < nodes.length; i++) {\n const node = nodes[i];\n if (node.forcePosition != null) {\n found = true;\n // remove the node from its current position\n nodes.splice(i, 1);\n // splice it into the forced position\n nodes.splice(node.forcePosition, 0, node);\n node.forcePosition = undefined;\n }\n }\n if (found) return sortAndSplice(nodes, false);\n return nodes;\n};\n\nexport const flatten = ({\n nodes,\n expanded,\n depth = 0,\n sort = true,\n}: FlattenProps): FlattenedNode[] => {\n // Sort the first level of the tree independently of the rest\n if (depth === 0 && sort) nodes = nodes.sort((a, b) => a.name.localeCompare(b.name));\n const flattened: FlattenedNode[] = [];\n nodes.forEach((node, index) => {\n const expand = shouldExpand(node, expanded);\n flattened.push({ ...node, depth, expanded: expand, index });\n if (expand && node.children != null) {\n node.children = sortAndSplice(node.children, sort);\n flattened.push(\n ...flatten({ nodes: node.children, expanded, depth: depth + 1, sort }),\n );\n }\n });\n return flattened;\n};\n\nexport interface MoveNodeProps {\n tree: Node[];\n destination: string;\n keys: string | string[];\n}\n\nexport const moveNode = ({ tree, destination, keys }: MoveNodeProps): Node[] => {\n keys = toArray(keys);\n keys.forEach((key) => {\n const node = findNode({ tree, key });\n if (node == null) return;\n removeNode({ tree, keys: key });\n setNode({ tree, destination, additions: node });\n });\n return tree;\n};\n\nexport interface RemoveNodeProps {\n tree: Node[];\n keys: string | string[];\n}\n\nexport const removeNode = ({ tree, keys }: RemoveNodeProps): Node[] => {\n keys = toArray(keys);\n const treeKeys = tree.map((node) => node.key);\n keys.forEach((key) => {\n const index = treeKeys.indexOf(key);\n if (index !== -1) tree.splice(index, 1);\n else {\n const parent = findNodeParent({ tree, key });\n if (parent != null)\n parent.children = parent.children?.filter((child) => child.key !== key);\n }\n });\n return tree;\n};\n\nexport interface SetNodeProps {\n tree: Node[];\n destination: string;\n additions: Node | Node[];\n}\n\nexport const setNode = ({ tree, destination, additions }: SetNodeProps): Node[] => {\n additions = toArray(additions);\n const node = findNode({ tree, key: destination });\n if (node == null) throw new Error(`Could not find node with key ${destination}`);\n if (node.children == null) node.children = [];\n const addedKeys = additions.map((node) => node.key);\n node.children = [\n ...additions,\n ...node.children.filter((child) => !addedKeys.includes(child.key)),\n ];\n return tree;\n};\n\nexport interface UpdateNodeProps {\n tree: Node[];\n key: string;\n updater: (node: Node) => Node;\n throwOnMissing?: boolean;\n}\n\nexport const updateNode = ({\n tree,\n key,\n updater,\n throwOnMissing = true,\n}: UpdateNodeProps): Node[] => {\n const node = findNode({ tree, key });\n if (node == null) {\n if (throwOnMissing) throw new Error(`Could not find node with key ${key}`);\n return tree;\n }\n const parent = findNodeParent({ tree, key });\n if (parent != null) {\n // splice the updated node into the parent's children\n const index = parent.children?.findIndex((child) => child.key === key);\n if (index != null && index !== -1) parent.children?.splice(index, 1, updater(node));\n } else {\n // we're in the root, so just update the node\n tree.splice(\n tree.findIndex((node) => node.key === key),\n 1,\n updater(node),\n );\n }\n return tree;\n};\n\nexport interface FindNodeProps {\n tree: Node[];\n key: string;\n depth?: number;\n}\n\nexport const findNode = ({\n tree,\n key,\n depth = 0,\n}: FindNodeProps): NodeWithPosition | null => {\n for (let i = 0; i < tree.length; i++) {\n const node = tree[i];\n if (node.key === key) {\n const n = node as NodeWithPosition;\n n.depth = depth;\n n.position = i;\n return n;\n }\n if (node.children != null) {\n const found = findNode({ tree: node.children, key, depth: depth + 1 });\n if (found != null) return found;\n }\n }\n return null;\n};\n\nexport interface FindNodesProps {\n tree: Node[];\n keys: string[];\n}\n\nexport const findNodes = ({ tree, keys }: FindNodesProps): NodeWithPosition[] => {\n const nodes: NodeWithPosition[] = [];\n for (const key of keys) {\n const node = findNode({ tree, key });\n if (node != null) nodes.push(node);\n }\n return nodes;\n};\n\nexport interface FindNodeParentProps {\n tree: Node[];\n key: string;\n}\n\nexport const findNodeParent = ({ tree, key }: FindNodeParentProps): Node | null => {\n for (const node of tree) {\n if (node.children != null) {\n if (node.children.some((child) => child.key === key)) return node;\n const found = findNodeParent({ tree: node.children, key });\n if (found != null) return found;\n }\n }\n return null;\n};\n","// Copyright 2023 Synnax Labs, Inc.\n//\n// Use of this software is governed by the Business Source License included in the file\n// licenses/BSL.txt.\n//\n// As of the Change Date specified in that file, in accordance with the Business Source\n// License, use of this software will be governed by the Apache License, Version 2.0,\n// included in the file licenses/APL.txt.\n\nimport {\n type ReactElement,\n useCallback,\n useMemo,\n useState,\n type FC,\n memo,\n} from \"react\";\n\nimport { Icon } from \"@synnaxlabs/media\";\n\nimport { Button } from \"@/button\";\nimport { CSS } from \"@/css\";\nimport { Haul } from \"@/haul\";\nimport { useSyncedRef, useCombinedStateAndRef } from \"@/hooks\";\nimport { List } from \"@/list\";\nimport { type UseSelectOnChangeExtra, type UseSelectProps } from \"@/list/useSelect\";\nimport { CONTEXT_SELECTED, CONTEXT_TARGET } from \"@/menu/ContextMenu\";\nimport { state } from \"@/state\";\nimport { Text } from \"@/text\";\nimport { flatten, type Node, type FlattenedNode } from \"@/tree/core\";\nimport { Triggers } from \"@/triggers\";\nimport { type RenderProp, componentRenderProp } from \"@/util/renderProp\";\n\nimport \"@/tree/Tree.css\";\n\nexport const HAUL_TYPE = \"tree-item\";\n\nexport interface HandleExpandProps {\n current: string[];\n action: \"expand\" | \"contract\";\n clicked: string;\n}\n\nexport interface UseProps {\n onExpand?: (props: HandleExpandProps) => void;\n selected?: string[];\n onSelectedChange?: state.Set<string[]>;\n initialExpanded?: string[];\n nodes: Node[];\n sort?: boolean;\n}\n\nexport interface UseReturn {\n selected: string[];\n expanded: string[];\n onSelect: UseSelectProps<string, FlattenedNode>[\"onChange\"];\n nodes: FlattenedNode[];\n}\n\nconst SHIFT_TRIGGERS: Triggers.Trigger[] = [[\"Shift\"]];\n\nexport const use = (props: UseProps): UseReturn => {\n const {\n onExpand,\n nodes,\n initialExpanded = [],\n sort = true,\n selected: propsSelected,\n onSelectedChange,\n } = props ?? {};\n const [expanded, setExpanded, ref] =\n useCombinedStateAndRef<string[]>(initialExpanded);\n const [selected, setSelected] = state.usePassthrough<string[]>({\n initial: [],\n value: propsSelected,\n onChange: onSelectedChange,\n });\n const flat = useMemo(\n () => flatten({ nodes, expanded, sort }),\n [nodes, expanded, sort],\n );\n const flatRef = useSyncedRef(flat);\n\n const shiftRef = Triggers.useHeldRef({ triggers: SHIFT_TRIGGERS });\n\n const handleSelect: UseSelectProps<string, FlattenedNode>[\"onChange\"] = useCallback(\n (\n keys: string[],\n { clicked }: UseSelectOnChangeExtra<string, FlattenedNode>,\n ): void => {\n setSelected(keys);\n const n = flatRef.current.find((node) => node.key === clicked);\n if (n?.hasChildren === false) return;\n if (clicked == null || shiftRef.current.held) return;\n const currentlyExpanded = ref.current;\n const action = currentlyExpanded.some((key) => key === clicked)\n ? \"contract\"\n : \"expand\";\n let nextExpanded = currentlyExpanded;\n if (action === \"contract\")\n nextExpanded = currentlyExpanded.filter((key) => key !== clicked);\n else nextExpanded = [...currentlyExpanded, clicked];\n setExpanded(nextExpanded);\n onExpand?.({ current: nextExpanded, action, clicked });\n },\n [onExpand, flatRef, setExpanded, setSelected],\n );\n\n return {\n onSelect: handleSelect,\n selected,\n expanded,\n nodes: flat,\n };\n};\n\nexport interface ItemProps extends List.ItemProps<string, FlattenedNode> {\n onDrop?: (key: string, props: Haul.OnDropProps) => Haul.Item[];\n onSuccessfulDrop?: (key: string, props: Haul.OnSuccessfulDropProps) => void;\n onRename?: (key: string, name: string) => void;\n onDoubleClick?: (key: string, e: React.MouseEvent) => void;\n loading?: boolean;\n useMargin?: boolean;\n}\n\ntype TreePropsInheritedFromItem = Pick<\n ItemProps,\n \"onDrop\" | \"onRename\" | \"onSuccessfulDrop\" | \"onDoubleClick\" | \"useMargin\"\n>;\n\ntype TreePropsInheritedFromList = Omit<\n List.VirtualCoreProps<string, FlattenedNode>,\n \"onDrop\" | \"onSelect\" | \"children\" | \"onDoubleClick\" | \"itemHeight\"\n> & {\n itemHeight?: number;\n};\n\nexport interface TreeProps\n extends TreePropsInheritedFromItem,\n TreePropsInheritedFromList {\n nodes: FlattenedNode[];\n selected?: string[];\n onSelect: UseSelectProps<string, FlattenedNode>[\"onChange\"];\n children?: RenderProp<ItemProps, ReactElement>;\n virtual?: boolean;\n}\n\nconst expandedCaret = <Icon.Caret.Down className={CSS.B(\"caret\")} />;\nconst collapsedCaret = <Icon.Caret.Right className={CSS.B(\"caret\")} />;\n\nexport type Item = FC<ItemProps>;\n\nexport const DefaultItem = memo(\n ({\n entry,\n selected,\n onSelect,\n onDrop,\n onRename,\n onSuccessfulDrop,\n onDoubleClick,\n loading = false,\n useMargin = false,\n translate,\n }: ItemProps): ReactElement => {\n const {\n key,\n hasChildren = false,\n allowRename = false,\n children,\n icon,\n name,\n depth,\n expanded,\n href,\n haulItems = [],\n } = entry;\n\n const { getSelected } = List.useSelectionUtils<string>();\n const { getSourceData } = List.useDataUtilContext<string, FlattenedNode>();\n\n const actuallyHasChildren =\n hasChildren || (children != null && children.length > 0);\n\n // Expand, contract, and loading items.\n const startIcons: ReactElement[] = [];\n if (actuallyHasChildren) startIcons.push(expanded ? expandedCaret : collapsedCaret);\n if (icon != null) startIcons.push(icon);\n const endIcons: ReactElement[] = [];\n if (loading) endIcons.push(<Icon.Loading className={CSS.B(\"loading-indicator\")} />);\n\n const [draggingOver, setDraggingOver] = useState(false);\n\n // Drag and Drop\n const { startDrag, ...dropProps } = Haul.useDragAndDrop({\n type: \"Tree.Item\",\n key,\n canDrop: useCallback(({ items: entities, source }) => {\n const keys = entities.map((item) => item.key);\n setDraggingOver(false);\n return source.type === \"Tree.Item\" && !keys.includes(key);\n }, []),\n onDrop: useCallback((props) => onDrop?.(key, props) ?? [], [key, onDrop]),\n onDragOver: useCallback(() => setDraggingOver(true), []),\n });\n\n const handleDragStart = (): void => {\n const selectedItemKeys = getSelected();\n const selectedItems = getSourceData().filter((item) =>\n selectedItemKeys.includes(item.key),\n );\n if (selectedItemKeys.includes(key)) {\n const selectedHaulItems = selectedItems\n .map(({ key, haulItems }) => [{ type: HAUL_TYPE, key }, ...(haulItems ?? [])])\n .flat();\n return startDrag(selectedHaulItems, (props) => onSuccessfulDrop?.(key, props));\n }\n startDrag([{ type: HAUL_TYPE, key }, ...haulItems], (props) =>\n onSuccessfulDrop?.(key, props),\n );\n };\n\n const offsetKey = useMargin ? \"marginLeft\" : \"paddingLeft\";\n\n const baseProps: Button.LinkProps | Button.ButtonProps = {\n id: key,\n variant: \"text\",\n draggable: true,\n className: CSS(\n CONTEXT_TARGET,\n draggingOver && CSS.M(\"dragging-over\"),\n selected && CONTEXT_SELECTED,\n CSS.selected(selected),\n actuallyHasChildren && CSS.M(\"has-children\"),\n ),\n onDragLeave: () => setDraggingOver(false),\n onDragStart: handleDragStart,\n onClick: () => onSelect?.(key),\n style: {\n position: \"absolute\",\n transform: `translateY(${translate}px)`,\n [offsetKey]: `${depth * 1.5 + 1}rem`,\n },\n startIcon: startIcons,\n iconSpacing: \"small\",\n noWrap: true,\n endIcon: endIcons,\n onDoubleClick: (e) => onDoubleClick?.(key, e),\n href,\n ...dropProps,\n };\n\n const Base = href != null ? Button.Link : Button.Button;\n\n return (\n <Base {...baseProps}>\n <Text.MaybeEditable\n id={`text-${key}`}\n level=\"p\"\n allowDoubleClick={false}\n value={name}\n disabled={!allowRename}\n onChange={(name) => onRename?.(key, name)}\n />\n </Base>\n );\n },\n);\nDefaultItem.displayName = \"Tree.Item\";\n\nconst defaultChild = componentRenderProp(DefaultItem);\nexport const Tree = ({\n nodes,\n selected = [],\n onSelect,\n onDrop,\n onRename,\n onSuccessfulDrop,\n onDoubleClick,\n className,\n children = defaultChild,\n itemHeight = 27,\n useMargin = false,\n virtual = true,\n ...props\n}: TreeProps): ReactElement => {\n const Core = virtual ? List.Core.Virtual : List.Core;\n\n return (\n <List.List<string, FlattenedNode> data={nodes}>\n <List.Selector value={selected} onChange={onSelect} allowMultiple replaceOnSingle>\n <Core<string, FlattenedNode>\n itemHeight={itemHeight}\n className={CSS(className, CSS.B(\"tree\"))}\n {...props}\n >\n {(props) =>\n children({\n ...props,\n useMargin,\n onDrop,\n onRename,\n onSuccessfulDrop,\n onDoubleClick,\n })\n }\n </Core>\n </List.Selector>\n </List.List>\n );\n};\n\nexport const startRenaming = (key: string): void => Text.edit(`text-${key}`);\n"],"names":["shouldExpand","node","expanded","sortAndSplice","nodes","sort","a","b","found","i","flatten","depth","flattened","index","expand","moveNode","tree","destination","keys","toArray","key","findNode","removeNode","setNode","treeKeys","parent","findNodeParent","_a","child","additions","addedKeys","updateNode","updater","throwOnMissing","_b","n","findNodes","HAUL_TYPE","SHIFT_TRIGGERS","use","props","onExpand","initialExpanded","propsSelected","onSelectedChange","setExpanded","ref","useCombinedStateAndRef","selected","setSelected","state.usePassthrough","flat","useMemo","flatRef","useSyncedRef","shiftRef","Triggers.useHeldRef","useCallback","clicked","currentlyExpanded","action","nextExpanded","expandedCaret","jsx","Icon","CSS","collapsedCaret","DefaultItem","memo","entry","onSelect","onDrop","onRename","onSuccessfulDrop","onDoubleClick","loading","useMargin","translate","hasChildren","allowRename","children","icon","name","href","haulItems","getSelected","List.useSelectionUtils","getSourceData","List.useDataUtilContext","actuallyHasChildren","startIcons","endIcons","draggingOver","setDraggingOver","useState","startDrag","dropProps","Haul.useDragAndDrop","entities","source","item","handleDragStart","selectedItemKeys","selectedItems","selectedHaulItems","offsetKey","baseProps","CONTEXT_TARGET","CONTEXT_SELECTED","e","Base","Button.Link","Button.Button","Text.MaybeEditable","defaultChild","componentRenderProp","Tree","className","itemHeight","virtual","Core","List.Core","List.List","List.Selector","startRenaming","Text.edit"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { A as he, ao as Ie, ae as Ae, ap as Oe, aq as ke, J as Le, ar as Re, as as Ce, at as je, K as $e, au as ve, N as Ne, av as Te, aw as Fe, ax as Pe, ay as De, az as Ke, z as We, aA as ze, aB as Be, aC as He } from "./Toggle-3mGeA8rE.js";
1
+ import { A as he, ao as Ie, ae as Ae, ap as Oe, aq as ke, J as Le, ar as Re, as as Ce, at as je, K as $e, au as ve, N as Ne, av as Te, aw as Fe, ax as Pe, ay as De, az as Ke, z as We, aA as ze, aB as Be, aC as He } from "./Toggle-zmqGwWeq.js";
2
2
  import { j as Ve } from "./jsx-runtime-NmMXPjeo.js";
3
3
  import { useCallback as Ue } from "react";
4
4
  import { i as Ge } from "./css-rizsElAK.js";
@@ -1172,4 +1172,4 @@ export {
1172
1172
  Wt as f,
1173
1173
  Dt as p
1174
1174
  };
1175
- //# sourceMappingURL=external-FtteEuf4.js.map
1175
+ //# sourceMappingURL=external-K7wZqIN6.js.map