@solidxai/core-ui 0.1.13-beta.4 → 0.1.13-beta.5
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/components/auth/AuthTabs.d.ts.map +1 -1
- package/dist/components/auth/AuthTabs.js +1 -1
- package/dist/components/auth/AuthTabs.js.map +1 -1
- package/dist/components/auth/AuthTabs.tsx +1 -0
- package/dist/components/auth/SolidChangeForcePassword.d.ts.map +1 -1
- package/dist/components/auth/SolidChangeForcePassword.js +2 -2
- package/dist/components/auth/SolidChangeForcePassword.js.map +1 -1
- package/dist/components/auth/SolidChangeForcePassword.tsx +9 -8
- package/dist/components/common/SettingsComponent.d.ts.map +1 -1
- package/dist/components/common/SettingsComponent.js +1 -1
- package/dist/components/common/SettingsComponent.js.map +1 -1
- package/dist/components/common/SettingsComponent.tsx +1 -0
- package/dist/components/common/SolidFieldTooltip.d.ts.map +1 -1
- package/dist/components/common/SolidFieldTooltip.js +1 -33
- package/dist/components/common/SolidFieldTooltip.js.map +1 -1
- package/dist/components/common/SolidFieldTooltip.tsx +8 -64
- package/dist/components/common/SolidMaterialSymbol.d.ts +1 -1
- package/dist/components/common/SolidMaterialSymbol.d.ts.map +1 -1
- package/dist/components/common/SolidMaterialSymbol.js +6 -37
- package/dist/components/common/SolidMaterialSymbol.js.map +1 -1
- package/dist/components/common/SolidMaterialSymbol.tsx +6 -54
- package/dist/components/common/SolidSettings/LlmSettings/AiModelConfigTab.d.ts.map +1 -1
- package/dist/components/common/SolidSettings/LlmSettings/AiModelConfigTab.js +2 -2
- package/dist/components/common/SolidSettings/LlmSettings/AiModelConfigTab.js.map +1 -1
- package/dist/components/common/SolidSettings/LlmSettings/AiModelConfigTab.tsx +2 -0
- package/dist/components/core/card/CardItem.d.ts.map +1 -1
- package/dist/components/core/card/CardItem.js +1 -1
- package/dist/components/core/card/CardItem.js.map +1 -1
- package/dist/components/core/card/CardItem.tsx +16 -14
- package/dist/components/core/card/SolidCardView.d.ts.map +1 -1
- package/dist/components/core/card/SolidCardView.js +69 -40
- package/dist/components/core/card/SolidCardView.js.map +1 -1
- package/dist/components/core/card/SolidCardView.tsx +55 -24
- package/dist/components/core/common/SolidAccountSettings/SolidAccountSettings.module.css +99 -0
- package/dist/components/core/common/SolidAccountSettings/SolidVersionInfo.d.ts.map +1 -1
- package/dist/components/core/common/SolidAccountSettings/SolidVersionInfo.js +76 -5
- package/dist/components/core/common/SolidAccountSettings/SolidVersionInfo.js.map +1 -1
- package/dist/components/core/common/SolidAccountSettings/SolidVersionInfo.tsx +39 -4
- package/dist/components/core/common/SolidGlobalSearchElement.d.ts.map +1 -1
- package/dist/components/core/common/SolidGlobalSearchElement.js +172 -124
- package/dist/components/core/common/SolidGlobalSearchElement.js.map +1 -1
- package/dist/components/core/common/SolidGlobalSearchElement.tsx +73 -84
- package/dist/components/core/common/globalSearchPersistence.d.ts +3 -0
- package/dist/components/core/common/globalSearchPersistence.d.ts.map +1 -1
- package/dist/components/core/common/globalSearchPersistence.js +33 -24
- package/dist/components/core/common/globalSearchPersistence.js.map +1 -1
- package/dist/components/core/common/globalSearchPersistence.ts +34 -27
- package/dist/components/core/filter/fields/SolidMediaMultipleField.js +2 -2
- package/dist/components/core/filter/fields/SolidMediaMultipleField.js.map +1 -1
- package/dist/components/core/filter/fields/SolidMediaMultipleField.tsx +2 -2
- package/dist/components/core/filter/fields/SolidMediaSingleField.js +2 -2
- package/dist/components/core/filter/fields/SolidMediaSingleField.js.map +1 -1
- package/dist/components/core/filter/fields/SolidMediaSingleField.tsx +2 -2
- package/dist/components/core/filter/fields/SolidShortTextField.js +2 -2
- package/dist/components/core/filter/fields/SolidShortTextField.js.map +1 -1
- package/dist/components/core/filter/fields/SolidShortTextField.tsx +2 -2
- package/dist/components/core/kanban/KanbanCard.d.ts.map +1 -1
- package/dist/components/core/kanban/KanbanCard.js +1 -1
- package/dist/components/core/kanban/KanbanCard.js.map +1 -1
- package/dist/components/core/kanban/KanbanCard.tsx +18 -16
- package/dist/components/core/kanban/SolidKanbanView.d.ts.map +1 -1
- package/dist/components/core/kanban/SolidKanbanView.js +67 -48
- package/dist/components/core/kanban/SolidKanbanView.js.map +1 -1
- package/dist/components/core/kanban/SolidKanbanView.tsx +51 -11
- package/dist/components/core/kanban/SolidKanbanViewConfigure.d.ts +1 -1
- package/dist/components/core/kanban/SolidKanbanViewConfigure.d.ts.map +1 -1
- package/dist/components/core/kanban/SolidKanbanViewConfigure.js +11 -2
- package/dist/components/core/kanban/SolidKanbanViewConfigure.js.map +1 -1
- package/dist/components/core/kanban/SolidKanbanViewConfigure.tsx +35 -0
- package/dist/components/core/list/SolidListView.d.ts.map +1 -1
- package/dist/components/core/list/SolidListView.js +6 -2
- package/dist/components/core/list/SolidListView.js.map +1 -1
- package/dist/components/core/list/SolidListView.tsx +7 -1
- package/dist/components/core/list/SolidListViewConfigure.d.ts.map +1 -1
- package/dist/components/core/list/SolidListViewConfigure.js +15 -11
- package/dist/components/core/list/SolidListViewConfigure.js.map +1 -1
- package/dist/components/core/list/SolidListViewConfigure.tsx +25 -6
- package/dist/components/core/list/SolidListViewHeaderContextMenuButton.d.ts +1 -1
- package/dist/components/core/list/SolidListViewHeaderContextMenuButton.d.ts.map +1 -1
- package/dist/components/core/list/SolidListViewHeaderContextMenuButton.js +3 -1
- package/dist/components/core/list/SolidListViewHeaderContextMenuButton.js.map +1 -1
- package/dist/components/core/list/SolidListViewHeaderContextMenuButton.tsx +3 -1
- package/dist/components/core/list/columns/SolidMediaMultipleColumn.d.ts.map +1 -1
- package/dist/components/core/list/columns/SolidMediaMultipleColumn.js +7 -0
- package/dist/components/core/list/columns/SolidMediaMultipleColumn.js.map +1 -1
- package/dist/components/core/list/columns/SolidMediaMultipleColumn.tsx +5 -0
- package/dist/components/core/list/columns/SolidMediaSingleColumn.d.ts.map +1 -1
- package/dist/components/core/list/columns/SolidMediaSingleColumn.js +3 -0
- package/dist/components/core/list/columns/SolidMediaSingleColumn.js.map +1 -1
- package/dist/components/core/list/columns/SolidMediaSingleColumn.tsx +2 -0
- package/dist/components/core/list/widgets/SolidShortTextFieldImageRenderModeWidget.d.ts.map +1 -1
- package/dist/components/core/list/widgets/SolidShortTextFieldImageRenderModeWidget.js +3 -0
- package/dist/components/core/list/widgets/SolidShortTextFieldImageRenderModeWidget.js.map +1 -1
- package/dist/components/core/list/widgets/SolidShortTextFieldImageRenderModeWidget.tsx +2 -0
- package/dist/components/core/model/CreateModel.css +10 -0
- package/dist/components/core/model/FieldMetaDataForm.css +10 -0
- package/dist/components/core/model/FieldMetaDataForm.js +8 -8
- package/dist/components/core/model/FieldMetaDataForm.js.map +1 -1
- package/dist/components/core/model/FieldMetaDataForm.tsx +13 -13
- package/dist/components/core/module/ModuleMetadataExplorer.css +23 -0
- package/dist/components/core/module/ModuleMetadataExplorer.d.ts.map +1 -1
- package/dist/components/core/module/ModuleMetadataExplorer.js +1 -1
- package/dist/components/core/module/ModuleMetadataExplorer.js.map +1 -1
- package/dist/components/core/module/ModuleMetadataExplorer.tsx +9 -0
- package/dist/components/core/tree/SolidTreeView.d.ts.map +1 -1
- package/dist/components/core/tree/SolidTreeView.js +249 -138
- package/dist/components/core/tree/SolidTreeView.js.map +1 -1
- package/dist/components/core/tree/SolidTreeView.tsx +220 -92
- package/dist/components/core/users/ApiKeysTab/GenerateApiKeyModal.d.ts.map +1 -1
- package/dist/components/core/users/ApiKeysTab/GenerateApiKeyModal.js +1 -1
- package/dist/components/core/users/ApiKeysTab/GenerateApiKeyModal.js.map +1 -1
- package/dist/components/core/users/ApiKeysTab/GenerateApiKeyModal.tsx +1 -0
- package/dist/components/layout/AdminHeaderActions.js +6 -13
- package/dist/components/layout/AdminHeaderActions.js.map +1 -1
- package/dist/components/layout/AdminHeaderActions.tsx +11 -11
- package/dist/components/layout/AdminLayout.d.ts.map +1 -1
- package/dist/components/layout/AdminLayout.js +2 -2
- package/dist/components/layout/AdminLayout.js.map +1 -1
- package/dist/components/layout/AdminLayout.tsx +5 -4
- package/dist/components/layout/AppSidebar.d.ts.map +1 -1
- package/dist/components/layout/AppSidebar.js +17 -2
- package/dist/components/layout/AppSidebar.js.map +1 -1
- package/dist/components/layout/AppSidebar.tsx +21 -2
- package/dist/components/shad-cn-ui/SolidDatePicker.d.ts +1 -1
- package/dist/components/shad-cn-ui/SolidDatePicker.d.ts.map +1 -1
- package/dist/components/shad-cn-ui/SolidDatePicker.js +35 -3
- package/dist/components/shad-cn-ui/SolidDatePicker.js.map +1 -1
- package/dist/components/shad-cn-ui/SolidDatePicker.tsx +84 -0
- package/dist/components/shad-cn-ui/SolidTooltip.d.ts.map +1 -1
- package/dist/components/shad-cn-ui/SolidTooltip.js +55 -2
- package/dist/components/shad-cn-ui/SolidTooltip.js.map +1 -1
- package/dist/components/shad-cn-ui/SolidTooltip.tsx +95 -1
- package/dist/resources/globals.css +109 -1
- package/dist/resources/solid-custom.css +53 -3
- package/dist/resources/solid-tailwind-generated.css +1 -1
- package/dist/routes/pages/admin/core/DashboardPage.d.ts.map +1 -1
- package/dist/routes/pages/admin/core/DashboardPage.js +2 -2
- package/dist/routes/pages/admin/core/DashboardPage.js.map +1 -1
- package/dist/routes/pages/admin/core/DashboardPage.tsx +2 -0
- package/dist/routes/pages/admin/core/DatasourceIntrospectionPage.d.ts.map +1 -1
- package/dist/routes/pages/admin/core/DatasourceIntrospectionPage.js +1 -1
- package/dist/routes/pages/admin/core/DatasourceIntrospectionPage.js.map +1 -1
- package/dist/routes/pages/admin/core/DatasourceIntrospectionPage.tsx +1 -0
- package/dist/types/css-modules.d.ts +2 -0
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SolidDatePicker.js","sourceRoot":"","sources":["../../../src/components/shad-cn-ui/SolidDatePicker.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,eAAe,MAAM,kBAAkB,CAAC;AAC/C,OAAO,4CAA4C,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAW1C,SAAS,eAAe,CAAC,KAA8B,EAAE,OAAgB;IACvE,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK,YAAY,IAAI,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE;QACvE,OAAO,EAAE,CAAC;KACX;IACD,IAAI,CAAC,OAAO,EAAE;QACZ,OAAO,KAAK,CAAC,WAAW,EAAE,CAAC;KAC5B;IACD,IAAM,GAAG,GAAG,UAAC,GAAW,EAAE,MAAU;QAAV,uBAAA,EAAA,UAAU;QAAK,OAAA,MAAM,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC;IAAjC,CAAiC,CAAC;IAC3E,IAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC;IAC/B,IAAM,OAAO,GAAG,KAAK,CAAC,UAAU,EAAE,CAAC;IACnC,IAAM,OAAO,GAAG,KAAK,CAAC,UAAU,EAAE,CAAC;IACnC,IAAM,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;IACvC,IAAM,GAAG,GAAG,KAAK,GAAG,EAAE,IAAI,EAAE,CAAC;IAE7B,OAAO,OAAO;SACX,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;SAC7C,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC;SACzC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;SACpC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC;SAC1B,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;SACxB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;SAC1B,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;SAC5B,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;SAC5B,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC;SACpB,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AACzB,CAAC;AAED,IAAM,oBAAoB,GAAG,KAAK,CAAC,UAAU,CAC3C,UAAC,EAAqC,EAAE,GAAG;IAAxC,IAAA,SAAS,eAAA,EAAE,YAAY,kBAAA,EAAK,KAAK,cAAnC,6BAAqC,CAAF;IAAY,OAAA,CAC9C,KAAC,UAAU,aACT,GAAG,EAAE,GAAG,IACJ,KAAK,IACT,KAAK,EAAE,YAAY,aAAZ,YAAY,cAAZ,YAAY,GAAI,CAAC,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAC3E,QAAQ,QACR,SAAS,EAAE,SAAS,IACpB,CACH,CAAA;CAAA,CACF,CAAC;AAEF,oBAAoB,CAAC,WAAW,GAAG,sBAAsB,CAAC;AAE1D,SAAS,EAAE;IAAC,eAA2C;SAA3C,UAA2C,EAA3C,qBAA2C,EAA3C,IAA2C;QAA3C,0BAA2C;;IACrD,OAAO,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACzC,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,EAUT;;IATrB,IAAA,QAAQ,cAAA,EACR,cAAc,oBAAA,EACd,cAAc,oBAAA,EACd,QAAQ,cAAA,EACR,UAAU,gBAAA,EACV,iBAAiB,uBAAA,EACjB,eAAe,qBAAA,EACf,SAAS,eAAA,EACN,KAAK,cATsB,+HAU/B,CADS;IAER,IAAM,gBAAgB,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,cAAc,CAAC;IAC1D,IAAM,cAAc,GAAG,MAAA,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,mCAAI,YAAY,CAAC;IAChG,IAAM,YAAY,GAAG,eAAe,CAAC,QAAmC,EAAE,cAAc,CAAC,CAAC;IAE1F,OAAO,CACL,KAAC,eAAe,aACd,WAAW,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,EAClC,eAAe,EAAC,cAAc,IAC1B,KAAK,IACT,QAAQ,EAAE,QAAQ,EAClB,cAAc,EAAE,gBAAgB,EAChC,kBAAkB,EAAE,QAAQ,EAC5B,iBAAiB,EAAE,EAAE,CAAC,iCAAiC,EAAE,iBAAiB,CAAC,EAC3E,eAAe,EAAE,EAAE,CAAC,+BAA+B,EAAE,eAAe,CAAC,EACrE,WAAW,EAAE,KAAC,oBAAoB,IAAC,SAAS,EAAE,cAAc,EAAE,YAAY,EAAE,YAAY,GAAI,EAC5F,SAAS,EAAE,EAAE,CAAC,kBAAkB,EAAE,SAAS,CAAC,IAC5C,CACH,CAAC;AACJ,CAAC","sourcesContent":["import React from \"react\";\nimport ReactDatePicker from \"react-datepicker\";\nimport \"react-datepicker/dist/react-datepicker.css\";\nimport { SolidInput } from \"./SolidInput\";\n\ntype SolidDatePickerProps = React.ComponentProps<typeof ReactDatePicker> & {\n timeOnly?: boolean;\n inputClassName?: string;\n};\n\ntype SolidDatePickerInputProps = React.InputHTMLAttributes<HTMLInputElement> & {\n displayValue?: string;\n};\n\nfunction formatDateValue(value: Date | null | undefined, pattern?: string) {\n if (!value || !(value instanceof Date) || Number.isNaN(value.getTime())) {\n return \"\";\n }\n if (!pattern) {\n return value.toISOString();\n }\n const pad = (num: number, length = 2) => String(num).padStart(length, \"0\");\n const hours = value.getHours();\n const minutes = value.getMinutes();\n const seconds = value.getSeconds();\n const ampm = hours >= 12 ? \"PM\" : \"AM\";\n const h12 = hours % 12 || 12;\n\n return pattern\n .replace(/yyyy/g, String(value.getFullYear()))\n .replace(/MM/g, pad(value.getMonth() + 1))\n .replace(/dd/g, pad(value.getDate()))\n .replace(/HH/g, pad(hours))\n .replace(/hh/g, pad(h12))\n .replace(/h/g, String(h12))\n .replace(/mm/g, pad(minutes))\n .replace(/ss/g, pad(seconds))\n .replace(/aa/g, ampm)\n .replace(/a/g, ampm);\n}\n\nconst SolidDatePickerInput = React.forwardRef<HTMLInputElement, SolidDatePickerInputProps>(\n ({ className, displayValue, ...props }, ref) => (\n <SolidInput\n ref={ref}\n {...props}\n value={displayValue ?? (typeof props.value === \"string\" ? props.value : \"\")}\n readOnly\n className={className}\n />\n )\n);\n\nSolidDatePickerInput.displayName = \"SolidDatePickerInput\";\n\nfunction cx(...parts: Array<string | false | undefined>) {\n return parts.filter(Boolean).join(\" \");\n}\n\nexport function SolidDatePicker({\n timeOnly,\n showTimeSelect,\n inputClassName,\n selected,\n dateFormat,\n calendarClassName,\n popperClassName,\n className,\n ...props\n}: SolidDatePickerProps) {\n const resolvedShowTime = timeOnly ? true : showTimeSelect;\n const resolvedFormat = (Array.isArray(dateFormat) ? dateFormat[0] : dateFormat) ?? \"yyyy-MM-dd\";\n const displayValue = formatDateValue(selected as Date | null | undefined, resolvedFormat);\n\n return (\n <ReactDatePicker\n popperProps={{ strategy: \"fixed\" }}\n popperPlacement=\"bottom-start\"\n {...props}\n selected={selected}\n showTimeSelect={resolvedShowTime}\n showTimeSelectOnly={timeOnly}\n calendarClassName={cx(\"solid-react-datepicker-calendar\", calendarClassName)}\n popperClassName={cx(\"solid-react-datepicker-popper\", popperClassName)}\n customInput={<SolidDatePickerInput className={inputClassName} displayValue={displayValue} />}\n className={cx(\"solid-datepicker\", className)}\n />\n );\n}\n"]}
|
|
1
|
+
{"version":3,"file":"SolidDatePicker.js","sourceRoot":"","sources":["../../../src/components/shad-cn-ui/SolidDatePicker.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,eAAe,MAAM,kBAAkB,CAAC;AAC/C,OAAO,4CAA4C,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAW5C,SAAS,eAAe,CAAC,KAA8B,EAAE,OAAgB;IACvE,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK,YAAY,IAAI,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE;QACvE,OAAO,EAAE,CAAC;KACX;IACD,IAAI,CAAC,OAAO,EAAE;QACZ,OAAO,KAAK,CAAC,WAAW,EAAE,CAAC;KAC5B;IACD,IAAM,GAAG,GAAG,UAAC,GAAW,EAAE,MAAU;QAAV,uBAAA,EAAA,UAAU;QAAK,OAAA,MAAM,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC;IAAjC,CAAiC,CAAC;IAC3E,IAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC;IAC/B,IAAM,OAAO,GAAG,KAAK,CAAC,UAAU,EAAE,CAAC;IACnC,IAAM,OAAO,GAAG,KAAK,CAAC,UAAU,EAAE,CAAC;IACnC,IAAM,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;IACvC,IAAM,GAAG,GAAG,KAAK,GAAG,EAAE,IAAI,EAAE,CAAC;IAE7B,OAAO,OAAO;SACX,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;SAC7C,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC;SACzC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;SACpC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC;SAC1B,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;SACxB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;SAC1B,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;SAC5B,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;SAC5B,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC;SACpB,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AACzB,CAAC;AAED,IAAM,oBAAoB,GAAG,KAAK,CAAC,UAAU,CAC3C,UAAC,EAAqC,EAAE,GAAG;IAAxC,IAAA,SAAS,eAAA,EAAE,YAAY,kBAAA,EAAK,KAAK,cAAnC,6BAAqC,CAAF;IAAY,OAAA,CAC9C,KAAC,UAAU,aACT,GAAG,EAAE,GAAG,IACJ,KAAK,IACT,KAAK,EAAE,YAAY,aAAZ,YAAY,cAAZ,YAAY,GAAI,CAAC,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAC3E,QAAQ,QACR,SAAS,EAAE,SAAS,IACpB,CACH,CAAA;CAAA,CACF,CAAC;AAEF,oBAAoB,CAAC,WAAW,GAAG,sBAAsB,CAAC;AAE1D,SAAS,EAAE;IAAC,eAA2C;SAA3C,UAA2C,EAA3C,qBAA2C,EAA3C,IAA2C;QAA3C,0BAA2C;;IACrD,OAAO,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACzC,CAAC;AAED,IAAM,aAAa,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,UAAC,CAAC,EAAE,UAAU,IAAK,OAAA,CAAC;IACnE,KAAK,EAAE,UAAU;IACjB,KAAK,EAAE,IAAI,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC;CACnG,CAAC,EAHkE,CAGlE,CAAC,CAAC;AAEJ,SAAS,gBAAgB,CAAC,QAAiC,EAAE,OAAqB,EAAE,OAAqB;;IACvG,IAAM,YAAY,GAAG,MAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,WAAW,EAAE,mCAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACzE,IAAM,OAAO,GAAG,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,WAAW,EAAE,mCAAI,IAAI,CAAC;IAC/C,IAAM,OAAO,GAAG,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,WAAW,EAAE,mCAAI,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,YAAY,GAAG,EAAE,CAAC,CAAC;IAC5E,IAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,KAAK,IAAI,IAAI,GAAG,OAAO,EAAE,IAAI,IAAI,OAAO,EAAE,IAAI,IAAI,CAAC,EAAE;QACnD,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KAClB;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,EAeT;;IAdrB,IAAA,QAAQ,cAAA,EACR,cAAc,oBAAA,EACd,cAAc,oBAAA,EACd,QAAQ,cAAA,EACR,UAAU,gBAAA,EACV,iBAAiB,uBAAA,EACjB,eAAe,qBAAA,EACf,SAAS,eAAA,EACT,OAAO,aAAA,EACP,OAAO,aAAA,EACP,kBAAkB,wBAAA,EAClB,iBAAiB,uBAAA,EACjB,gBAAgB,sBAAA,EACb,KAAK,cAdsB,oNAe/B,CADS;IAER,IAAM,gBAAgB,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,cAAc,CAAC;IAC1D,IAAM,cAAc,GAAG,MAAA,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,mCAAI,YAAY,CAAC;IAChG,IAAM,YAAY,GAAG,eAAe,CAAC,QAAmC,EAAE,cAAc,CAAC,CAAC;IAC1F,IAAM,mBAAmB,GAAG,iBAAiB,aAAjB,iBAAiB,cAAjB,iBAAiB,GAAI,CAAC,QAAQ,CAAC;IAC3D,IAAM,kBAAkB,GAAG,gBAAgB,aAAhB,gBAAgB,cAAhB,gBAAgB,GAAI,CAAC,QAAQ,CAAC;IACzD,IAAM,qBAAqB,GAAG,CAAC,QAAQ,IAAI,CAAC,kBAAkB,CAAC;IAC/D,IAAM,WAAW,GAAG,gBAAgB,CAAC,QAAmC,EAAE,OAAkC,EAAE,OAAkC,CAAC,CAAC;IAElJ,OAAO,CACL,KAAC,eAAe,aACd,WAAW,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,EAClC,eAAe,EAAC,cAAc,IAC1B,KAAK,IACT,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,OAAO,EAChB,cAAc,EAAE,gBAAgB,EAChC,kBAAkB,EAAE,QAAQ,EAC5B,iBAAiB,EAAE,mBAAmB,EACtC,gBAAgB,EAAE,kBAAkB,EACpC,kBAAkB,EAChB,qBAAqB;YACnB,CAAC,CAAC,UAAC,EAAsH;oBAApH,IAAI,UAAA,EAAE,UAAU,gBAAA,EAAE,WAAW,iBAAA,EAAE,aAAa,mBAAA,EAAE,aAAa,mBAAA,EAAE,uBAAuB,6BAAA,EAAE,uBAAuB,6BAAA;gBAAY,OAAA,CAC1H,eAAK,SAAS,EAAC,+BAA+B,aAC5C,iBACE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAC,4BAA4B,EACtC,OAAO,EAAE,aAAa,EACtB,QAAQ,EAAE,uBAAuB,gBACtB,gBAAgB,YAE3B,KAAC,WAAW,IAAC,IAAI,EAAE,EAAE,GAAI,GAClB,EAET,eAAK,SAAS,EAAC,gCAAgC,aAC7C,cAAK,SAAS,EAAC,gFAAgF,YAC7F,KAAC,WAAW,IACV,MAAM,EAAE,KAAK,EACb,SAAS,EAAC,oCAAoC,EAC9C,KAAK,EAAE,IAAI,CAAC,QAAQ,EAAE,EACtB,OAAO,EAAE,aAAa,EACtB,aAAa,EAAC,QAAQ,EACtB,QAAQ,EAAE,UAAC,EAAS;gDAAP,KAAK,WAAA;4CAAO,OAAA,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;wCAA1B,CAA0B,GACnD,GACE,EAEN,cAAK,SAAS,EAAC,+EAA+E,YAC5F,KAAC,WAAW,IACV,MAAM,EAAE,KAAK,EACb,SAAS,EAAC,oCAAoC,EAC9C,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,EACzB,OAAO,EAAE,WAAW,CAAC,GAAG,CAAC,UAAC,IAAI,IAAK,OAAA,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,EAAtC,CAAsC,CAAC,EAC1E,aAAa,EAAC,QAAQ,EACtB,QAAQ,EAAE,UAAC,EAAS;gDAAP,KAAK,WAAA;4CAAO,OAAA,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;wCAAzB,CAAyB,GAClD,GACE,IACF,EAEN,iBACE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAC,4BAA4B,EACtC,OAAO,EAAE,aAAa,EACtB,QAAQ,EAAE,uBAAuB,gBACtB,YAAY,YAEvB,KAAC,YAAY,IAAC,IAAI,EAAE,EAAE,GAAI,GACnB,IACL,CACP;YA9C2H,CA8C3H;YACH,CAAC,CAAC,kBAAkB,EAExB,iBAAiB,EAAE,EAAE,CAAC,iCAAiC,EAAE,iBAAiB,CAAC,EAC3E,eAAe,EAAE,EAAE,CAAC,+BAA+B,EAAE,eAAe,CAAC,EACrE,WAAW,EAAE,KAAC,oBAAoB,IAAC,SAAS,EAAE,cAAc,EAAE,YAAY,EAAE,YAAY,GAAI,EAC5F,SAAS,EAAE,EAAE,CAAC,kBAAkB,EAAE,SAAS,CAAC,IAC5C,CACH,CAAC;AACJ,CAAC","sourcesContent":["import React from \"react\";\nimport ReactDatePicker from \"react-datepicker\";\nimport \"react-datepicker/dist/react-datepicker.css\";\nimport { ChevronLeft, ChevronRight } from \"lucide-react\";\nimport { SolidInput } from \"./SolidInput\";\nimport { SolidSelect } from \"./SolidSelect\";\n\ntype SolidDatePickerProps = React.ComponentProps<typeof ReactDatePicker> & {\n timeOnly?: boolean;\n inputClassName?: string;\n};\n\ntype SolidDatePickerInputProps = React.InputHTMLAttributes<HTMLInputElement> & {\n displayValue?: string;\n};\n\nfunction formatDateValue(value: Date | null | undefined, pattern?: string) {\n if (!value || !(value instanceof Date) || Number.isNaN(value.getTime())) {\n return \"\";\n }\n if (!pattern) {\n return value.toISOString();\n }\n const pad = (num: number, length = 2) => String(num).padStart(length, \"0\");\n const hours = value.getHours();\n const minutes = value.getMinutes();\n const seconds = value.getSeconds();\n const ampm = hours >= 12 ? \"PM\" : \"AM\";\n const h12 = hours % 12 || 12;\n\n return pattern\n .replace(/yyyy/g, String(value.getFullYear()))\n .replace(/MM/g, pad(value.getMonth() + 1))\n .replace(/dd/g, pad(value.getDate()))\n .replace(/HH/g, pad(hours))\n .replace(/hh/g, pad(h12))\n .replace(/h/g, String(h12))\n .replace(/mm/g, pad(minutes))\n .replace(/ss/g, pad(seconds))\n .replace(/aa/g, ampm)\n .replace(/a/g, ampm);\n}\n\nconst SolidDatePickerInput = React.forwardRef<HTMLInputElement, SolidDatePickerInputProps>(\n ({ className, displayValue, ...props }, ref) => (\n <SolidInput\n ref={ref}\n {...props}\n value={displayValue ?? (typeof props.value === \"string\" ? props.value : \"\")}\n readOnly\n className={className}\n />\n )\n);\n\nSolidDatePickerInput.displayName = \"SolidDatePickerInput\";\n\nfunction cx(...parts: Array<string | false | undefined>) {\n return parts.filter(Boolean).join(\" \");\n}\n\nconst MONTH_OPTIONS = Array.from({ length: 12 }, (_, monthIndex) => ({\n value: monthIndex,\n label: new Intl.DateTimeFormat(undefined, { month: \"long\" }).format(new Date(2026, monthIndex, 1)),\n}));\n\nfunction buildYearOptions(selected: Date | null | undefined, minDate?: Date | null, maxDate?: Date | null) {\n const selectedYear = selected?.getFullYear() ?? new Date().getFullYear();\n const minYear = minDate?.getFullYear() ?? 1900;\n const maxYear = maxDate?.getFullYear() ?? Math.max(2100, selectedYear + 25);\n const years: number[] = [];\n\n for (let year = minYear; year <= maxYear; year += 1) {\n years.push(year);\n }\n\n return years;\n}\n\nexport function SolidDatePicker({\n timeOnly,\n showTimeSelect,\n inputClassName,\n selected,\n dateFormat,\n calendarClassName,\n popperClassName,\n className,\n minDate,\n maxDate,\n renderCustomHeader,\n showMonthDropdown,\n showYearDropdown,\n ...props\n}: SolidDatePickerProps) {\n const resolvedShowTime = timeOnly ? true : showTimeSelect;\n const resolvedFormat = (Array.isArray(dateFormat) ? dateFormat[0] : dateFormat) ?? \"yyyy-MM-dd\";\n const displayValue = formatDateValue(selected as Date | null | undefined, resolvedFormat);\n const enableMonthDropdown = showMonthDropdown ?? !timeOnly;\n const enableYearDropdown = showYearDropdown ?? !timeOnly;\n const shouldUseCustomHeader = !timeOnly && !renderCustomHeader;\n const yearOptions = buildYearOptions(selected as Date | null | undefined, minDate as Date | null | undefined, maxDate as Date | null | undefined);\n\n return (\n <ReactDatePicker\n popperProps={{ strategy: \"fixed\" }}\n popperPlacement=\"bottom-start\"\n {...props}\n selected={selected}\n minDate={minDate}\n maxDate={maxDate}\n showTimeSelect={resolvedShowTime}\n showTimeSelectOnly={timeOnly}\n showMonthDropdown={enableMonthDropdown}\n showYearDropdown={enableYearDropdown}\n renderCustomHeader={\n shouldUseCustomHeader\n ? ({ date, changeYear, changeMonth, decreaseMonth, increaseMonth, prevMonthButtonDisabled, nextMonthButtonDisabled }: any) => (\n <div className=\"solid-react-datepicker-header\">\n <button\n type=\"button\"\n className=\"solid-react-datepicker-nav\"\n onClick={decreaseMonth}\n disabled={prevMonthButtonDisabled}\n aria-label=\"Previous month\"\n >\n <ChevronLeft size={16} />\n </button>\n\n <div className=\"solid-react-datepicker-selects\">\n <div className=\"solid-react-datepicker-select-shell solid-react-datepicker-select-shell--month\">\n <SolidSelect\n native={false}\n className=\"solid-react-datepicker-select-wrap\"\n value={date.getMonth()}\n options={MONTH_OPTIONS}\n menuPlacement=\"bottom\"\n onChange={({ value }) => changeMonth(Number(value))}\n />\n </div>\n\n <div className=\"solid-react-datepicker-select-shell solid-react-datepicker-select-shell--year\">\n <SolidSelect\n native={false}\n className=\"solid-react-datepicker-select-wrap\"\n value={date.getFullYear()}\n options={yearOptions.map((year) => ({ label: String(year), value: year }))}\n menuPlacement=\"bottom\"\n onChange={({ value }) => changeYear(Number(value))}\n />\n </div>\n </div>\n\n <button\n type=\"button\"\n className=\"solid-react-datepicker-nav\"\n onClick={increaseMonth}\n disabled={nextMonthButtonDisabled}\n aria-label=\"Next month\"\n >\n <ChevronRight size={16} />\n </button>\n </div>\n )\n : renderCustomHeader\n }\n calendarClassName={cx(\"solid-react-datepicker-calendar\", calendarClassName)}\n popperClassName={cx(\"solid-react-datepicker-popper\", popperClassName)}\n customInput={<SolidDatePickerInput className={inputClassName} displayValue={displayValue} />}\n className={cx(\"solid-datepicker\", className)}\n />\n );\n}\n"]}
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
import ReactDatePicker from "react-datepicker";
|
|
3
3
|
import "react-datepicker/dist/react-datepicker.css";
|
|
4
|
+
import { ChevronLeft, ChevronRight } from "lucide-react";
|
|
4
5
|
import { SolidInput } from "./SolidInput";
|
|
6
|
+
import { SolidSelect } from "./SolidSelect";
|
|
5
7
|
|
|
6
8
|
type SolidDatePickerProps = React.ComponentProps<typeof ReactDatePicker> & {
|
|
7
9
|
timeOnly?: boolean;
|
|
@@ -57,6 +59,24 @@ function cx(...parts: Array<string | false | undefined>) {
|
|
|
57
59
|
return parts.filter(Boolean).join(" ");
|
|
58
60
|
}
|
|
59
61
|
|
|
62
|
+
const MONTH_OPTIONS = Array.from({ length: 12 }, (_, monthIndex) => ({
|
|
63
|
+
value: monthIndex,
|
|
64
|
+
label: new Intl.DateTimeFormat(undefined, { month: "long" }).format(new Date(2026, monthIndex, 1)),
|
|
65
|
+
}));
|
|
66
|
+
|
|
67
|
+
function buildYearOptions(selected: Date | null | undefined, minDate?: Date | null, maxDate?: Date | null) {
|
|
68
|
+
const selectedYear = selected?.getFullYear() ?? new Date().getFullYear();
|
|
69
|
+
const minYear = minDate?.getFullYear() ?? 1900;
|
|
70
|
+
const maxYear = maxDate?.getFullYear() ?? Math.max(2100, selectedYear + 25);
|
|
71
|
+
const years: number[] = [];
|
|
72
|
+
|
|
73
|
+
for (let year = minYear; year <= maxYear; year += 1) {
|
|
74
|
+
years.push(year);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
return years;
|
|
78
|
+
}
|
|
79
|
+
|
|
60
80
|
export function SolidDatePicker({
|
|
61
81
|
timeOnly,
|
|
62
82
|
showTimeSelect,
|
|
@@ -66,11 +86,20 @@ export function SolidDatePicker({
|
|
|
66
86
|
calendarClassName,
|
|
67
87
|
popperClassName,
|
|
68
88
|
className,
|
|
89
|
+
minDate,
|
|
90
|
+
maxDate,
|
|
91
|
+
renderCustomHeader,
|
|
92
|
+
showMonthDropdown,
|
|
93
|
+
showYearDropdown,
|
|
69
94
|
...props
|
|
70
95
|
}: SolidDatePickerProps) {
|
|
71
96
|
const resolvedShowTime = timeOnly ? true : showTimeSelect;
|
|
72
97
|
const resolvedFormat = (Array.isArray(dateFormat) ? dateFormat[0] : dateFormat) ?? "yyyy-MM-dd";
|
|
73
98
|
const displayValue = formatDateValue(selected as Date | null | undefined, resolvedFormat);
|
|
99
|
+
const enableMonthDropdown = showMonthDropdown ?? !timeOnly;
|
|
100
|
+
const enableYearDropdown = showYearDropdown ?? !timeOnly;
|
|
101
|
+
const shouldUseCustomHeader = !timeOnly && !renderCustomHeader;
|
|
102
|
+
const yearOptions = buildYearOptions(selected as Date | null | undefined, minDate as Date | null | undefined, maxDate as Date | null | undefined);
|
|
74
103
|
|
|
75
104
|
return (
|
|
76
105
|
<ReactDatePicker
|
|
@@ -78,8 +107,63 @@ export function SolidDatePicker({
|
|
|
78
107
|
popperPlacement="bottom-start"
|
|
79
108
|
{...props}
|
|
80
109
|
selected={selected}
|
|
110
|
+
minDate={minDate}
|
|
111
|
+
maxDate={maxDate}
|
|
81
112
|
showTimeSelect={resolvedShowTime}
|
|
82
113
|
showTimeSelectOnly={timeOnly}
|
|
114
|
+
showMonthDropdown={enableMonthDropdown}
|
|
115
|
+
showYearDropdown={enableYearDropdown}
|
|
116
|
+
renderCustomHeader={
|
|
117
|
+
shouldUseCustomHeader
|
|
118
|
+
? ({ date, changeYear, changeMonth, decreaseMonth, increaseMonth, prevMonthButtonDisabled, nextMonthButtonDisabled }: any) => (
|
|
119
|
+
<div className="solid-react-datepicker-header">
|
|
120
|
+
<button
|
|
121
|
+
type="button"
|
|
122
|
+
className="solid-react-datepicker-nav"
|
|
123
|
+
onClick={decreaseMonth}
|
|
124
|
+
disabled={prevMonthButtonDisabled}
|
|
125
|
+
aria-label="Previous month"
|
|
126
|
+
>
|
|
127
|
+
<ChevronLeft size={16} />
|
|
128
|
+
</button>
|
|
129
|
+
|
|
130
|
+
<div className="solid-react-datepicker-selects">
|
|
131
|
+
<div className="solid-react-datepicker-select-shell solid-react-datepicker-select-shell--month">
|
|
132
|
+
<SolidSelect
|
|
133
|
+
native={false}
|
|
134
|
+
className="solid-react-datepicker-select-wrap"
|
|
135
|
+
value={date.getMonth()}
|
|
136
|
+
options={MONTH_OPTIONS}
|
|
137
|
+
menuPlacement="bottom"
|
|
138
|
+
onChange={({ value }) => changeMonth(Number(value))}
|
|
139
|
+
/>
|
|
140
|
+
</div>
|
|
141
|
+
|
|
142
|
+
<div className="solid-react-datepicker-select-shell solid-react-datepicker-select-shell--year">
|
|
143
|
+
<SolidSelect
|
|
144
|
+
native={false}
|
|
145
|
+
className="solid-react-datepicker-select-wrap"
|
|
146
|
+
value={date.getFullYear()}
|
|
147
|
+
options={yearOptions.map((year) => ({ label: String(year), value: year }))}
|
|
148
|
+
menuPlacement="bottom"
|
|
149
|
+
onChange={({ value }) => changeYear(Number(value))}
|
|
150
|
+
/>
|
|
151
|
+
</div>
|
|
152
|
+
</div>
|
|
153
|
+
|
|
154
|
+
<button
|
|
155
|
+
type="button"
|
|
156
|
+
className="solid-react-datepicker-nav"
|
|
157
|
+
onClick={increaseMonth}
|
|
158
|
+
disabled={nextMonthButtonDisabled}
|
|
159
|
+
aria-label="Next month"
|
|
160
|
+
>
|
|
161
|
+
<ChevronRight size={16} />
|
|
162
|
+
</button>
|
|
163
|
+
</div>
|
|
164
|
+
)
|
|
165
|
+
: renderCustomHeader
|
|
166
|
+
}
|
|
83
167
|
calendarClassName={cx("solid-react-datepicker-calendar", calendarClassName)}
|
|
84
168
|
popperClassName={cx("solid-react-datepicker-popper", popperClassName)}
|
|
85
169
|
customInput={<SolidDatePickerInput className={inputClassName} displayValue={displayValue} />}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SolidTooltip.d.ts","sourceRoot":"","sources":["../../../src/components/shad-cn-ui/SolidTooltip.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"SolidTooltip.d.ts","sourceRoot":"","sources":["../../../src/components/shad-cn-ui/SolidTooltip.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,KAAK,iBAAiB,GAAG;IACvB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B,CAAC;AAEF,KAAK,wBAAwB,GAAG;IAC9B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,IAAI,CAAC,EAAE,KAAK,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,CAAC;IAC3C,KAAK,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,KAAK,CAAC;IACnC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,KAAK,wBAAwB,GAAG;IAC9B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC;AAgCF,eAAO,MAAM,YAAY,iEAKtB,iBAAiB,4CA4CnB,CAAC;AAEF,eAAO,MAAM,mBAAmB,0BAAmC,wBAAwB,4CAa1F,CAAC;AAEF,eAAO,MAAM,mBAAmB,0CAK7B,wBAAwB,4CAkC1B,CAAC"}
|
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import * as React from "react";
|
|
2
3
|
import * as Tooltip from "@radix-ui/react-tooltip";
|
|
4
|
+
import { SolidPopover, SolidPopoverContent, SolidPopoverTrigger } from "./SolidPopover";
|
|
5
|
+
var SolidTooltipContext = React.createContext(null);
|
|
3
6
|
function cx() {
|
|
4
7
|
var parts = [];
|
|
5
8
|
for (var _i = 0; _i < arguments.length; _i++) {
|
|
@@ -7,16 +10,66 @@ function cx() {
|
|
|
7
10
|
}
|
|
8
11
|
return parts.filter(Boolean).join(" ");
|
|
9
12
|
}
|
|
13
|
+
function canUseTapPopoverTrigger(children, asChild, isTouchDevice) {
|
|
14
|
+
if (!isTouchDevice) {
|
|
15
|
+
return false;
|
|
16
|
+
}
|
|
17
|
+
if (!asChild || !React.isValidElement(children)) {
|
|
18
|
+
return true;
|
|
19
|
+
}
|
|
20
|
+
var childProps = children.props;
|
|
21
|
+
return (typeof childProps.onClick !== "function" &&
|
|
22
|
+
typeof childProps.href !== "string" &&
|
|
23
|
+
typeof childProps.to !== "string");
|
|
24
|
+
}
|
|
10
25
|
export var SolidTooltip = function (_a) {
|
|
11
26
|
var children = _a.children, defaultOpen = _a.defaultOpen, _b = _a.delayDuration, delayDuration = _b === void 0 ? 200 : _b, _c = _a.skipDelayDuration, skipDelayDuration = _c === void 0 ? 300 : _c;
|
|
12
|
-
|
|
27
|
+
var _d = React.useState(false), isTouchDevice = _d[0], setIsTouchDevice = _d[1];
|
|
28
|
+
var _e = React.useState(false), useTapPopover = _e[0], setUseTapPopover = _e[1];
|
|
29
|
+
React.useEffect(function () {
|
|
30
|
+
if (typeof window === "undefined" || typeof window.matchMedia !== "function") {
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
var touchMedia = window.matchMedia("(hover: none), (pointer: coarse)");
|
|
34
|
+
var updateMode = function () { return setIsTouchDevice(touchMedia.matches); };
|
|
35
|
+
updateMode();
|
|
36
|
+
if (typeof touchMedia.addEventListener === "function") {
|
|
37
|
+
touchMedia.addEventListener("change", updateMode);
|
|
38
|
+
return function () { return touchMedia.removeEventListener("change", updateMode); };
|
|
39
|
+
}
|
|
40
|
+
touchMedia.addListener(updateMode);
|
|
41
|
+
return function () { return touchMedia.removeListener(updateMode); };
|
|
42
|
+
}, []);
|
|
43
|
+
React.useEffect(function () {
|
|
44
|
+
if (!isTouchDevice && useTapPopover) {
|
|
45
|
+
setUseTapPopover(false);
|
|
46
|
+
}
|
|
47
|
+
}, [isTouchDevice, useTapPopover]);
|
|
48
|
+
var content = (_jsx(SolidTooltipContext.Provider, { value: { isTouchDevice: isTouchDevice, useTapPopover: useTapPopover, setUseTapPopover: setUseTapPopover }, children: children }));
|
|
49
|
+
if (isTouchDevice && useTapPopover) {
|
|
50
|
+
return _jsx(SolidPopover, { autoCloseGroup: "solid-tooltip", children: content });
|
|
51
|
+
}
|
|
52
|
+
return (_jsx(Tooltip.Provider, { delayDuration: delayDuration, skipDelayDuration: skipDelayDuration, children: _jsx(Tooltip.Root, { defaultOpen: defaultOpen, children: content }) }));
|
|
13
53
|
};
|
|
14
54
|
export var SolidTooltipTrigger = function (_a) {
|
|
15
|
-
var
|
|
55
|
+
var _b;
|
|
56
|
+
var children = _a.children, _c = _a.asChild, asChild = _c === void 0 ? false : _c;
|
|
57
|
+
var context = React.useContext(SolidTooltipContext);
|
|
58
|
+
var shouldUseTapPopover = canUseTapPopoverTrigger(children, asChild, (_b = context === null || context === void 0 ? void 0 : context.isTouchDevice) !== null && _b !== void 0 ? _b : false);
|
|
59
|
+
React.useEffect(function () {
|
|
60
|
+
context === null || context === void 0 ? void 0 : context.setUseTapPopover(shouldUseTapPopover);
|
|
61
|
+
}, [context, shouldUseTapPopover]);
|
|
62
|
+
if (context === null || context === void 0 ? void 0 : context.useTapPopover) {
|
|
63
|
+
return _jsx(SolidPopoverTrigger, { asChild: asChild, children: children });
|
|
64
|
+
}
|
|
16
65
|
return _jsx(Tooltip.Trigger, { asChild: asChild, children: children });
|
|
17
66
|
};
|
|
18
67
|
export var SolidTooltipContent = function (_a) {
|
|
19
68
|
var children = _a.children, _b = _a.side, side = _b === void 0 ? "top" : _b, _c = _a.align, align = _c === void 0 ? "center" : _c, className = _a.className;
|
|
69
|
+
var context = React.useContext(SolidTooltipContext);
|
|
70
|
+
if ((context === null || context === void 0 ? void 0 : context.isTouchDevice) && context.useTapPopover) {
|
|
71
|
+
return (_jsx(SolidPopoverContent, { side: side, align: align, className: cx("solid-tooltip-content", className), sideOffset: 6, children: children }));
|
|
72
|
+
}
|
|
20
73
|
return (_jsx(Tooltip.Portal, { children: _jsx(Tooltip.Content, { side: side, align: align, className: cx("solid-tooltip-content", className), sideOffset: 6, children: children }) }));
|
|
21
74
|
};
|
|
22
75
|
//# sourceMappingURL=SolidTooltip.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SolidTooltip.js","sourceRoot":"","sources":["../../../src/components/shad-cn-ui/SolidTooltip.tsx"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"SolidTooltip.js","sourceRoot":"","sources":["../../../src/components/shad-cn-ui/SolidTooltip.tsx"],"names":[],"mappings":"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","sourcesContent":["import * as React from \"react\";\nimport * as Tooltip from \"@radix-ui/react-tooltip\";\nimport { SolidPopover, SolidPopoverContent, SolidPopoverTrigger } from \"./SolidPopover\";\n\ntype SolidTooltipProps = {\n children: React.ReactNode;\n defaultOpen?: boolean;\n delayDuration?: number;\n skipDelayDuration?: number;\n};\n\ntype SolidTooltipContentProps = {\n children: React.ReactNode;\n side?: \"top\" | \"right\" | \"bottom\" | \"left\";\n align?: \"start\" | \"center\" | \"end\";\n className?: string;\n};\n\ntype SolidTooltipTriggerProps = {\n children: React.ReactNode;\n asChild?: boolean;\n};\n\ntype SolidTooltipContextValue = {\n isTouchDevice: boolean;\n useTapPopover: boolean;\n setUseTapPopover: (value: boolean) => void;\n};\n\nconst SolidTooltipContext = React.createContext<SolidTooltipContextValue | null>(null);\n\nfunction cx(...parts: Array<string | false | undefined>) {\n return parts.filter(Boolean).join(\" \");\n}\n\nfunction canUseTapPopoverTrigger(children: React.ReactNode, asChild: boolean, isTouchDevice: boolean) {\n if (!isTouchDevice) {\n return false;\n }\n\n if (!asChild || !React.isValidElement(children)) {\n return true;\n }\n\n const childProps = children.props as Record<string, unknown>;\n\n return (\n typeof childProps.onClick !== \"function\" &&\n typeof childProps.href !== \"string\" &&\n typeof childProps.to !== \"string\"\n );\n}\n\nexport const SolidTooltip = ({\n children,\n defaultOpen,\n delayDuration = 200,\n skipDelayDuration = 300,\n}: SolidTooltipProps) => {\n const [isTouchDevice, setIsTouchDevice] = React.useState(false);\n const [useTapPopover, setUseTapPopover] = React.useState(false);\n\n React.useEffect(() => {\n if (typeof window === \"undefined\" || typeof window.matchMedia !== \"function\") {\n return;\n }\n\n const touchMedia = window.matchMedia(\"(hover: none), (pointer: coarse)\");\n const updateMode = () => setIsTouchDevice(touchMedia.matches);\n\n updateMode();\n\n if (typeof touchMedia.addEventListener === \"function\") {\n touchMedia.addEventListener(\"change\", updateMode);\n return () => touchMedia.removeEventListener(\"change\", updateMode);\n }\n\n touchMedia.addListener(updateMode);\n return () => touchMedia.removeListener(updateMode);\n }, []);\n\n React.useEffect(() => {\n if (!isTouchDevice && useTapPopover) {\n setUseTapPopover(false);\n }\n }, [isTouchDevice, useTapPopover]);\n\n const content = (\n <SolidTooltipContext.Provider value={{ isTouchDevice, useTapPopover, setUseTapPopover }}>\n {children}\n </SolidTooltipContext.Provider>\n );\n\n if (isTouchDevice && useTapPopover) {\n return <SolidPopover autoCloseGroup=\"solid-tooltip\">{content}</SolidPopover>;\n }\n\n return (\n <Tooltip.Provider delayDuration={delayDuration} skipDelayDuration={skipDelayDuration}>\n <Tooltip.Root defaultOpen={defaultOpen}>{content}</Tooltip.Root>\n </Tooltip.Provider>\n );\n};\n\nexport const SolidTooltipTrigger = ({ children, asChild = false }: SolidTooltipTriggerProps) => {\n const context = React.useContext(SolidTooltipContext);\n const shouldUseTapPopover = canUseTapPopoverTrigger(children, asChild, context?.isTouchDevice ?? false);\n\n React.useEffect(() => {\n context?.setUseTapPopover(shouldUseTapPopover);\n }, [context, shouldUseTapPopover]);\n\n if (context?.useTapPopover) {\n return <SolidPopoverTrigger asChild={asChild}>{children}</SolidPopoverTrigger>;\n }\n\n return <Tooltip.Trigger asChild={asChild}>{children}</Tooltip.Trigger>;\n};\n\nexport const SolidTooltipContent = ({\n children,\n side = \"top\",\n align = \"center\",\n className,\n}: SolidTooltipContentProps) => {\n const context = React.useContext(SolidTooltipContext);\n\n if (context?.isTouchDevice && context.useTapPopover) {\n return (\n <SolidPopoverContent\n side={side}\n align={align}\n className={cx(\n \"solid-tooltip-content\",\n className\n )}\n sideOffset={6}\n >\n {children}\n </SolidPopoverContent>\n );\n }\n\n return (\n <Tooltip.Portal>\n <Tooltip.Content\n side={side}\n align={align}\n className={cx(\n \"solid-tooltip-content\",\n className\n )}\n sideOffset={6}\n >\n {children}\n </Tooltip.Content>\n </Tooltip.Portal>\n );\n};\n"]}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import * as React from "react";
|
|
2
2
|
import * as Tooltip from "@radix-ui/react-tooltip";
|
|
3
|
+
import { SolidPopover, SolidPopoverContent, SolidPopoverTrigger } from "./SolidPopover";
|
|
3
4
|
|
|
4
5
|
type SolidTooltipProps = {
|
|
5
6
|
children: React.ReactNode;
|
|
@@ -20,24 +21,99 @@ type SolidTooltipTriggerProps = {
|
|
|
20
21
|
asChild?: boolean;
|
|
21
22
|
};
|
|
22
23
|
|
|
24
|
+
type SolidTooltipContextValue = {
|
|
25
|
+
isTouchDevice: boolean;
|
|
26
|
+
useTapPopover: boolean;
|
|
27
|
+
setUseTapPopover: (value: boolean) => void;
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
const SolidTooltipContext = React.createContext<SolidTooltipContextValue | null>(null);
|
|
31
|
+
|
|
23
32
|
function cx(...parts: Array<string | false | undefined>) {
|
|
24
33
|
return parts.filter(Boolean).join(" ");
|
|
25
34
|
}
|
|
26
35
|
|
|
36
|
+
function canUseTapPopoverTrigger(children: React.ReactNode, asChild: boolean, isTouchDevice: boolean) {
|
|
37
|
+
if (!isTouchDevice) {
|
|
38
|
+
return false;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
if (!asChild || !React.isValidElement(children)) {
|
|
42
|
+
return true;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
const childProps = children.props as Record<string, unknown>;
|
|
46
|
+
|
|
47
|
+
return (
|
|
48
|
+
typeof childProps.onClick !== "function" &&
|
|
49
|
+
typeof childProps.href !== "string" &&
|
|
50
|
+
typeof childProps.to !== "string"
|
|
51
|
+
);
|
|
52
|
+
}
|
|
53
|
+
|
|
27
54
|
export const SolidTooltip = ({
|
|
28
55
|
children,
|
|
29
56
|
defaultOpen,
|
|
30
57
|
delayDuration = 200,
|
|
31
58
|
skipDelayDuration = 300,
|
|
32
59
|
}: SolidTooltipProps) => {
|
|
60
|
+
const [isTouchDevice, setIsTouchDevice] = React.useState(false);
|
|
61
|
+
const [useTapPopover, setUseTapPopover] = React.useState(false);
|
|
62
|
+
|
|
63
|
+
React.useEffect(() => {
|
|
64
|
+
if (typeof window === "undefined" || typeof window.matchMedia !== "function") {
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
const touchMedia = window.matchMedia("(hover: none), (pointer: coarse)");
|
|
69
|
+
const updateMode = () => setIsTouchDevice(touchMedia.matches);
|
|
70
|
+
|
|
71
|
+
updateMode();
|
|
72
|
+
|
|
73
|
+
if (typeof touchMedia.addEventListener === "function") {
|
|
74
|
+
touchMedia.addEventListener("change", updateMode);
|
|
75
|
+
return () => touchMedia.removeEventListener("change", updateMode);
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
touchMedia.addListener(updateMode);
|
|
79
|
+
return () => touchMedia.removeListener(updateMode);
|
|
80
|
+
}, []);
|
|
81
|
+
|
|
82
|
+
React.useEffect(() => {
|
|
83
|
+
if (!isTouchDevice && useTapPopover) {
|
|
84
|
+
setUseTapPopover(false);
|
|
85
|
+
}
|
|
86
|
+
}, [isTouchDevice, useTapPopover]);
|
|
87
|
+
|
|
88
|
+
const content = (
|
|
89
|
+
<SolidTooltipContext.Provider value={{ isTouchDevice, useTapPopover, setUseTapPopover }}>
|
|
90
|
+
{children}
|
|
91
|
+
</SolidTooltipContext.Provider>
|
|
92
|
+
);
|
|
93
|
+
|
|
94
|
+
if (isTouchDevice && useTapPopover) {
|
|
95
|
+
return <SolidPopover autoCloseGroup="solid-tooltip">{content}</SolidPopover>;
|
|
96
|
+
}
|
|
97
|
+
|
|
33
98
|
return (
|
|
34
99
|
<Tooltip.Provider delayDuration={delayDuration} skipDelayDuration={skipDelayDuration}>
|
|
35
|
-
<Tooltip.Root defaultOpen={defaultOpen}>{
|
|
100
|
+
<Tooltip.Root defaultOpen={defaultOpen}>{content}</Tooltip.Root>
|
|
36
101
|
</Tooltip.Provider>
|
|
37
102
|
);
|
|
38
103
|
};
|
|
39
104
|
|
|
40
105
|
export const SolidTooltipTrigger = ({ children, asChild = false }: SolidTooltipTriggerProps) => {
|
|
106
|
+
const context = React.useContext(SolidTooltipContext);
|
|
107
|
+
const shouldUseTapPopover = canUseTapPopoverTrigger(children, asChild, context?.isTouchDevice ?? false);
|
|
108
|
+
|
|
109
|
+
React.useEffect(() => {
|
|
110
|
+
context?.setUseTapPopover(shouldUseTapPopover);
|
|
111
|
+
}, [context, shouldUseTapPopover]);
|
|
112
|
+
|
|
113
|
+
if (context?.useTapPopover) {
|
|
114
|
+
return <SolidPopoverTrigger asChild={asChild}>{children}</SolidPopoverTrigger>;
|
|
115
|
+
}
|
|
116
|
+
|
|
41
117
|
return <Tooltip.Trigger asChild={asChild}>{children}</Tooltip.Trigger>;
|
|
42
118
|
};
|
|
43
119
|
|
|
@@ -47,6 +123,24 @@ export const SolidTooltipContent = ({
|
|
|
47
123
|
align = "center",
|
|
48
124
|
className,
|
|
49
125
|
}: SolidTooltipContentProps) => {
|
|
126
|
+
const context = React.useContext(SolidTooltipContext);
|
|
127
|
+
|
|
128
|
+
if (context?.isTouchDevice && context.useTapPopover) {
|
|
129
|
+
return (
|
|
130
|
+
<SolidPopoverContent
|
|
131
|
+
side={side}
|
|
132
|
+
align={align}
|
|
133
|
+
className={cx(
|
|
134
|
+
"solid-tooltip-content",
|
|
135
|
+
className
|
|
136
|
+
)}
|
|
137
|
+
sideOffset={6}
|
|
138
|
+
>
|
|
139
|
+
{children}
|
|
140
|
+
</SolidPopoverContent>
|
|
141
|
+
);
|
|
142
|
+
}
|
|
143
|
+
|
|
50
144
|
return (
|
|
51
145
|
<Tooltip.Portal>
|
|
52
146
|
<Tooltip.Content
|
|
@@ -204,17 +204,22 @@ a {
|
|
|
204
204
|
background: var(--card);
|
|
205
205
|
color: var(--foreground);
|
|
206
206
|
box-shadow: 0 18px 48px rgba(15, 23, 42, 0.16);
|
|
207
|
-
overflow:
|
|
207
|
+
overflow: visible;
|
|
208
208
|
}
|
|
209
209
|
|
|
210
210
|
.solid-react-datepicker-calendar .react-datepicker__month-container {
|
|
211
211
|
float: left;
|
|
212
212
|
width: auto;
|
|
213
|
+
overflow: visible;
|
|
213
214
|
}
|
|
214
215
|
|
|
215
216
|
.solid-react-datepicker-calendar .react-datepicker__header {
|
|
216
217
|
background: color-mix(in srgb, var(--card) 92%, white 8%);
|
|
217
218
|
border-bottom: 1px solid color-mix(in srgb, var(--border) 88%, transparent);
|
|
219
|
+
padding: 4px;
|
|
220
|
+
position: relative;
|
|
221
|
+
overflow: visible;
|
|
222
|
+
z-index: 2;
|
|
218
223
|
}
|
|
219
224
|
|
|
220
225
|
.solid-react-datepicker-calendar .react-datepicker__current-month,
|
|
@@ -223,10 +228,111 @@ a {
|
|
|
223
228
|
color: var(--foreground);
|
|
224
229
|
}
|
|
225
230
|
|
|
231
|
+
.solid-react-datepicker-header {
|
|
232
|
+
display: grid;
|
|
233
|
+
grid-template-columns: 24px auto 24px;
|
|
234
|
+
align-items: center;
|
|
235
|
+
gap: 4px;
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
.solid-react-datepicker-selects {
|
|
239
|
+
display: flex;
|
|
240
|
+
align-items: center;
|
|
241
|
+
justify-content: center;
|
|
242
|
+
gap: 4px;
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
.solid-react-datepicker-select-shell {
|
|
246
|
+
flex: 0 0 auto;
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
.solid-react-datepicker-select-shell--month {
|
|
250
|
+
width: 96px;
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
.solid-react-datepicker-select-shell--year {
|
|
254
|
+
width: 64px;
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
.solid-react-datepicker-select-wrap {
|
|
258
|
+
width: 100%;
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
.solid-react-datepicker-select-shell .solid-select-wrap {
|
|
262
|
+
width: 100%;
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
.solid-react-datepicker-select-shell .solid-select-trigger {
|
|
266
|
+
min-height: 32px;
|
|
267
|
+
height: 30px;
|
|
268
|
+
border-radius: 6px;
|
|
269
|
+
padding: 0 22px 0 6px;
|
|
270
|
+
font-size: 11px;
|
|
271
|
+
font-weight: 500;
|
|
272
|
+
border-color: color-mix(in srgb, var(--border) 88%, transparent);
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
.solid-react-datepicker-select-shell .solid-select-trigger:focus-visible,
|
|
276
|
+
.solid-react-datepicker-select-shell .solid-select-trigger:focus {
|
|
277
|
+
border-color: color-mix(in srgb, var(--primary-color, var(--primary)) 60%, var(--border));
|
|
278
|
+
box-shadow: 0 0 0 3px color-mix(in srgb, var(--primary-color, var(--primary)) 14%, transparent);
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
.solid-react-datepicker-select-shell .solid-select-trigger-label {
|
|
282
|
+
font-size: 11px;
|
|
283
|
+
font-weight: 500;
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
.solid-react-datepicker-select-shell .solid-select-icon {
|
|
287
|
+
right: 6px;
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
.solid-react-datepicker-select-shell .solid-select-menu {
|
|
291
|
+
min-width: 100%;
|
|
292
|
+
z-index: calc(var(--z-overlay) + 5);
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
.solid-react-datepicker-nav {
|
|
296
|
+
display: inline-flex;
|
|
297
|
+
align-items: center;
|
|
298
|
+
justify-content: center;
|
|
299
|
+
width: 24px;
|
|
300
|
+
height: 24px;
|
|
301
|
+
border: 1px solid transparent;
|
|
302
|
+
border-radius: 6px;
|
|
303
|
+
background: transparent;
|
|
304
|
+
color: var(--foreground);
|
|
305
|
+
cursor: pointer;
|
|
306
|
+
transition: background-color 0.16s ease, border-color 0.16s ease, color 0.16s ease;
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
.solid-react-datepicker-nav:hover:not(:disabled) {
|
|
310
|
+
background: color-mix(in srgb, var(--accent) 72%, transparent);
|
|
311
|
+
border-color: color-mix(in srgb, var(--border) 82%, transparent);
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
.solid-react-datepicker-nav:disabled {
|
|
315
|
+
opacity: 0.4;
|
|
316
|
+
cursor: default;
|
|
317
|
+
}
|
|
318
|
+
|
|
226
319
|
.solid-react-datepicker-calendar .react-datepicker__day-name {
|
|
227
320
|
color: color-mix(in srgb, var(--foreground) 64%, transparent);
|
|
228
321
|
}
|
|
229
322
|
|
|
323
|
+
.solid-react-datepicker-calendar .react-datepicker__day-names {
|
|
324
|
+
margin-bottom: -4px;
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
.solid-react-datepicker-calendar .react-datepicker__month {
|
|
328
|
+
margin: 0.25rem 0.3rem 0.35rem;
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
.solid-react-datepicker-calendar .react-datepicker__day-name,
|
|
332
|
+
.solid-react-datepicker-calendar .react-datepicker__day {
|
|
333
|
+
margin: 0.12rem;
|
|
334
|
+
}
|
|
335
|
+
|
|
230
336
|
.solid-react-datepicker-calendar .react-datepicker__day,
|
|
231
337
|
.solid-react-datepicker-calendar .react-datepicker__month-text,
|
|
232
338
|
.solid-react-datepicker-calendar .react-datepicker__quarter-text,
|
|
@@ -530,6 +636,8 @@ html.dark .solid-react-datepicker-calendar .react-datepicker__year-option,
|
|
|
530
636
|
[data-theme="dark"] .solid-react-datepicker-calendar .react-datepicker__year-option,
|
|
531
637
|
html.dark .solid-react-datepicker-calendar .react-datepicker__month-year-option,
|
|
532
638
|
[data-theme="dark"] .solid-react-datepicker-calendar .react-datepicker__month-year-option,
|
|
639
|
+
html.dark .solid-react-datepicker-select,
|
|
640
|
+
[data-theme="dark"] .solid-react-datepicker-select,
|
|
533
641
|
html.dark .solid-react-datepicker-calendar .react-datepicker__navigation-icon::before,
|
|
534
642
|
[data-theme="dark"] .solid-react-datepicker-calendar .react-datepicker__navigation-icon::before,
|
|
535
643
|
html.dark .solid-react-datepicker-calendar .react-datepicker__month-read-view--down-arrow,
|
|
@@ -2001,6 +2001,12 @@ textarea {
|
|
|
2001
2001
|
margin-top: 10px;
|
|
2002
2002
|
}
|
|
2003
2003
|
|
|
2004
|
+
.solid-auth-tablist {
|
|
2005
|
+
width: 100% !important;
|
|
2006
|
+
max-width: 100%;
|
|
2007
|
+
box-sizing: border-box;
|
|
2008
|
+
}
|
|
2009
|
+
|
|
2004
2010
|
.solid-auth-divider .solid-divider {
|
|
2005
2011
|
height: 1px;
|
|
2006
2012
|
background: var(--border);
|
|
@@ -2345,7 +2351,7 @@ textarea {
|
|
|
2345
2351
|
}
|
|
2346
2352
|
|
|
2347
2353
|
.solid-auth-input-label {
|
|
2348
|
-
color: #
|
|
2354
|
+
color: #020617;
|
|
2349
2355
|
font-size: 13px;
|
|
2350
2356
|
font-weight: 500;
|
|
2351
2357
|
}
|
|
@@ -3724,6 +3730,8 @@ html.dark .solid-header-cog-trigger:hover,
|
|
|
3724
3730
|
.solid-data-table-viewport {
|
|
3725
3731
|
min-height: 0;
|
|
3726
3732
|
height: 100%;
|
|
3733
|
+
position: relative;
|
|
3734
|
+
z-index: 0;
|
|
3727
3735
|
overflow-y: auto;
|
|
3728
3736
|
overflow-x: auto;
|
|
3729
3737
|
}
|
|
@@ -3840,7 +3848,7 @@ html.dark .solid-header-cog-trigger:hover,
|
|
|
3840
3848
|
flex-shrink: 0;
|
|
3841
3849
|
min-height: 44px;
|
|
3842
3850
|
position: relative;
|
|
3843
|
-
z-index:
|
|
3851
|
+
z-index: 2;
|
|
3844
3852
|
background: var(--card);
|
|
3845
3853
|
border-color: color-mix(in srgb, var(--border) 86%, transparent) !important;
|
|
3846
3854
|
border-bottom: 0;
|
|
@@ -3851,7 +3859,7 @@ html.dark .solid-header-cog-trigger:hover,
|
|
|
3851
3859
|
}
|
|
3852
3860
|
|
|
3853
3861
|
.solid-table-paginator:focus-within {
|
|
3854
|
-
z-index:
|
|
3862
|
+
z-index: 12;
|
|
3855
3863
|
}
|
|
3856
3864
|
|
|
3857
3865
|
.solid-table-paginator-align-end {
|
|
@@ -3884,6 +3892,7 @@ html.dark .solid-header-cog-trigger:hover,
|
|
|
3884
3892
|
}
|
|
3885
3893
|
|
|
3886
3894
|
.solid-select-wrap.solid-paginator-select {
|
|
3895
|
+
position: relative;
|
|
3887
3896
|
display: inline-block;
|
|
3888
3897
|
width: auto;
|
|
3889
3898
|
min-width: 46px;
|
|
@@ -3923,6 +3932,7 @@ html.dark .solid-header-cog-trigger:hover,
|
|
|
3923
3932
|
min-width: 100%;
|
|
3924
3933
|
left: 0;
|
|
3925
3934
|
right: auto;
|
|
3935
|
+
z-index: calc(var(--z-overlay) + 8);
|
|
3926
3936
|
}
|
|
3927
3937
|
|
|
3928
3938
|
.solid-select-wrap.solid-paginator-select .solid-select-trigger:hover,
|
|
@@ -4613,6 +4623,21 @@ html.dark .solid-paginator-btn:hover:not(:disabled),
|
|
|
4613
4623
|
transform: none;
|
|
4614
4624
|
}
|
|
4615
4625
|
|
|
4626
|
+
.solid-popover-content.solid-tooltip-content,
|
|
4627
|
+
.solid-popover-content.solid-field-tooltip-popover {
|
|
4628
|
+
z-index: 9999;
|
|
4629
|
+
padding: 6px 8px;
|
|
4630
|
+
border: none;
|
|
4631
|
+
border-radius: 6px;
|
|
4632
|
+
background: #111827;
|
|
4633
|
+
color: #fff;
|
|
4634
|
+
font-size: 12px;
|
|
4635
|
+
line-height: 1.3;
|
|
4636
|
+
box-shadow: 0 8px 20px rgba(0, 0, 0, 0.12);
|
|
4637
|
+
max-width: 280px;
|
|
4638
|
+
word-break: break-word;
|
|
4639
|
+
}
|
|
4640
|
+
|
|
4616
4641
|
.solid-popover-content[data-portal="true"] {
|
|
4617
4642
|
max-width: calc(100vw - 16px);
|
|
4618
4643
|
}
|
|
@@ -4885,6 +4910,31 @@ html.dark .solid-paginator-btn:hover:not(:disabled),
|
|
|
4885
4910
|
padding-left: 4px;
|
|
4886
4911
|
}
|
|
4887
4912
|
|
|
4913
|
+
.solid-dropdown-menu-radio-item[data-state="checked"] {
|
|
4914
|
+
background: color-mix(in srgb, var(--primary-color, var(--primary)) 12%, transparent);
|
|
4915
|
+
border-color: color-mix(in srgb, var(--primary-color, var(--primary)) 30%, transparent);
|
|
4916
|
+
color: var(--primary-color, var(--primary));
|
|
4917
|
+
}
|
|
4918
|
+
|
|
4919
|
+
.solid-dropdown-menu-radio-item[data-state="checked"] .solid-dropdown-menu-item-text {
|
|
4920
|
+
font-weight: 600;
|
|
4921
|
+
}
|
|
4922
|
+
|
|
4923
|
+
.customize-layout-panel .solid-dropdown-menu-label {
|
|
4924
|
+
padding: 8px 8px 5px;
|
|
4925
|
+
}
|
|
4926
|
+
|
|
4927
|
+
.customize-layout-panel .solid-dropdown-menu-radio-item,
|
|
4928
|
+
.customize-layout-panel .solid-dropdown-menu-item {
|
|
4929
|
+
min-height: 32px;
|
|
4930
|
+
gap: 8px;
|
|
4931
|
+
padding: 0 8px;
|
|
4932
|
+
}
|
|
4933
|
+
|
|
4934
|
+
.customize-layout-panel .solid-dropdown-menu-separator {
|
|
4935
|
+
margin: 6px 0;
|
|
4936
|
+
}
|
|
4937
|
+
|
|
4888
4938
|
.solid-header-dropdown-item-danger {
|
|
4889
4939
|
color: var(--destructive);
|
|
4890
4940
|
}
|