@cryptlex/web-components 3.8.1 → 3.8.2
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/data-table/column-picker.es.js.map +1 -1
- package/dist/components/data-table/data-table.es.js.map +1 -1
- package/dist/components/data-table/table-commons.es.js.map +1 -1
- package/dist/components/data-table/table-content.es.js.map +1 -1
- package/dist/components/data-table/table-utils/createTableFetchFn.es.js.map +1 -1
- package/dist/components/data-table/table-utils/string.es.js.map +1 -1
- package/dist/components/inputs/country-select.es.js.map +1 -1
- package/dist/components/inputs/multi-select.es.js.map +1 -1
- package/dist/components/inputs/search-input.es.js.map +1 -1
- package/dist/components/inputs/select.es.js.map +1 -1
- package/dist/components/key-value-card/key-value-card.es.js.map +1 -1
- package/dist/components/ui/copy-button.es.js.map +1 -1
- package/dist/components/ui/sheet.es.js +59 -55
- package/dist/components/ui/sheet.es.js.map +1 -1
- package/dist/components/ui/sidebar.es.js.map +1 -1
- package/dist/components/ui/static-data-table.es.js.map +1 -1
- package/dist/hooks/use-mobile.es.js.map +1 -1
- package/dist/node_modules/.pnpm/@date-fns_tz@1.2.0/node_modules/@date-fns/tz/date/index.es.js.map +1 -1
- package/dist/node_modules/.pnpm/@date-fns_tz@1.2.0/node_modules/@date-fns/tz/date/mini.es.js.map +1 -1
- package/dist/node_modules/.pnpm/@date-fns_tz@1.2.0/node_modules/@date-fns/tz/tzOffset/index.es.js.map +1 -1
- package/dist/node_modules/.pnpm/@floating-ui_core@1.7.2/node_modules/@floating-ui/core/dist/floating-ui.core.es.js.map +1 -1
- package/dist/node_modules/.pnpm/@floating-ui_dom@1.7.2/node_modules/@floating-ui/dom/dist/floating-ui.dom.es.js.map +1 -1
- package/dist/node_modules/.pnpm/@floating-ui_react-dom@2.1.4_react-dom@19.1.0_react@19.1.0/node_modules/@floating-ui/react-dom/dist/floating-ui.react-dom.es.js.map +1 -1
- package/dist/node_modules/.pnpm/@floating-ui_utils@0.2.10/node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.es.js.map +1 -1
- package/dist/node_modules/.pnpm/@radix-ui_primitive@1.1.2/node_modules/@radix-ui/primitive/dist/index.es.js.map +1 -1
- package/dist/node_modules/.pnpm/@radix-ui_react-accordion@1.2.11_@types_react-dom@19.1.0_@types_react@19.1.0_react-dom@19.1.0_react@19.1.0/node_modules/@radix-ui/react-accordion/dist/index.es.js.map +1 -1
- package/dist/node_modules/.pnpm/@radix-ui_react-collapsible@1.1.11_@types_react-dom@19.1.0_@types_react@19.1.0_react-dom@19.1.0_react@19.1.0/node_modules/@radix-ui/react-collapsible/dist/index.es.js.map +1 -1
- package/dist/node_modules/.pnpm/@radix-ui_react-collection@1.1.7_@types_react-dom@19.1.0_@types_react@19.1.0_react-dom@19.1.0_react@19.1.0/node_modules/@radix-ui/react-collection/dist/index.es.js.map +1 -1
- package/dist/node_modules/.pnpm/@radix-ui_react-compose-refs@1.1.2_@types_react@19.1.0_react@19.1.0/node_modules/@radix-ui/react-compose-refs/dist/index.es.js.map +1 -1
- package/dist/node_modules/.pnpm/@radix-ui_react-context@1.1.2_@types_react@19.1.0_react@19.1.0/node_modules/@radix-ui/react-context/dist/index.es.js.map +1 -1
- package/dist/node_modules/.pnpm/@radix-ui_react-dialog@1.1.14_@types_react-dom@19.1.0_@types_react@19.1.0_react-dom@19.1.0_react@19.1.0/node_modules/@radix-ui/react-dialog/dist/index.es.js.map +1 -1
- package/dist/node_modules/.pnpm/@radix-ui_react-dismissable-layer@1.1.10_@types_react-dom@19.1.0_@types_react@19.1.0_react-dom@19.1.0_react@19.1.0/node_modules/@radix-ui/react-dismissable-layer/dist/index.es.js.map +1 -1
- package/dist/node_modules/.pnpm/@radix-ui_react-dropdown-menu@2.1.15_@types_react-dom@19.1.0_@types_react@19.1.0_react-dom@19.1.0_react@19.1.0/node_modules/@radix-ui/react-dropdown-menu/dist/index.es.js.map +1 -1
- package/dist/node_modules/.pnpm/@radix-ui_react-focus-guards@1.1.2_@types_react@19.1.0_react@19.1.0/node_modules/@radix-ui/react-focus-guards/dist/index.es.js.map +1 -1
- package/dist/node_modules/.pnpm/@radix-ui_react-focus-scope@1.1.7_@types_react-dom@19.1.0_@types_react@19.1.0_react-dom@19.1.0_react@19.1.0/node_modules/@radix-ui/react-focus-scope/dist/index.es.js.map +1 -1
- package/dist/node_modules/.pnpm/@radix-ui_react-id@1.1.1_@types_react@19.1.0_react@19.1.0/node_modules/@radix-ui/react-id/dist/index.es.js.map +1 -1
- package/dist/node_modules/.pnpm/@radix-ui_react-label@2.1.7_@types_react-dom@19.1.0_@types_react@19.1.0_react-dom@19.1.0_react@19.1.0/node_modules/@radix-ui/react-label/dist/index.es.js.map +1 -1
- package/dist/node_modules/.pnpm/@radix-ui_react-menu@2.1.15_@types_react-dom@19.1.0_@types_react@19.1.0_react-dom@19.1.0_react@19.1.0/node_modules/@radix-ui/react-menu/dist/index.es.js.map +1 -1
- package/dist/node_modules/.pnpm/@radix-ui_react-popover@1.1.14_@types_react-dom@19.1.0_@types_react@19.1.0_react-dom@19.1.0_react@19.1.0/node_modules/@radix-ui/react-popover/dist/index.es.js.map +1 -1
- package/dist/node_modules/.pnpm/@radix-ui_react-popper@1.2.7_@types_react-dom@19.1.0_@types_react@19.1.0_react-dom@19.1.0_react@19.1.0/node_modules/@radix-ui/react-popper/dist/index.es.js.map +1 -1
- package/dist/node_modules/.pnpm/@radix-ui_react-presence@1.1.4_@types_react-dom@19.1.0_@types_react@19.1.0_react-dom@19.1.0_react@19.1.0/node_modules/@radix-ui/react-presence/dist/index.es.js.map +1 -1
- package/dist/node_modules/.pnpm/@radix-ui_react-primitive@2.1.3_@types_react-dom@19.1.0_@types_react@19.1.0_react-dom@19.1.0_react@19.1.0/node_modules/@radix-ui/react-primitive/dist/index.es.js.map +1 -1
- package/dist/node_modules/.pnpm/@radix-ui_react-radio-group@1.3.7_@types_react-dom@19.1.0_@types_react@19.1.0_react-dom@19.1.0_react@19.1.0/node_modules/@radix-ui/react-radio-group/dist/index.es.js.map +1 -1
- package/dist/node_modules/.pnpm/@radix-ui_react-roving-focus@1.1.10_@types_react-dom@19.1.0_@types_react@19.1.0_react-dom@19.1.0_react@19.1.0/node_modules/@radix-ui/react-roving-focus/dist/index.es.js.map +1 -1
- package/dist/node_modules/.pnpm/@radix-ui_react-slot@1.2.3_@types_react@19.1.0_react@19.1.0/node_modules/@radix-ui/react-slot/dist/index.es.js.map +1 -1
- package/dist/node_modules/.pnpm/@radix-ui_react-tabs@1.1.12_@types_react-dom@19.1.0_@types_react@19.1.0_react-dom@19.1.0_react@19.1.0/node_modules/@radix-ui/react-tabs/dist/index.es.js.map +1 -1
- package/dist/node_modules/.pnpm/@radix-ui_react-tooltip@1.2.7_@types_react-dom@19.1.0_@types_react@19.1.0_react-dom@19.1.0_react@19.1.0/node_modules/@radix-ui/react-tooltip/dist/index.es.js.map +1 -1
- package/dist/node_modules/.pnpm/@radix-ui_react-use-callback-ref@1.1.1_@types_react@19.1.0_react@19.1.0/node_modules/@radix-ui/react-use-callback-ref/dist/index.es.js.map +1 -1
- package/dist/node_modules/.pnpm/@radix-ui_react-use-controllable-state@1.2.2_@types_react@19.1.0_react@19.1.0/node_modules/@radix-ui/react-use-controllable-state/dist/index.es.js.map +1 -1
- package/dist/node_modules/.pnpm/@radix-ui_react-use-escape-keydown@1.1.1_@types_react@19.1.0_react@19.1.0/node_modules/@radix-ui/react-use-escape-keydown/dist/index.es.js.map +1 -1
- package/dist/node_modules/.pnpm/@radix-ui_react-use-size@1.1.1_@types_react@19.1.0_react@19.1.0/node_modules/@radix-ui/react-use-size/dist/index.es.js.map +1 -1
- package/dist/node_modules/.pnpm/aria-hidden@1.2.6/node_modules/aria-hidden/dist/es2015/index.es.js.map +1 -1
- package/dist/node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/locale/_lib/buildFormatLongFn.es.js.map +1 -1
- package/dist/node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/locale/_lib/buildLocalizeFn.es.js.map +1 -1
- package/dist/node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/locale/_lib/buildMatchFn.es.js.map +1 -1
- package/dist/node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/locale/_lib/buildMatchPatternFn.es.js.map +1 -1
- package/dist/node_modules/.pnpm/react-day-picker@9.7.0_react@19.1.0/node_modules/react-day-picker/dist/esm/DayPicker.es.js.map +1 -1
- package/dist/node_modules/.pnpm/react-day-picker@9.7.0_react@19.1.0/node_modules/react-day-picker/dist/esm/classes/CalendarDay.es.js.map +1 -1
- package/dist/node_modules/.pnpm/react-day-picker@9.7.0_react@19.1.0/node_modules/react-day-picker/dist/esm/classes/CalendarMonth.es.js.map +1 -1
- package/dist/node_modules/.pnpm/react-day-picker@9.7.0_react@19.1.0/node_modules/react-day-picker/dist/esm/classes/CalendarWeek.es.js.map +1 -1
- package/dist/node_modules/.pnpm/react-day-picker@9.7.0_react@19.1.0/node_modules/react-day-picker/dist/esm/classes/DateLib.es.js.map +1 -1
- package/dist/node_modules/.pnpm/react-day-picker@9.7.0_react@19.1.0/node_modules/react-day-picker/dist/esm/components/DayButton.es.js.map +1 -1
- package/dist/node_modules/.pnpm/react-day-picker@9.7.0_react@19.1.0/node_modules/react-day-picker/dist/esm/components/Nav.es.js.map +1 -1
- package/dist/node_modules/.pnpm/react-day-picker@9.7.0_react@19.1.0/node_modules/react-day-picker/dist/esm/helpers/calculateFocusTarget.es.js.map +1 -1
- package/dist/node_modules/.pnpm/react-day-picker@9.7.0_react@19.1.0/node_modules/react-day-picker/dist/esm/helpers/createGetModifiers.es.js.map +1 -1
- package/dist/node_modules/.pnpm/react-day-picker@9.7.0_react@19.1.0/node_modules/react-day-picker/dist/esm/helpers/getDataAttributes.es.js.map +1 -1
- package/dist/node_modules/.pnpm/react-day-picker@9.7.0_react@19.1.0/node_modules/react-day-picker/dist/esm/helpers/getDates.es.js.map +1 -1
- package/dist/node_modules/.pnpm/react-day-picker@9.7.0_react@19.1.0/node_modules/react-day-picker/dist/esm/helpers/getDays.es.js.map +1 -1
- package/dist/node_modules/.pnpm/react-day-picker@9.7.0_react@19.1.0/node_modules/react-day-picker/dist/esm/helpers/getDisplayMonths.es.js.map +1 -1
- package/dist/node_modules/.pnpm/react-day-picker@9.7.0_react@19.1.0/node_modules/react-day-picker/dist/esm/helpers/getInitialMonth.es.js.map +1 -1
- package/dist/node_modules/.pnpm/react-day-picker@9.7.0_react@19.1.0/node_modules/react-day-picker/dist/esm/helpers/getMonthOptions.es.js.map +1 -1
- package/dist/node_modules/.pnpm/react-day-picker@9.7.0_react@19.1.0/node_modules/react-day-picker/dist/esm/helpers/getMonths.es.js.map +1 -1
- package/dist/node_modules/.pnpm/react-day-picker@9.7.0_react@19.1.0/node_modules/react-day-picker/dist/esm/helpers/getStyleForModifiers.es.js.map +1 -1
- package/dist/node_modules/.pnpm/react-day-picker@9.7.0_react@19.1.0/node_modules/react-day-picker/dist/esm/helpers/getWeekdays.es.js.map +1 -1
- package/dist/node_modules/.pnpm/react-day-picker@9.7.0_react@19.1.0/node_modules/react-day-picker/dist/esm/helpers/getYearOptions.es.js.map +1 -1
- package/dist/node_modules/.pnpm/react-day-picker@9.7.0_react@19.1.0/node_modules/react-day-picker/dist/esm/selection/useMulti.es.js.map +1 -1
- package/dist/node_modules/.pnpm/react-day-picker@9.7.0_react@19.1.0/node_modules/react-day-picker/dist/esm/selection/useRange.es.js.map +1 -1
- package/dist/node_modules/.pnpm/react-day-picker@9.7.0_react@19.1.0/node_modules/react-day-picker/dist/esm/selection/useSingle.es.js.map +1 -1
- package/dist/node_modules/.pnpm/react-day-picker@9.7.0_react@19.1.0/node_modules/react-day-picker/dist/esm/useAnimation.es.js.map +1 -1
- package/dist/node_modules/.pnpm/react-day-picker@9.7.0_react@19.1.0/node_modules/react-day-picker/dist/esm/useCalendar.es.js.map +1 -1
- package/dist/node_modules/.pnpm/react-day-picker@9.7.0_react@19.1.0/node_modules/react-day-picker/dist/esm/useFocus.es.js.map +1 -1
- package/dist/node_modules/.pnpm/react-day-picker@9.7.0_react@19.1.0/node_modules/react-day-picker/dist/esm/utils/addToRange.es.js.map +1 -1
- package/dist/node_modules/.pnpm/react-day-picker@9.7.0_react@19.1.0/node_modules/react-day-picker/dist/esm/utils/dateMatchModifiers.es.js.map +1 -1
- package/dist/node_modules/.pnpm/react-day-picker@9.7.0_react@19.1.0/node_modules/react-day-picker/dist/esm/utils/rangeContainsDayOfWeek.es.js.map +1 -1
- package/dist/node_modules/.pnpm/react-day-picker@9.7.0_react@19.1.0/node_modules/react-day-picker/dist/esm/utils/rangeContainsModifiers.es.js.map +1 -1
- package/dist/node_modules/.pnpm/react-remove-scroll-bar@2.3.8_@types_react@19.1.0_react@19.1.0/node_modules/react-remove-scroll-bar/dist/es2015/component.es.js.map +1 -1
- package/dist/node_modules/.pnpm/react-remove-scroll-bar@2.3.8_@types_react@19.1.0_react@19.1.0/node_modules/react-remove-scroll-bar/dist/es2015/utils.es.js.map +1 -1
- package/dist/node_modules/.pnpm/react-remove-scroll@2.7.1_@types_react@19.1.0_react@19.1.0/node_modules/react-remove-scroll/dist/es2015/Combination.es.js.map +1 -1
- package/dist/node_modules/.pnpm/react-remove-scroll@2.7.1_@types_react@19.1.0_react@19.1.0/node_modules/react-remove-scroll/dist/es2015/SideEffect.es.js.map +1 -1
- package/dist/node_modules/.pnpm/react-remove-scroll@2.7.1_@types_react@19.1.0_react@19.1.0/node_modules/react-remove-scroll/dist/es2015/aggresiveCapture.es.js.map +1 -1
- package/dist/node_modules/.pnpm/react-remove-scroll@2.7.1_@types_react@19.1.0_react@19.1.0/node_modules/react-remove-scroll/dist/es2015/handleScroll.es.js.map +1 -1
- package/dist/node_modules/.pnpm/react-style-singleton@2.2.3_@types_react@19.1.0_react@19.1.0/node_modules/react-style-singleton/dist/es2015/component.es.js.map +1 -1
- package/dist/node_modules/.pnpm/react-style-singleton@2.2.3_@types_react@19.1.0_react@19.1.0/node_modules/react-style-singleton/dist/es2015/hook.es.js.map +1 -1
- package/dist/node_modules/.pnpm/react-style-singleton@2.2.3_@types_react@19.1.0_react@19.1.0/node_modules/react-style-singleton/dist/es2015/singleton.es.js.map +1 -1
- package/dist/node_modules/.pnpm/tslib@2.8.1/node_modules/tslib/tslib.es6.es.js.map +1 -1
- package/dist/node_modules/.pnpm/use-callback-ref@1.3.3_@types_react@19.1.0_react@19.1.0/node_modules/use-callback-ref/dist/es2015/useMergeRef.es.js.map +1 -1
- package/dist/node_modules/.pnpm/use-callback-ref@1.3.3_@types_react@19.1.0_react@19.1.0/node_modules/use-callback-ref/dist/es2015/useRef.es.js.map +1 -1
- package/dist/node_modules/.pnpm/use-sidecar@1.1.3_@types_react@19.1.0_react@19.1.0/node_modules/use-sidecar/dist/es2015/medium.es.js.map +1 -1
- package/dist/utils/index.es.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"column-picker.es.js","sources":["../../../lib/components/data-table/column-picker.tsx"],"sourcesContent":["import {\n\tButton,\n\tDropdownMenu,\n\tDropdownMenuCheckboxItem,\n\tDropdownMenuContent,\n\tDropdownMenuGroup,\n\tDropdownMenuTrigger,\n\tgetResourceDisplayName,\n} from \"@/index\";\nimport type { Column } from \"@tanstack/react-table\";\nimport { Columns3 } from \"lucide-react\";\n\nexport function ColumnPicker({\n\ttoggleAllColumnsVisible,\n\tgetIsAllColumnsVisible,\n\tgetAllColumns,\n}: {\n\ttoggleAllColumnsVisible: () => void;\n\tgetIsAllColumnsVisible: () => boolean;\n\tgetAllColumns: () => Column<any, any>[];\n}) {\n\treturn (\n\t\t<DropdownMenu>\n\t\t\t<DropdownMenuTrigger asChild>\n\t\t\t\t<Button icon={() => Columns3} variant={\"outline\"}>\n\t\t\t\t\tColumns\n\t\t\t\t</Button>\n\t\t\t</DropdownMenuTrigger>\n\t\t\t<DropdownMenuContent>\n\t\t\t\t<DropdownMenuGroup>\n\t\t\t\t\t<DropdownMenuCheckboxItem\n\t\t\t\t\t\tclassName=\"italic\"\n\t\t\t\t\t\tonSelect={(e) => {\n\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\ttoggleAllColumnsVisible();\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tchecked={getIsAllColumnsVisible()}\n\t\t\t\t\t>\n\t\t\t\t\t\t(Select all)\n\t\t\t\t\t</DropdownMenuCheckboxItem>\n\t\t\t\t\t{getAllColumns().map((col) => (\n\t\t\t\t\t\t<DropdownMenuCheckboxItem\n\t\t\t\t\t\t\tonSelect={(e) => {\n\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t\tcol.toggleVisibility();\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\tkey={col.id}\n\t\t\t\t\t\t\tdisabled={!col.getCanHide()}\n\t\t\t\t\t\t\tchecked={col.getIsVisible()}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{col.getIsSorted()}{\" \"}\n\t\t\t\t\t\t\t{getResourceDisplayName(col.id, \"admin-portal\")}\n\t\t\t\t\t\t</DropdownMenuCheckboxItem>\n\t\t\t\t\t))}\n\t\t\t\t\t{/* TODO getResourceDisplayName needs some review here. */}\n\t\t\t\t</DropdownMenuGroup>\n\t\t\t</DropdownMenuContent>\n\t\t</DropdownMenu>\n\t);\n}\n"],"names":["ColumnPicker","toggleAllColumnsVisible","getIsAllColumnsVisible","getAllColumns","DropdownMenu","jsx","DropdownMenuTrigger","Button","Columns3","DropdownMenuContent","jsxs","DropdownMenuGroup","DropdownMenuCheckboxItem","col","e","getResourceDisplayName"],"mappings":";;;;;;;;AAYO,SAASA,EAAa;AAAA,EAC5B,yBAAAC;AAAA,EACA,wBAAAC;AAAA,EACA,eAAAC;AACD,GAIG;AACF,2BACEC,GAAA,EACA,UAAA;AAAA,IAAA,gBAAAC,EAACC,GAAA,EAAoB,SAAO,IAC3B,UAAA,gBAAAD,EAACE,GAAA,EAAO,MAAM,MAAMC,GAAU,SAAS,WAAW,UAAA,UAAA,CAElD,GACD;AAAA,IACA,gBAAAH,EAACI,GAAA,EACA,UAAA,gBAAAC,EAACC,GAAA,EACA,UAAA;AAAA,MAAA,gBAAAN;AAAA,QAACO;AAAA,QAAA;AAAA,UACA,WAAU;AAAA,UACV,UAAU,CAAC,MAAM;AAChB,cAAE,eAAA,GACFX,EAAA;AAAA,
|
|
1
|
+
{"version":3,"file":"column-picker.es.js","sources":["../../../lib/components/data-table/column-picker.tsx"],"sourcesContent":["import {\n\tButton,\n\tDropdownMenu,\n\tDropdownMenuCheckboxItem,\n\tDropdownMenuContent,\n\tDropdownMenuGroup,\n\tDropdownMenuTrigger,\n\tgetResourceDisplayName,\n} from \"@/index\";\nimport type { Column } from \"@tanstack/react-table\";\nimport { Columns3 } from \"lucide-react\";\n\nexport function ColumnPicker({\n\ttoggleAllColumnsVisible,\n\tgetIsAllColumnsVisible,\n\tgetAllColumns,\n}: {\n\ttoggleAllColumnsVisible: () => void;\n\tgetIsAllColumnsVisible: () => boolean;\n\tgetAllColumns: () => Column<any, any>[];\n}) {\n\treturn (\n\t\t<DropdownMenu>\n\t\t\t<DropdownMenuTrigger asChild>\n\t\t\t\t<Button icon={() => Columns3} variant={\"outline\"}>\n\t\t\t\t\tColumns\n\t\t\t\t</Button>\n\t\t\t</DropdownMenuTrigger>\n\t\t\t<DropdownMenuContent>\n\t\t\t\t<DropdownMenuGroup>\n\t\t\t\t\t<DropdownMenuCheckboxItem\n\t\t\t\t\t\tclassName=\"italic\"\n\t\t\t\t\t\tonSelect={(e) => {\n\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\ttoggleAllColumnsVisible();\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tchecked={getIsAllColumnsVisible()}\n\t\t\t\t\t>\n\t\t\t\t\t\t(Select all)\n\t\t\t\t\t</DropdownMenuCheckboxItem>\n\t\t\t\t\t{getAllColumns().map((col) => (\n\t\t\t\t\t\t<DropdownMenuCheckboxItem\n\t\t\t\t\t\t\tonSelect={(e) => {\n\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t\tcol.toggleVisibility();\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\tkey={col.id}\n\t\t\t\t\t\t\tdisabled={!col.getCanHide()}\n\t\t\t\t\t\t\tchecked={col.getIsVisible()}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{col.getIsSorted()}{\" \"}\n\t\t\t\t\t\t\t{getResourceDisplayName(col.id, \"admin-portal\")}\n\t\t\t\t\t\t</DropdownMenuCheckboxItem>\n\t\t\t\t\t))}\n\t\t\t\t\t{/* TODO getResourceDisplayName needs some review here. */}\n\t\t\t\t</DropdownMenuGroup>\n\t\t\t</DropdownMenuContent>\n\t\t</DropdownMenu>\n\t);\n}\n"],"names":["ColumnPicker","toggleAllColumnsVisible","getIsAllColumnsVisible","getAllColumns","DropdownMenu","jsx","DropdownMenuTrigger","Button","Columns3","DropdownMenuContent","jsxs","DropdownMenuGroup","DropdownMenuCheckboxItem","col","e","getResourceDisplayName"],"mappings":";;;;;;;;AAYO,SAASA,EAAa;AAAA,EAC5B,yBAAAC;AAAA,EACA,wBAAAC;AAAA,EACA,eAAAC;AACD,GAIG;AACF,2BACEC,GAAA,EACA,UAAA;AAAA,IAAA,gBAAAC,EAACC,GAAA,EAAoB,SAAO,IAC3B,UAAA,gBAAAD,EAACE,GAAA,EAAO,MAAM,MAAMC,GAAU,SAAS,WAAW,UAAA,UAAA,CAElD,GACD;AAAA,IACA,gBAAAH,EAACI,GAAA,EACA,UAAA,gBAAAC,EAACC,GAAA,EACA,UAAA;AAAA,MAAA,gBAAAN;AAAA,QAACO;AAAA,QAAA;AAAA,UACA,WAAU;AAAA,UACV,UAAU,CAAC,MAAM;AAChB,cAAE,eAAA,GACFX,EAAA;AAAA,UACD;AAAA,UACA,SAASC,EAAA;AAAA,UACT,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,MAGAC,IAAgB,IAAI,CAACU,MACrB,gBAAAH;AAAA,QAACE;AAAA,QAAA;AAAA,UACA,UAAU,CAACE,MAAM;AAChB,YAAAA,EAAE,eAAA,GACFD,EAAI,iBAAA;AAAA,UACL;AAAA,UAEA,UAAU,CAACA,EAAI,WAAA;AAAA,UACf,SAASA,EAAI,aAAA;AAAA,UAEZ,UAAA;AAAA,YAAAA,EAAI,YAAA;AAAA,YAAe;AAAA,YACnBE,EAAuBF,EAAI,IAAI,cAAc;AAAA,UAAA;AAAA,QAAA;AAAA,QALzCA,EAAI;AAAA,MAAA,CAOV;AAAA,IAAA,EAAA,CAEF,EAAA,CACD;AAAA,EAAA,GACD;AAEF;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data-table.es.js","sources":["../../../lib/components/data-table/data-table.tsx"],"sourcesContent":["\"use client\";\n// import { TableFilter, type FilterFormType } from '@/components/data-table/table-filter';\nimport {\n\tcn,\n\tLoader,\n\tTABLE_CHECK_BOX_COLUMN,\n\tTABLE_DEFAULT_DATE_COLUMNS,\n\tTABLE_ID_COLUMN\n} from \"@/index\";\nimport { keepPreviousData, useQuery } from \"@tanstack/react-query\";\nimport {\n\ttype ColumnDef,\n\tgetCoreRowModel,\n\ttype TableOptions,\n\ttype TableState,\n\ttype Updater,\n\tuseReactTable,\n\ttype VisibilityState\n} from \"@tanstack/react-table\";\nimport { Info } from \"lucide-react\";\nimport React, { useEffect, useId, useMemo, useState } from \"react\";\nimport { ColumnPicker } from \"./column-picker\";\nimport { PageSize } from \"./page-size\";\nimport { Paginator } from \"./paginator\";\nimport Actions from \"./table-actions\";\nimport { TableContent } from \"./table-content\";\nimport type { TableActions, TableFetchFn } from \"./table-utils\";\n\n/** Reserved name for actions column */\nexport const ACTIONS_COLUMN_ID = \"Actions\";\n\n// Props type for the DataTable component\n\nexport type DataTableState = Pick<TableState, 'sorting' | 'columnFilters' | 'columnVisibility' | 'rowSelection' | 'pagination'> & { search: string };\nexport interface DataTableProps<TData> extends Pick<TableOptions<TData>, 'columns'>, React.ComponentProps<'section'> {\n\tfetchFn: TableFetchFn<TData>;\n\ttableActions: TableActions;\n\tallowSelection?: boolean;\n\tcolumnsToHideByDefault?: VisibilityState; // Columns that are hidden by default\n}\nexport function DataTable<TData extends object>({\n\tcolumns,\n\tfetchFn,\n\ttableActions,\n\tcolumnsToHideByDefault = {},\n\tallowSelection = false,\n\tclassName,\n\t...props\n\t// filterableFields,\n}: DataTableProps<TData>) {\n\t// State for managing table data and filters\n\tconst id = useId();\n\n\t//TODO: This is later to be stored in url as params\n\tconst [tableState, _setTableState] = useState<DataTableState>({\n\t\tsorting: [], // Sorting state\n\t\tcolumnFilters: [], // Filters for columns, not to be confused with the filters that get sent to the Web API.\n\t\tsearch: \"\", // Search query state\n\t\tcolumnVisibility: {}, // Visibility of columns\n\t\trowSelection: {}, // Row selection state\n\t\tpagination: { pageIndex: 0, pageSize: 20 }, // Pagination state\n\t});\n\n\t// Update table state with new values\n\tconst updateTableState = (updates: Partial<DataTableState>) => {\n\t\t_setTableState((prev) => ({ ...prev, ...updates }));\n\t};\n\n\t// Destructuring the table state for easier access\n\tconst {\n\t\tsorting,\n\t\tcolumnFilters,\n\t\tsearch,\n\t\tcolumnVisibility,\n\t\trowSelection,\n\t\tpagination,\n\t} = tableState;\n\n\t// TODO\n\t// Debounce the search query to avoid making a request on every keystroke\n\t// const [debouncedQuery] = useDebounce(searching.trim(), 300);\n\n\t// Update column visibility when columnsToHideByDefault changes\n\tuseEffect(() => {\n\t\tupdateTableState({\n\t\t\tcolumnVisibility: {\n\t\t\t\tid: false,\n\t\t\t\tupdatedAt: false,\n\t\t\t\t...columnsToHideByDefault,\n\t\t\t},\n\t\t});\n\t}, [columnsToHideByDefault]);\n\n\t// TODO, implement filters\n\t// const [filters, setFilters] = useState<FilterFormType[]>([]);\n\t// const formatedFilters = useMemo(() => {\n\t// return filters.reduce((acc, filter) => {\n\t// const { property, value, operator } = filter;\n\t// if (!acc[property]) {\n\t// acc[property] = {};\n\t// }\n\t// acc[property][operator] = value;\n\t// return acc;\n\t// }, {} as Record<string, Record<string, any>>);\n\t// }, [filters]);\n\n\t// Fetch table data using the fetchFn and react-query's useQuery hook\n\tconst query = useQuery({\n\t\tqueryKey: [id, pagination, sorting, search.trim()],\n\t\tqueryFn: () => fetchFn(pagination, sorting, search.trim()),\n\t\tplaceholderData: keepPreviousData, // Keep previous data while loading new data\n\t\tretry: 0,\n\t\trefetchOnWindowFocus: false,\n\t});\n\n\n\t// TODO Memoizing here seems wasteful\n\t// TODO is createColumnHelper an expensive operation?\n\t// const columnHelper = createColumnHelper<TData>();\n\t// const metadataColumns = useMemo<ColumnDef<TData>[]>(() => {\n\t// \tconst data = query.data?.data;\n\t// \tif (!data?.length) return [];\n\t// \t// set of all the keys present in a given view\n\t// \tconst allMetadataKeys = new Set<string>();\n\n\t// \t// Collect all unique metadata keys\n\t// \tdata.forEach((row: TData) => {\n\t// \t\tif ('metadata' in row && row.metadata && Array.isArray(row.metadata)) {\n\t// \t\t\trow.metadata.forEach((meta: MetadataDto) => {\n\t// \t\t\t\tallMetadataKeys.add(meta.key);\n\t// \t\t\t});\n\t// \t\t}\n\t// \t});\n\n\t// \t// Generate columns for all unique metadata keys\n\t// \treturn Array.from(allMetadataKeys).map((key) =>\n\t// \t\tcolumnHelper.accessor(\n\t// \t\t\t(row: TData) => {\n\t// \t\t\t\t// Find the metadata object with the matching key\n\t// \t\t\t\tconst metadataEntry = row.metadata?.find(\n\t// \t\t\t\t\t(meta: MetadataDto) => meta.key === key,\n\t// \t\t\t\t);\n\t// \t\t\t\treturn metadataEntry?.value; // Return the value for the specific key\n\t// \t\t\t},\n\t// \t\t\t{\n\t// \t\t\t\theader: () => (\n\t// \t\t\t\t\t<TooltipProvider delayDuration={0}>\n\t// \t\t\t\t\t\t<Tooltip>\n\t// \t\t\t\t\t\t\t<TooltipTrigger asChild>\n\t// \t\t\t\t\t\t\t\t<span className=\"flex gap-1 items-center align-middle\">\n\t// \t\t\t\t\t\t\t\t\t{key} <Info size={18} strokeWidth={\"1px\"} />\n\t// \t\t\t\t\t\t\t\t</span>\n\t// \t\t\t\t\t\t\t</TooltipTrigger>\n\t// \t\t\t\t\t\t\t<TooltipContent>Metadata Key</TooltipContent>\n\t// \t\t\t\t\t\t</Tooltip>\n\t// \t\t\t\t\t</TooltipProvider>\n\t// \t\t\t\t), // Use the metadata key as the column header\n\t// \t\t\t\tid: key,\n\t// \t\t\t\tenableSorting: false,\n\t// \t\t\t\tcell: (info) => {\n\t// \t\t\t\t\tconst value = info.getValue();\n\t// \t\t\t\t\t// Handle null/undefined values\n\t// \t\t\t\t\tif (value === null || value === undefined) return \"\";\n\t// \t\t\t\t\t// For primitive types, return the string representation\n\t// \t\t\t\t\treturn String(value);\n\t// \t\t\t\t},\n\t// \t\t\t},\n\t// \t\t),\n\t// \t);\n\t// }, [query.data?.data]);\n\n\t/**\n\t * ID,createdAt and updatedAt will be added by default for all tables\n\t * If selection is allowed, checkbox will be added\n\t * If the dto has metadata, dynamics columns for all the metadata key-value will be added(particular for a view)\n\t * If there are actions for the table, they will be placed fixed at the right side of table.\n\t */\n\tconst extendedColumns = useMemo<ColumnDef<any, any>[]>(() => {\n\t\tconst _columns = [\n\t\t\t...(allowSelection ? TABLE_CHECK_BOX_COLUMN : []),\n\t\t\t...TABLE_ID_COLUMN,\n\t\t\t...columns.filter((col) => col.id !== ACTIONS_COLUMN_ID),\n\t\t\t// ...(metadataColumns.length ? metadataColumns : []),\n\t\t\t...TABLE_DEFAULT_DATE_COLUMNS,\n\t\t\t...columns.filter((col) => col.id === ACTIONS_COLUMN_ID),\n\t\t];\n\n\t\treturn _columns;\n\t}, [columns, query.data?.data, allowSelection]);\n\n\t// Type-guard for updater\n\tfunction isUpdaterFunction<T>(updater: Updater<T>): updater is (old: T) => T {\n\t\treturn typeof updater === \"function\";\n\t}\n\t// Utility function to resolve updater\n\tfunction resolveUpdater<T>(updater: Updater<T>, currentValue: T) {\n\t\tif (isUpdaterFunction(updater)) {\n\t\t\treturn updater(currentValue);\n\t\t}\n\t\treturn updater;\n\t}\n\n\t// Use react-table's hook to create the table instance\n\tconst table = useReactTable({\n\t\tdata: query.data?.data ?? [],\n\t\tcolumns: extendedColumns,\n\t\tgetCoreRowModel: getCoreRowModel(),\n\t\trowCount: query.data?.total,\n\t\tmanualPagination: true, // Handle pagination manually since pagination is done server side for data tables\n\t\tonPaginationChange: (updater) => {\n\t\t\tupdateTableState({ pagination: resolveUpdater(updater, pagination) });\n\t\t},\n\t\tmanualSorting: true, // Handle sorting manually since sorting is done server side for data tables\n\t\tonSortingChange: (updater) => {\n\t\t\tupdateTableState({ sorting: resolveUpdater(updater, sorting), rowSelection: {} }); // Reset selection when sorting.\n\t\t},\n\t\tmanualFiltering: true, // Handle filtering manually since filtering is done server side for data tables\n\t\tonGlobalFilterChange: (updater) => {\n\t\t\tupdateTableState({ columnFilters: resolveUpdater(updater, columnFilters) });\n\t\t},\n\t\tonColumnVisibilityChange: (updater) => {\n\t\t\tupdateTableState({ columnVisibility: resolveUpdater(updater, columnVisibility) });\n\t\t},\n\t\tonRowSelectionChange: (updater) => {\n\t\t\tupdateTableState({ rowSelection: resolveUpdater(updater, rowSelection) });\n\t\t},\n\t\tstate: {\n\t\t\tsorting: sorting,\n\t\t\tcolumnFilters: columnFilters,\n\t\t\tcolumnVisibility: columnVisibility,\n\t\t\tpagination: pagination,\n\t\t\trowSelection: rowSelection,\n\t\t},\n\t\tmeta: {\n\t\t\trefetch: query.refetch,\n\t\t},\n\t});\n\n\treturn (\n\t\t<>\n\t\t\t{/* TODO, explore filtering component being outside the data-table, fine-grained theming would be nice here */}\n\t\t\t{/* Also, the data-table is a huuuuuge component, it would be nice to have it broken into pieces a little */}\n\t\t\t{/* ContextAPI???? */}\n\n\t\t\t{/* <TableFilter\n filterableProperties={{ ...filterableFields, ...DEFAULT_FILTERABLE_FIELDS }}\n filters={filters}\n onFiltersChange={setFilters}\n /> */}\n\n\t\t\t{/* Table Actions Section */}\n\t\t\t<section {...props} className={cn(\"flex flex-col bg-card\", className)}>\n\t\t\t\t<Actions\n\t\t\t\t\tdataQuery={query}\n\t\t\t\t\tgetSelectedRowModel={table.getSelectedRowModel}\n\t\t\t\t\ttableActions={tableActions}\n\t\t\t\t\thandleSearching={(value) => updateTableState({ search: value })}\n\t\t\t\t/>\n\n\t\t\t\t{/* The div here is necessary because TableContent is internally a <table> tag and does not respect width, height CSS */}\n\t\t\t\t<div className=\"w-full overflow-auto border-x grow min-h-table relative\" tabIndex={0}>\n\t\t\t\t\t{/* Table overlay with loader */}\n\t\t\t\t\t{query.isLoading && (\n\t\t\t\t\t\t<TableOverlay className=\"cursor-wait\">\n\t\t\t\t\t\t\t<Loader />\n\t\t\t\t\t\t</TableOverlay>\n\t\t\t\t\t)}\n\t\t\t\t\t{/* Table overlay for empty table */}\n\t\t\t\t\t{!query.isLoading && table.getRowModel().rows.length === 0 && (\n\t\t\t\t\t\t// Empty table\n\t\t\t\t\t\t<TableOverlay className=\"cursor-not-allowed\">\n\t\t\t\t\t\t\t{!query.isFetching &&\n\t\t\t\t\t\t\t\t(query.isError ? (\n\t\t\t\t\t\t\t\t\t<span className=\"flex gap-3 justify-center items-center\">\n\t\t\t\t\t\t\t\t\t\t{/* TODO Check for 403 explicitly!! */}\n\t\t\t\t\t\t\t\t\t\t{/* <span>{query.error}</span> */}\n\t\t\t\t\t\t\t\t\t\t<Info />\n\t\t\t\t\t\t\t\t\t\t<span>\n\t\t\t\t\t\t\t\t\t\t\tYou don't have the required permissions. Please contact your\n\t\t\t\t\t\t\t\t\t\t\tadmin.\n\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t) : !query.data?.data ? (\n\t\t\t\t\t\t\t\t\t<>No results found.</>\n\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t<>Unknown error. Please contact customer support.</>\n\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t</TableOverlay>\n\t\t\t\t\t)}\n\t\t\t\t\t{!query.isLoading && table.getRowModel().rows.length !== 0 &&\n\t\t\t\t\t\t<TableContent\n\t\t\t\t\t\t\tclassName=\"size-full\"\n\t\t\t\t\t\t\tgetRowModel={table.getRowModel}\n\t\t\t\t\t\t\tgetHeaderGroups={table.getHeaderGroups}\n\t\t\t\t\t\t/>}\n\t\t\t\t</div>\n\n\t\t\t\t{/* Table Footer Section with Pagination and Column Picker */}\n\t\t\t\t<div className=\"flex w-full justify-between border gap-4 p-4 overflow-x-auto\">\n\t\t\t\t\t<div className=\"flex gap-4\">\n\t\t\t\t\t\t<ColumnPicker\n\t\t\t\t\t\t\tgetAllColumns={table.getAllColumns}\n\t\t\t\t\t\t\tgetIsAllColumnsVisible={table.getIsAllColumnsVisible}\n\t\t\t\t\t\t\ttoggleAllColumnsVisible={table.toggleAllColumnsVisible}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<PageSize\n\t\t\t\t\t\t\tsize={table.getState().pagination.pageSize}\n\t\t\t\t\t\t\tonSelect={table.setPageSize}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\t\t\t\t\t<Paginator\n\t\t\t\t\t\tfirstPage={table.firstPage}\n\t\t\t\t\t\tpreviousPage={table.previousPage}\n\t\t\t\t\t\tgetCanNextPage={table.getCanNextPage}\n\t\t\t\t\t\tgetCanPreviousPage={table.getCanPreviousPage}\n\t\t\t\t\t\tlastPage={table.lastPage}\n\t\t\t\t\t\tnextPage={table.nextPage}\n\t\t\t\t\t\tgetState={table.getState}\n\t\t\t\t\t\trowCount={query.data?.total ?? 0}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t</section>\n\t\t</>\n\t);\n}\n\nfunction TableOverlay({\n\tchildren,\n\tclassName,\n}: { children: React.ReactNode; className?: string }) {\n\treturn (\n\t\t<>\n\t\t\t<span\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"absolute top-0 bg-card z-20 size-full flex items-center justify-center\",\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t{children}\n\t\t\t</span>\n\t\t\t{/* Keep something in document flow with the correct height */}\n\t\t\t<span className=\"relative h-full w-0 block\" />\n\t\t</>\n\t);\n}\n"],"names":["ACTIONS_COLUMN_ID","DataTable","columns","fetchFn","tableActions","columnsToHideByDefault","allowSelection","className","props","id","useId","tableState","_setTableState","useState","updateTableState","updates","prev","sorting","columnFilters","search","columnVisibility","rowSelection","pagination","useEffect","query","useQuery","keepPreviousData","extendedColumns","useMemo","TABLE_CHECK_BOX_COLUMN","TABLE_ID_COLUMN","col","TABLE_DEFAULT_DATE_COLUMNS","_a","isUpdaterFunction","updater","resolveUpdater","currentValue","table","useReactTable","_b","getCoreRowModel","_c","jsx","Fragment","cn","Actions","value","jsxs","TableOverlay","Loader","Info","_d","TableContent","ColumnPicker","PageSize","Paginator","_e","children"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"data-table.es.js","sources":["../../../lib/components/data-table/data-table.tsx"],"sourcesContent":["\"use client\";\n// import { TableFilter, type FilterFormType } from '@/components/data-table/table-filter';\nimport {\n\tcn,\n\tLoader,\n\tTABLE_CHECK_BOX_COLUMN,\n\tTABLE_DEFAULT_DATE_COLUMNS,\n\tTABLE_ID_COLUMN\n} from \"@/index\";\nimport { keepPreviousData, useQuery } from \"@tanstack/react-query\";\nimport {\n\ttype ColumnDef,\n\tgetCoreRowModel,\n\ttype TableOptions,\n\ttype TableState,\n\ttype Updater,\n\tuseReactTable,\n\ttype VisibilityState\n} from \"@tanstack/react-table\";\nimport { Info } from \"lucide-react\";\nimport React, { useEffect, useId, useMemo, useState } from \"react\";\nimport { ColumnPicker } from \"./column-picker\";\nimport { PageSize } from \"./page-size\";\nimport { Paginator } from \"./paginator\";\nimport Actions from \"./table-actions\";\nimport { TableContent } from \"./table-content\";\nimport type { TableActions, TableFetchFn } from \"./table-utils\";\n\n/** Reserved name for actions column */\nexport const ACTIONS_COLUMN_ID = \"Actions\";\n\n// Props type for the DataTable component\n\nexport type DataTableState = Pick<TableState, 'sorting' | 'columnFilters' | 'columnVisibility' | 'rowSelection' | 'pagination'> & { search: string };\nexport interface DataTableProps<TData> extends Pick<TableOptions<TData>, 'columns'>, React.ComponentProps<'section'> {\n\tfetchFn: TableFetchFn<TData>;\n\ttableActions: TableActions;\n\tallowSelection?: boolean;\n\tcolumnsToHideByDefault?: VisibilityState; // Columns that are hidden by default\n}\nexport function DataTable<TData extends object>({\n\tcolumns,\n\tfetchFn,\n\ttableActions,\n\tcolumnsToHideByDefault = {},\n\tallowSelection = false,\n\tclassName,\n\t...props\n\t// filterableFields,\n}: DataTableProps<TData>) {\n\t// State for managing table data and filters\n\tconst id = useId();\n\n\t//TODO: This is later to be stored in url as params\n\tconst [tableState, _setTableState] = useState<DataTableState>({\n\t\tsorting: [], // Sorting state\n\t\tcolumnFilters: [], // Filters for columns, not to be confused with the filters that get sent to the Web API.\n\t\tsearch: \"\", // Search query state\n\t\tcolumnVisibility: {}, // Visibility of columns\n\t\trowSelection: {}, // Row selection state\n\t\tpagination: { pageIndex: 0, pageSize: 20 }, // Pagination state\n\t});\n\n\t// Update table state with new values\n\tconst updateTableState = (updates: Partial<DataTableState>) => {\n\t\t_setTableState((prev) => ({ ...prev, ...updates }));\n\t};\n\n\t// Destructuring the table state for easier access\n\tconst {\n\t\tsorting,\n\t\tcolumnFilters,\n\t\tsearch,\n\t\tcolumnVisibility,\n\t\trowSelection,\n\t\tpagination,\n\t} = tableState;\n\n\t// TODO\n\t// Debounce the search query to avoid making a request on every keystroke\n\t// const [debouncedQuery] = useDebounce(searching.trim(), 300);\n\n\t// Update column visibility when columnsToHideByDefault changes\n\tuseEffect(() => {\n\t\tupdateTableState({\n\t\t\tcolumnVisibility: {\n\t\t\t\tid: false,\n\t\t\t\tupdatedAt: false,\n\t\t\t\t...columnsToHideByDefault,\n\t\t\t},\n\t\t});\n\t}, [columnsToHideByDefault]);\n\n\t// TODO, implement filters\n\t// const [filters, setFilters] = useState<FilterFormType[]>([]);\n\t// const formatedFilters = useMemo(() => {\n\t// return filters.reduce((acc, filter) => {\n\t// const { property, value, operator } = filter;\n\t// if (!acc[property]) {\n\t// acc[property] = {};\n\t// }\n\t// acc[property][operator] = value;\n\t// return acc;\n\t// }, {} as Record<string, Record<string, any>>);\n\t// }, [filters]);\n\n\t// Fetch table data using the fetchFn and react-query's useQuery hook\n\tconst query = useQuery({\n\t\tqueryKey: [id, pagination, sorting, search.trim()],\n\t\tqueryFn: () => fetchFn(pagination, sorting, search.trim()),\n\t\tplaceholderData: keepPreviousData, // Keep previous data while loading new data\n\t\tretry: 0,\n\t\trefetchOnWindowFocus: false,\n\t});\n\n\n\t// TODO Memoizing here seems wasteful\n\t// TODO is createColumnHelper an expensive operation?\n\t// const columnHelper = createColumnHelper<TData>();\n\t// const metadataColumns = useMemo<ColumnDef<TData>[]>(() => {\n\t// \tconst data = query.data?.data;\n\t// \tif (!data?.length) return [];\n\t// \t// set of all the keys present in a given view\n\t// \tconst allMetadataKeys = new Set<string>();\n\n\t// \t// Collect all unique metadata keys\n\t// \tdata.forEach((row: TData) => {\n\t// \t\tif ('metadata' in row && row.metadata && Array.isArray(row.metadata)) {\n\t// \t\t\trow.metadata.forEach((meta: MetadataDto) => {\n\t// \t\t\t\tallMetadataKeys.add(meta.key);\n\t// \t\t\t});\n\t// \t\t}\n\t// \t});\n\n\t// \t// Generate columns for all unique metadata keys\n\t// \treturn Array.from(allMetadataKeys).map((key) =>\n\t// \t\tcolumnHelper.accessor(\n\t// \t\t\t(row: TData) => {\n\t// \t\t\t\t// Find the metadata object with the matching key\n\t// \t\t\t\tconst metadataEntry = row.metadata?.find(\n\t// \t\t\t\t\t(meta: MetadataDto) => meta.key === key,\n\t// \t\t\t\t);\n\t// \t\t\t\treturn metadataEntry?.value; // Return the value for the specific key\n\t// \t\t\t},\n\t// \t\t\t{\n\t// \t\t\t\theader: () => (\n\t// \t\t\t\t\t<TooltipProvider delayDuration={0}>\n\t// \t\t\t\t\t\t<Tooltip>\n\t// \t\t\t\t\t\t\t<TooltipTrigger asChild>\n\t// \t\t\t\t\t\t\t\t<span className=\"flex gap-1 items-center align-middle\">\n\t// \t\t\t\t\t\t\t\t\t{key} <Info size={18} strokeWidth={\"1px\"} />\n\t// \t\t\t\t\t\t\t\t</span>\n\t// \t\t\t\t\t\t\t</TooltipTrigger>\n\t// \t\t\t\t\t\t\t<TooltipContent>Metadata Key</TooltipContent>\n\t// \t\t\t\t\t\t</Tooltip>\n\t// \t\t\t\t\t</TooltipProvider>\n\t// \t\t\t\t), // Use the metadata key as the column header\n\t// \t\t\t\tid: key,\n\t// \t\t\t\tenableSorting: false,\n\t// \t\t\t\tcell: (info) => {\n\t// \t\t\t\t\tconst value = info.getValue();\n\t// \t\t\t\t\t// Handle null/undefined values\n\t// \t\t\t\t\tif (value === null || value === undefined) return \"\";\n\t// \t\t\t\t\t// For primitive types, return the string representation\n\t// \t\t\t\t\treturn String(value);\n\t// \t\t\t\t},\n\t// \t\t\t},\n\t// \t\t),\n\t// \t);\n\t// }, [query.data?.data]);\n\n\t/**\n\t * ID,createdAt and updatedAt will be added by default for all tables\n\t * If selection is allowed, checkbox will be added\n\t * If the dto has metadata, dynamics columns for all the metadata key-value will be added(particular for a view)\n\t * If there are actions for the table, they will be placed fixed at the right side of table.\n\t */\n\tconst extendedColumns = useMemo<ColumnDef<any, any>[]>(() => {\n\t\tconst _columns = [\n\t\t\t...(allowSelection ? TABLE_CHECK_BOX_COLUMN : []),\n\t\t\t...TABLE_ID_COLUMN,\n\t\t\t...columns.filter((col) => col.id !== ACTIONS_COLUMN_ID),\n\t\t\t// ...(metadataColumns.length ? metadataColumns : []),\n\t\t\t...TABLE_DEFAULT_DATE_COLUMNS,\n\t\t\t...columns.filter((col) => col.id === ACTIONS_COLUMN_ID),\n\t\t];\n\n\t\treturn _columns;\n\t}, [columns, query.data?.data, allowSelection]);\n\n\t// Type-guard for updater\n\tfunction isUpdaterFunction<T>(updater: Updater<T>): updater is (old: T) => T {\n\t\treturn typeof updater === \"function\";\n\t}\n\t// Utility function to resolve updater\n\tfunction resolveUpdater<T>(updater: Updater<T>, currentValue: T) {\n\t\tif (isUpdaterFunction(updater)) {\n\t\t\treturn updater(currentValue);\n\t\t}\n\t\treturn updater;\n\t}\n\n\t// Use react-table's hook to create the table instance\n\tconst table = useReactTable({\n\t\tdata: query.data?.data ?? [],\n\t\tcolumns: extendedColumns,\n\t\tgetCoreRowModel: getCoreRowModel(),\n\t\trowCount: query.data?.total,\n\t\tmanualPagination: true, // Handle pagination manually since pagination is done server side for data tables\n\t\tonPaginationChange: (updater) => {\n\t\t\tupdateTableState({ pagination: resolveUpdater(updater, pagination) });\n\t\t},\n\t\tmanualSorting: true, // Handle sorting manually since sorting is done server side for data tables\n\t\tonSortingChange: (updater) => {\n\t\t\tupdateTableState({ sorting: resolveUpdater(updater, sorting), rowSelection: {} }); // Reset selection when sorting.\n\t\t},\n\t\tmanualFiltering: true, // Handle filtering manually since filtering is done server side for data tables\n\t\tonGlobalFilterChange: (updater) => {\n\t\t\tupdateTableState({ columnFilters: resolveUpdater(updater, columnFilters) });\n\t\t},\n\t\tonColumnVisibilityChange: (updater) => {\n\t\t\tupdateTableState({ columnVisibility: resolveUpdater(updater, columnVisibility) });\n\t\t},\n\t\tonRowSelectionChange: (updater) => {\n\t\t\tupdateTableState({ rowSelection: resolveUpdater(updater, rowSelection) });\n\t\t},\n\t\tstate: {\n\t\t\tsorting: sorting,\n\t\t\tcolumnFilters: columnFilters,\n\t\t\tcolumnVisibility: columnVisibility,\n\t\t\tpagination: pagination,\n\t\t\trowSelection: rowSelection,\n\t\t},\n\t\tmeta: {\n\t\t\trefetch: query.refetch,\n\t\t},\n\t});\n\n\treturn (\n\t\t<>\n\t\t\t{/* TODO, explore filtering component being outside the data-table, fine-grained theming would be nice here */}\n\t\t\t{/* Also, the data-table is a huuuuuge component, it would be nice to have it broken into pieces a little */}\n\t\t\t{/* ContextAPI???? */}\n\n\t\t\t{/* <TableFilter\n filterableProperties={{ ...filterableFields, ...DEFAULT_FILTERABLE_FIELDS }}\n filters={filters}\n onFiltersChange={setFilters}\n /> */}\n\n\t\t\t{/* Table Actions Section */}\n\t\t\t<section {...props} className={cn(\"flex flex-col bg-card\", className)}>\n\t\t\t\t<Actions\n\t\t\t\t\tdataQuery={query}\n\t\t\t\t\tgetSelectedRowModel={table.getSelectedRowModel}\n\t\t\t\t\ttableActions={tableActions}\n\t\t\t\t\thandleSearching={(value) => updateTableState({ search: value })}\n\t\t\t\t/>\n\n\t\t\t\t{/* The div here is necessary because TableContent is internally a <table> tag and does not respect width, height CSS */}\n\t\t\t\t<div className=\"w-full overflow-auto border-x grow min-h-table relative\" tabIndex={0}>\n\t\t\t\t\t{/* Table overlay with loader */}\n\t\t\t\t\t{query.isLoading && (\n\t\t\t\t\t\t<TableOverlay className=\"cursor-wait\">\n\t\t\t\t\t\t\t<Loader />\n\t\t\t\t\t\t</TableOverlay>\n\t\t\t\t\t)}\n\t\t\t\t\t{/* Table overlay for empty table */}\n\t\t\t\t\t{!query.isLoading && table.getRowModel().rows.length === 0 && (\n\t\t\t\t\t\t// Empty table\n\t\t\t\t\t\t<TableOverlay className=\"cursor-not-allowed\">\n\t\t\t\t\t\t\t{!query.isFetching &&\n\t\t\t\t\t\t\t\t(query.isError ? (\n\t\t\t\t\t\t\t\t\t<span className=\"flex gap-3 justify-center items-center\">\n\t\t\t\t\t\t\t\t\t\t{/* TODO Check for 403 explicitly!! */}\n\t\t\t\t\t\t\t\t\t\t{/* <span>{query.error}</span> */}\n\t\t\t\t\t\t\t\t\t\t<Info />\n\t\t\t\t\t\t\t\t\t\t<span>\n\t\t\t\t\t\t\t\t\t\t\tYou don't have the required permissions. Please contact your\n\t\t\t\t\t\t\t\t\t\t\tadmin.\n\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t) : !query.data?.data ? (\n\t\t\t\t\t\t\t\t\t<>No results found.</>\n\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t<>Unknown error. Please contact customer support.</>\n\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t</TableOverlay>\n\t\t\t\t\t)}\n\t\t\t\t\t{!query.isLoading && table.getRowModel().rows.length !== 0 &&\n\t\t\t\t\t\t<TableContent\n\t\t\t\t\t\t\tclassName=\"size-full\"\n\t\t\t\t\t\t\tgetRowModel={table.getRowModel}\n\t\t\t\t\t\t\tgetHeaderGroups={table.getHeaderGroups}\n\t\t\t\t\t\t/>}\n\t\t\t\t</div>\n\n\t\t\t\t{/* Table Footer Section with Pagination and Column Picker */}\n\t\t\t\t<div className=\"flex w-full justify-between border gap-4 p-4 overflow-x-auto\">\n\t\t\t\t\t<div className=\"flex gap-4\">\n\t\t\t\t\t\t<ColumnPicker\n\t\t\t\t\t\t\tgetAllColumns={table.getAllColumns}\n\t\t\t\t\t\t\tgetIsAllColumnsVisible={table.getIsAllColumnsVisible}\n\t\t\t\t\t\t\ttoggleAllColumnsVisible={table.toggleAllColumnsVisible}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<PageSize\n\t\t\t\t\t\t\tsize={table.getState().pagination.pageSize}\n\t\t\t\t\t\t\tonSelect={table.setPageSize}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\t\t\t\t\t<Paginator\n\t\t\t\t\t\tfirstPage={table.firstPage}\n\t\t\t\t\t\tpreviousPage={table.previousPage}\n\t\t\t\t\t\tgetCanNextPage={table.getCanNextPage}\n\t\t\t\t\t\tgetCanPreviousPage={table.getCanPreviousPage}\n\t\t\t\t\t\tlastPage={table.lastPage}\n\t\t\t\t\t\tnextPage={table.nextPage}\n\t\t\t\t\t\tgetState={table.getState}\n\t\t\t\t\t\trowCount={query.data?.total ?? 0}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t</section>\n\t\t</>\n\t);\n}\n\nfunction TableOverlay({\n\tchildren,\n\tclassName,\n}: { children: React.ReactNode; className?: string }) {\n\treturn (\n\t\t<>\n\t\t\t<span\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"absolute top-0 bg-card z-20 size-full flex items-center justify-center\",\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t{children}\n\t\t\t</span>\n\t\t\t{/* Keep something in document flow with the correct height */}\n\t\t\t<span className=\"relative h-full w-0 block\" />\n\t\t</>\n\t);\n}\n"],"names":["ACTIONS_COLUMN_ID","DataTable","columns","fetchFn","tableActions","columnsToHideByDefault","allowSelection","className","props","id","useId","tableState","_setTableState","useState","updateTableState","updates","prev","sorting","columnFilters","search","columnVisibility","rowSelection","pagination","useEffect","query","useQuery","keepPreviousData","extendedColumns","useMemo","TABLE_CHECK_BOX_COLUMN","TABLE_ID_COLUMN","col","TABLE_DEFAULT_DATE_COLUMNS","_a","isUpdaterFunction","updater","resolveUpdater","currentValue","table","useReactTable","_b","getCoreRowModel","_c","jsx","Fragment","cn","Actions","value","jsxs","TableOverlay","Loader","Info","_d","TableContent","ColumnPicker","PageSize","Paginator","_e","children"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"table-commons.es.js","sources":["../../../lib/components/data-table/table-commons.tsx"],"sourcesContent":["import { FormatDate } from \"@/components/data-table/table-utils/index\";\nimport { Checkbox } from \"@/components/inputs\";\nimport { createColumnHelper } from \"@tanstack/react-table\";\n\nconst cH = createColumnHelper<any>();\nexport const TABLE_CHECK_BOX_COLUMN = [\n\tcH.accessor(\"checkbox\", {\n\t\theader: ({ table }) => (\n\t\t\t<Checkbox\n\t\t\t\tindeterminate={table.getIsSomeRowsSelected() && !table.getIsAllPageRowsSelected()}\n\t\t\t\tchecked={\n\t\t\t\t\ttable.getIsAllPageRowsSelected() || table.getIsSomePageRowsSelected()\n\t\t\t\t}\n\t\t\t\tonChange={() => table.toggleAllPageRowsSelected()}\n\t\t\t\taria-label=\"Select all\"\n\t\t\t/>\n\t\t),\n\n\t\tcell: ({ row }) => (\n\t\t\t<Checkbox\n\t\t\t\tchecked={row.getIsSelected()}\n\t\t\t\tonChange={() => row.toggleSelected()}\n\t\t\t\taria-label=\"Select row\"\n\t\t\t/>\n\t\t),\n\t\tenableSorting: false,\n\t\tenableHiding: false,\n\t}),\n];\n\nexport const TABLE_ID_COLUMN = [\n\tcH.accessor(\"id\", {\n\t\theader: () => \"ID\",\n\t}),\n];\nexport const TABLE_DEFAULT_DATE_COLUMNS = [\n\tcH.accessor(\"createdAt\", {\n\t\theader: () => \"Creation Date\",\n\t\tcell: ({ row }) => {\n\t\t\tconst date = row.getValue(\"createdAt\") satisfies\n\t\t\t\t| string\n\t\t\t\t| null\n\t\t\t\t| undefined;\n\t\t\treturn FormatDate(date);\n\t\t},\n\t\tenableHiding: false,\n\t}),\n\tcH.accessor(\"updatedAt\", {\n\t\theader: () => \"Last Updated\",\n\t\tcell: ({ row }) => {\n\t\t\tconst date = row.getValue(\"updatedAt\") satisfies\n\t\t\t\t| string\n\t\t\t\t| null\n\t\t\t\t| undefined;\n\t\t\treturn FormatDate(date);\n\t\t},\n\t\tenableHiding: false,\n\t}),\n];\n"],"names":["cH","createColumnHelper","TABLE_CHECK_BOX_COLUMN","table","jsx","Checkbox","row","TABLE_ID_COLUMN","TABLE_DEFAULT_DATE_COLUMNS","date","FormatDate"],"mappings":";;;;AAIA,MAAMA,IAAKC,EAAA,GACEC,IAAyB;AAAA,EACrCF,EAAG,SAAS,YAAY;AAAA,IACvB,QAAQ,CAAC,EAAE,OAAAG,EAAA,MACV,gBAAAC;AAAA,MAACC;AAAA,MAAA;AAAA,QACA,eAAeF,EAAM,sBAAA,KAA2B,CAACA,EAAM,yBAAA;AAAA,QACvD,SACCA,EAAM,8BAA8BA,EAAM,0BAAA;AAAA,QAE3C,UAAU,MAAMA,EAAM,0BAAA;AAAA,QACtB,cAAW;AAAA,MAAA;AAAA,IAAA;AAAA,IAIb,MAAM,CAAC,EAAE,KAAAG,EAAA,MACR,gBAAAF;AAAA,MAACC;AAAA,MAAA;AAAA,QACA,SAASC,EAAI,cAAA;AAAA,QACb,UAAU,MAAMA,EAAI,eAAA;AAAA,QACpB,cAAW;AAAA,MAAA;AAAA,IAAA;AAAA,IAGb,eAAe;AAAA,IACf,cAAc;AAAA,EAAA,CACd;AACF,GAEaC,IAAkB;AAAA,EAC9BP,EAAG,SAAS,MAAM;AAAA,IACjB,QAAQ,MAAM;AAAA,EAAA,CACd;AACF,GACaQ,IAA6B;AAAA,EACzCR,EAAG,SAAS,aAAa;AAAA,IACxB,QAAQ,MAAM;AAAA,IACd,MAAM,CAAC,EAAE,KAAAM,QAAU;AAClB,YAAMG,IAAOH,EAAI,SAAS,WAAW;AAIrC,aAAOI,EAAWD,CAAI;AAAA,
|
|
1
|
+
{"version":3,"file":"table-commons.es.js","sources":["../../../lib/components/data-table/table-commons.tsx"],"sourcesContent":["import { FormatDate } from \"@/components/data-table/table-utils/index\";\nimport { Checkbox } from \"@/components/inputs\";\nimport { createColumnHelper } from \"@tanstack/react-table\";\n\nconst cH = createColumnHelper<any>();\nexport const TABLE_CHECK_BOX_COLUMN = [\n\tcH.accessor(\"checkbox\", {\n\t\theader: ({ table }) => (\n\t\t\t<Checkbox\n\t\t\t\tindeterminate={table.getIsSomeRowsSelected() && !table.getIsAllPageRowsSelected()}\n\t\t\t\tchecked={\n\t\t\t\t\ttable.getIsAllPageRowsSelected() || table.getIsSomePageRowsSelected()\n\t\t\t\t}\n\t\t\t\tonChange={() => table.toggleAllPageRowsSelected()}\n\t\t\t\taria-label=\"Select all\"\n\t\t\t/>\n\t\t),\n\n\t\tcell: ({ row }) => (\n\t\t\t<Checkbox\n\t\t\t\tchecked={row.getIsSelected()}\n\t\t\t\tonChange={() => row.toggleSelected()}\n\t\t\t\taria-label=\"Select row\"\n\t\t\t/>\n\t\t),\n\t\tenableSorting: false,\n\t\tenableHiding: false,\n\t}),\n];\n\nexport const TABLE_ID_COLUMN = [\n\tcH.accessor(\"id\", {\n\t\theader: () => \"ID\",\n\t}),\n];\nexport const TABLE_DEFAULT_DATE_COLUMNS = [\n\tcH.accessor(\"createdAt\", {\n\t\theader: () => \"Creation Date\",\n\t\tcell: ({ row }) => {\n\t\t\tconst date = row.getValue(\"createdAt\") satisfies\n\t\t\t\t| string\n\t\t\t\t| null\n\t\t\t\t| undefined;\n\t\t\treturn FormatDate(date);\n\t\t},\n\t\tenableHiding: false,\n\t}),\n\tcH.accessor(\"updatedAt\", {\n\t\theader: () => \"Last Updated\",\n\t\tcell: ({ row }) => {\n\t\t\tconst date = row.getValue(\"updatedAt\") satisfies\n\t\t\t\t| string\n\t\t\t\t| null\n\t\t\t\t| undefined;\n\t\t\treturn FormatDate(date);\n\t\t},\n\t\tenableHiding: false,\n\t}),\n];\n"],"names":["cH","createColumnHelper","TABLE_CHECK_BOX_COLUMN","table","jsx","Checkbox","row","TABLE_ID_COLUMN","TABLE_DEFAULT_DATE_COLUMNS","date","FormatDate"],"mappings":";;;;AAIA,MAAMA,IAAKC,EAAA,GACEC,IAAyB;AAAA,EACrCF,EAAG,SAAS,YAAY;AAAA,IACvB,QAAQ,CAAC,EAAE,OAAAG,EAAA,MACV,gBAAAC;AAAA,MAACC;AAAA,MAAA;AAAA,QACA,eAAeF,EAAM,sBAAA,KAA2B,CAACA,EAAM,yBAAA;AAAA,QACvD,SACCA,EAAM,8BAA8BA,EAAM,0BAAA;AAAA,QAE3C,UAAU,MAAMA,EAAM,0BAAA;AAAA,QACtB,cAAW;AAAA,MAAA;AAAA,IAAA;AAAA,IAIb,MAAM,CAAC,EAAE,KAAAG,EAAA,MACR,gBAAAF;AAAA,MAACC;AAAA,MAAA;AAAA,QACA,SAASC,EAAI,cAAA;AAAA,QACb,UAAU,MAAMA,EAAI,eAAA;AAAA,QACpB,cAAW;AAAA,MAAA;AAAA,IAAA;AAAA,IAGb,eAAe;AAAA,IACf,cAAc;AAAA,EAAA,CACd;AACF,GAEaC,IAAkB;AAAA,EAC9BP,EAAG,SAAS,MAAM;AAAA,IACjB,QAAQ,MAAM;AAAA,EAAA,CACd;AACF,GACaQ,IAA6B;AAAA,EACzCR,EAAG,SAAS,aAAa;AAAA,IACxB,QAAQ,MAAM;AAAA,IACd,MAAM,CAAC,EAAE,KAAAM,QAAU;AAClB,YAAMG,IAAOH,EAAI,SAAS,WAAW;AAIrC,aAAOI,EAAWD,CAAI;AAAA,IACvB;AAAA,IACA,cAAc;AAAA,EAAA,CACd;AAAA,EACDT,EAAG,SAAS,aAAa;AAAA,IACxB,QAAQ,MAAM;AAAA,IACd,MAAM,CAAC,EAAE,KAAAM,QAAU;AAClB,YAAMG,IAAOH,EAAI,SAAS,WAAW;AAIrC,aAAOI,EAAWD,CAAI;AAAA,IACvB;AAAA,IACA,cAAc;AAAA,EAAA,CACd;AACF;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"table-content.es.js","sources":["../../../lib/components/data-table/table-content.tsx"],"sourcesContent":["import { ACTIONS_COLUMN_ID } from \"@/components/data-table/data-table\";\nimport { Button } from \"@/components/ui\";\nimport {\n\tTableBody,\n\tTableCell,\n\tTable as TableComponent,\n\tTableHead,\n\tTableHeader,\n\tTableRow,\n} from \"@/components/ui/table\";\nimport {\n\ttype HeaderGroup,\n\ttype RowModel,\n\tflexRender,\n} from \"@tanstack/react-table\";\nimport {\n\tArrowDownNarrowWide,\n\tArrowDownWideNarrow,\n\tArrowUpDown\n} from \"lucide-react\";\n\n// TODO, automate checking valid HTML\nexport function TableContent({\n\tclassName,\n\tgetHeaderGroups,\n\tgetRowModel,\n}: {\n\tclassName?: string;\n\tgetRowModel: () => RowModel<any>;\n\tgetHeaderGroups: () => HeaderGroup<any>[];\n}) {\n\treturn (\n\t\t<TableComponent className={className}>\n\t\t\t<TableHeader className=\"sticky top-0 z-10\">\n\t\t\t\t{getHeaderGroups().map((headerGroup) => (\n\t\t\t\t\t<TableRow key={headerGroup.id}>\n\t\t\t\t\t\t{headerGroup.headers.map((header) => (\n\t\t\t\t\t\t\t<TableHead\n\t\t\t\t\t\t\t\tkey={header.id}\n\t\t\t\t\t\t\t\tclassName={`px-4 py-2 text-left text-sm font-medium bg-card whitespace-nowrap ${header.id === ACTIONS_COLUMN_ID ? \"sticky right-0 z-50 text-center\" : \"\"}`}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<span className=\"inline-flex items-center gap-1\">\n\t\t\t\t\t\t\t\t\t<span>\n\t\t\t\t\t\t\t\t\t\t{header.isPlaceholder\n\t\t\t\t\t\t\t\t\t\t\t? null\n\t\t\t\t\t\t\t\t\t\t\t: flexRender(\n\t\t\t\t\t\t\t\t\t\t\t\theader.column.columnDef.header,\n\t\t\t\t\t\t\t\t\t\t\t\theader.getContext(),\n\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t{header.column.getCanSort() && (\n\t\t\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t\t\tsize=\"icon\"\n\t\t\t\t\t\t\t\t\t\t\tvariant=\"ghost\"\n\t\t\t\t\t\t\t\t\t\t\tonClick={header.column.getToggleSortingHandler()}\n\t\t\t\t\t\t\t\t\t\t\ticon={() => {\n\t\t\t\t\t\t\t\t\t\t\t\tconst sort = header.column.getIsSorted();\n\t\t\t\t\t\t\t\t\t\t\t\tif (sort === \"asc\") {\n\t\t\t\t\t\t\t\t\t\t\t\t\treturn ArrowDownNarrowWide;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tif (sort === \"desc\") {\n\t\t\t\t\t\t\t\t\t\t\t\t\treturn ArrowDownWideNarrow;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\treturn ArrowUpDown;\n\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t</TableHead>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</TableRow>\n\t\t\t\t))}\n\t\t\t</TableHeader>\n\t\t\t<TableBody className=\"flex-1 overflow-y-auto relative\">\n\t\t\t\t{getRowModel().rows.length !== 0 &&\n\t\t\t\t\tgetRowModel().rows.map((row) => (\n\t\t\t\t\t\t<TableRow\n\t\t\t\t\t\t\tclassName=\"h-input transition-colors data-[state=selected]:bg-muted-foreground/30 hover:bg-muted-foreground/20\"\n\t\t\t\t\t\t\tkey={row.id}\n\t\t\t\t\t\t\tdata-state={row.getIsSelected() && \"selected\"}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{row.getVisibleCells().map((cell) => (\n\t\t\t\t\t\t\t\t<TableCell\n\t\t\t\t\t\t\t\t\tkey={cell.id}\n\t\t\t\t\t\t\t\t\tclassName={`\n px-4 py-2 text-left text-sm whitespace-nowrap\n ${cell.column.id === ACTIONS_COLUMN_ID\n\t\t\t\t\t\t\t\t\t\t\t? \"sticky right-0 w-20 bg-card\"\n\t\t\t\t\t\t\t\t\t\t\t: \"\"\n\t\t\t\t\t\t\t\t\t\t}\n `}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{flexRender(\n\t\t\t\t\t\t\t\t\t\tcell.column.columnDef.cell,\n\t\t\t\t\t\t\t\t\t\tcell.getContext(),\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t</TableCell>\n\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t</TableRow>\n\t\t\t\t\t))}\n\t\t\t</TableBody>\n\t\t</TableComponent>\n\t);\n}\n"],"names":["TableContent","className","getHeaderGroups","getRowModel","jsxs","TableComponent","jsx","TableHeader","headerGroup","TableRow","header","TableHead","ACTIONS_COLUMN_ID","flexRender","Button","sort","ArrowDownNarrowWide","ArrowDownWideNarrow","ArrowUpDown","TableBody","row","cell","TableCell"],"mappings":";;;;;;AAsBO,SAASA,EAAa;AAAA,EAC5B,WAAAC;AAAA,EACA,iBAAAC;AAAA,EACA,aAAAC;AACD,GAIG;AACF,SACC,gBAAAC,EAACC,KAAe,WAAAJ,GACf,UAAA;AAAA,IAAA,gBAAAK,EAACC,GAAA,EAAY,WAAU,qBACrB,UAAAL,EAAA,EAAkB,IAAI,CAACM,MACvB,gBAAAF,EAACG,GAAA,EACC,UAAAD,EAAY,QAAQ,IAAI,CAACE,MACzB,gBAAAJ;AAAA,MAACK;AAAA,MAAA;AAAA,QAEA,WAAW,qEAAqED,EAAO,OAAOE,IAAoB,oCAAoC,EAAE;AAAA,QAExJ,UAAA,gBAAAR,EAAC,QAAA,EAAK,WAAU,kCACf,UAAA;AAAA,UAAA,gBAAAE,EAAC,QAAA,EACC,UAAAI,EAAO,gBACL,OACAG;AAAA,YACDH,EAAO,OAAO,UAAU;AAAA,YACxBA,EAAO,WAAA;AAAA,UAAW,GAErB;AAAA,UACCA,EAAO,OAAO,WAAA,KACd,gBAAAJ;AAAA,YAACQ;AAAA,YAAA;AAAA,cACA,MAAK;AAAA,cACL,SAAQ;AAAA,cACR,SAASJ,EAAO,OAAO,wBAAA;AAAA,cACvB,MAAM,MAAM;AACX,sBAAMK,IAAOL,EAAO,OAAO,YAAA;AAC3B,uBAAIK,MAAS,QACLC,IAEJD,MAAS,SACLE,IAGDC;AAAA,
|
|
1
|
+
{"version":3,"file":"table-content.es.js","sources":["../../../lib/components/data-table/table-content.tsx"],"sourcesContent":["import { ACTIONS_COLUMN_ID } from \"@/components/data-table/data-table\";\nimport { Button } from \"@/components/ui\";\nimport {\n\tTableBody,\n\tTableCell,\n\tTable as TableComponent,\n\tTableHead,\n\tTableHeader,\n\tTableRow,\n} from \"@/components/ui/table\";\nimport {\n\ttype HeaderGroup,\n\ttype RowModel,\n\tflexRender,\n} from \"@tanstack/react-table\";\nimport {\n\tArrowDownNarrowWide,\n\tArrowDownWideNarrow,\n\tArrowUpDown\n} from \"lucide-react\";\n\n// TODO, automate checking valid HTML\nexport function TableContent({\n\tclassName,\n\tgetHeaderGroups,\n\tgetRowModel,\n}: {\n\tclassName?: string;\n\tgetRowModel: () => RowModel<any>;\n\tgetHeaderGroups: () => HeaderGroup<any>[];\n}) {\n\treturn (\n\t\t<TableComponent className={className}>\n\t\t\t<TableHeader className=\"sticky top-0 z-10\">\n\t\t\t\t{getHeaderGroups().map((headerGroup) => (\n\t\t\t\t\t<TableRow key={headerGroup.id}>\n\t\t\t\t\t\t{headerGroup.headers.map((header) => (\n\t\t\t\t\t\t\t<TableHead\n\t\t\t\t\t\t\t\tkey={header.id}\n\t\t\t\t\t\t\t\tclassName={`px-4 py-2 text-left text-sm font-medium bg-card whitespace-nowrap ${header.id === ACTIONS_COLUMN_ID ? \"sticky right-0 z-50 text-center\" : \"\"}`}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<span className=\"inline-flex items-center gap-1\">\n\t\t\t\t\t\t\t\t\t<span>\n\t\t\t\t\t\t\t\t\t\t{header.isPlaceholder\n\t\t\t\t\t\t\t\t\t\t\t? null\n\t\t\t\t\t\t\t\t\t\t\t: flexRender(\n\t\t\t\t\t\t\t\t\t\t\t\theader.column.columnDef.header,\n\t\t\t\t\t\t\t\t\t\t\t\theader.getContext(),\n\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t{header.column.getCanSort() && (\n\t\t\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t\t\tsize=\"icon\"\n\t\t\t\t\t\t\t\t\t\t\tvariant=\"ghost\"\n\t\t\t\t\t\t\t\t\t\t\tonClick={header.column.getToggleSortingHandler()}\n\t\t\t\t\t\t\t\t\t\t\ticon={() => {\n\t\t\t\t\t\t\t\t\t\t\t\tconst sort = header.column.getIsSorted();\n\t\t\t\t\t\t\t\t\t\t\t\tif (sort === \"asc\") {\n\t\t\t\t\t\t\t\t\t\t\t\t\treturn ArrowDownNarrowWide;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tif (sort === \"desc\") {\n\t\t\t\t\t\t\t\t\t\t\t\t\treturn ArrowDownWideNarrow;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\treturn ArrowUpDown;\n\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t</TableHead>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</TableRow>\n\t\t\t\t))}\n\t\t\t</TableHeader>\n\t\t\t<TableBody className=\"flex-1 overflow-y-auto relative\">\n\t\t\t\t{getRowModel().rows.length !== 0 &&\n\t\t\t\t\tgetRowModel().rows.map((row) => (\n\t\t\t\t\t\t<TableRow\n\t\t\t\t\t\t\tclassName=\"h-input transition-colors data-[state=selected]:bg-muted-foreground/30 hover:bg-muted-foreground/20\"\n\t\t\t\t\t\t\tkey={row.id}\n\t\t\t\t\t\t\tdata-state={row.getIsSelected() && \"selected\"}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{row.getVisibleCells().map((cell) => (\n\t\t\t\t\t\t\t\t<TableCell\n\t\t\t\t\t\t\t\t\tkey={cell.id}\n\t\t\t\t\t\t\t\t\tclassName={`\n px-4 py-2 text-left text-sm whitespace-nowrap\n ${cell.column.id === ACTIONS_COLUMN_ID\n\t\t\t\t\t\t\t\t\t\t\t? \"sticky right-0 w-20 bg-card\"\n\t\t\t\t\t\t\t\t\t\t\t: \"\"\n\t\t\t\t\t\t\t\t\t\t}\n `}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{flexRender(\n\t\t\t\t\t\t\t\t\t\tcell.column.columnDef.cell,\n\t\t\t\t\t\t\t\t\t\tcell.getContext(),\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t</TableCell>\n\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t</TableRow>\n\t\t\t\t\t))}\n\t\t\t</TableBody>\n\t\t</TableComponent>\n\t);\n}\n"],"names":["TableContent","className","getHeaderGroups","getRowModel","jsxs","TableComponent","jsx","TableHeader","headerGroup","TableRow","header","TableHead","ACTIONS_COLUMN_ID","flexRender","Button","sort","ArrowDownNarrowWide","ArrowDownWideNarrow","ArrowUpDown","TableBody","row","cell","TableCell"],"mappings":";;;;;;AAsBO,SAASA,EAAa;AAAA,EAC5B,WAAAC;AAAA,EACA,iBAAAC;AAAA,EACA,aAAAC;AACD,GAIG;AACF,SACC,gBAAAC,EAACC,KAAe,WAAAJ,GACf,UAAA;AAAA,IAAA,gBAAAK,EAACC,GAAA,EAAY,WAAU,qBACrB,UAAAL,EAAA,EAAkB,IAAI,CAACM,MACvB,gBAAAF,EAACG,GAAA,EACC,UAAAD,EAAY,QAAQ,IAAI,CAACE,MACzB,gBAAAJ;AAAA,MAACK;AAAA,MAAA;AAAA,QAEA,WAAW,qEAAqED,EAAO,OAAOE,IAAoB,oCAAoC,EAAE;AAAA,QAExJ,UAAA,gBAAAR,EAAC,QAAA,EAAK,WAAU,kCACf,UAAA;AAAA,UAAA,gBAAAE,EAAC,QAAA,EACC,UAAAI,EAAO,gBACL,OACAG;AAAA,YACDH,EAAO,OAAO,UAAU;AAAA,YACxBA,EAAO,WAAA;AAAA,UAAW,GAErB;AAAA,UACCA,EAAO,OAAO,WAAA,KACd,gBAAAJ;AAAA,YAACQ;AAAA,YAAA;AAAA,cACA,MAAK;AAAA,cACL,SAAQ;AAAA,cACR,SAASJ,EAAO,OAAO,wBAAA;AAAA,cACvB,MAAM,MAAM;AACX,sBAAMK,IAAOL,EAAO,OAAO,YAAA;AAC3B,uBAAIK,MAAS,QACLC,IAEJD,MAAS,SACLE,IAGDC;AAAA,cACR;AAAA,YAAA;AAAA,UAAA;AAAA,QACD,EAAA,CAEF;AAAA,MAAA;AAAA,MA9BKR,EAAO;AAAA,IAAA,CAgCb,KAnCaF,EAAY,EAoC3B,CACA,EAAA,CACF;AAAA,IACA,gBAAAF,EAACa,GAAA,EAAU,WAAU,mCACnB,cAAc,KAAK,WAAW,KAC9BhB,EAAA,EAAc,KAAK,IAAI,CAACiB,MACvB,gBAAAd;AAAA,MAACG;AAAA,MAAA;AAAA,QACA,WAAU;AAAA,QAEV,cAAYW,EAAI,cAAA,KAAmB;AAAA,QAElC,UAAAA,EAAI,gBAAA,EAAkB,IAAI,CAACC,MAC3B,gBAAAf;AAAA,UAACgB;AAAA,UAAA;AAAA,YAEA,WAAW;AAAA;AAAA,sBAEED,EAAK,OAAO,OAAOT,IAC5B,gCACA,EACH;AAAA;AAAA,YAGA,UAAAC;AAAA,cACAQ,EAAK,OAAO,UAAU;AAAA,cACtBA,EAAK,WAAA;AAAA,YAAW;AAAA,UACjB;AAAA,UAZKA,EAAK;AAAA,QAAA,CAcX;AAAA,MAAA;AAAA,MAnBID,EAAI;AAAA,IAAA,CAqBV,EAAA,CACH;AAAA,EAAA,GACD;AAEF;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createTableFetchFn.es.js","sources":["../../../../lib/components/data-table/table-utils/createTableFetchFn.ts"],"sourcesContent":["import type { paths } from \"@cryptlex/web-api-types\";\nimport { merge } from \"lodash-es\";\nimport type createClient from \"openapi-fetch\";\nimport type { ParamsOption } from \"openapi-fetch\";\nimport type { TableFetchFn } from \"./types\";\n\ninterface Params {\n\tquery: Record<\n\t\tstring,\n\t\tstring | number | boolean | Record<string, string | number | boolean>\n\t>;\n}\n\ntype Client = ReturnType<typeof createClient<paths>>;\n\n// Helper type to extract valid GET paths\ntype GetPaths = {\n\t[P in keyof paths]: paths[P] extends { get: any } ? P : never;\n}[keyof paths];\n\nexport function createTableFetchFn<_any, Return>(\n\tctxclient: Client,\n\tpath: GetPaths,\n\t// TODO: Use generic type instead\n\tparams?: ParamsOption<any>,\n): TableFetchFn<Return> {\n\treturn async (pagination, sorting, searching) => {\n\t\tconst ab: { params: Params } = {\n\t\t\tparams: {\n\t\t\t\tquery: {\n\t\t\t\t\tpage: pagination.pageIndex + 1,\n\t\t\t\t\tlimit: pagination.pageSize,\n\t\t\t\t\tsort: generateSortParam(sorting[0]),\n\t\t\t\t\tquery: searching,\n\t\t\t\t},\n\t\t\t},\n\t\t};\n\n\t\tconst pathParams = merge(ab, params) as { params: Params };\n\n\t\treturn ctxclient.GET(path, pathParams).then((value) => {\n\t\t\tconst rowCount = Number.parseInt(\n\t\t\t\tvalue.response.headers.get(\"Pagination-Count\") || \"0\",\n\t\t\t);\n\t\t\treturn { total: rowCount, data: value.data };\n\t\t});\n\t};\n}\n\nfunction generateSortParam(\n\tsort: { id: string; desc: boolean } | undefined,\n): string {\n\tif (sort) {\n\t\tif (sort.desc) {\n\t\t\treturn `-${sort.id}`;\n\t\t} else {\n\t\t\treturn `+${sort.id}`;\n\t\t}\n\t} else {\n\t\treturn \"-createdAt\";\n\t}\n}\n"],"names":["createTableFetchFn","ctxclient","path","params","pagination","sorting","searching","ab","generateSortParam","pathParams","merge","value","sort"],"mappings":";AAoBO,SAASA,EACfC,GACAC,GAEAC,GACuB;AACvB,SAAO,OAAOC,GAAYC,GAASC,MAAc;AAChD,UAAMC,IAAyB;AAAA,MAC9B,QAAQ;AAAA,QACP,OAAO;AAAA,UACN,MAAMH,EAAW,YAAY;AAAA,UAC7B,OAAOA,EAAW;AAAA,UAClB,MAAMI,EAAkBH,EAAQ,CAAC,CAAC;AAAA,UAClC,OAAOC;AAAA,QAAA;AAAA,MACR;AAAA,IACD,GAGKG,IAAaC,EAAMH,GAAIJ,CAAM;AAEnC,WAAOF,EAAU,IAAIC,GAAMO,CAAU,EAAE,KAAK,CAACE,OAIrC,EAAE,OAHQ,OAAO;AAAA,MACvBA,EAAM,SAAS,QAAQ,IAAI,kBAAkB,KAAK;AAAA,IAAA,GAEzB,MAAMA,EAAM,KAAA,EACtC;AAAA,
|
|
1
|
+
{"version":3,"file":"createTableFetchFn.es.js","sources":["../../../../lib/components/data-table/table-utils/createTableFetchFn.ts"],"sourcesContent":["import type { paths } from \"@cryptlex/web-api-types\";\nimport { merge } from \"lodash-es\";\nimport type createClient from \"openapi-fetch\";\nimport type { ParamsOption } from \"openapi-fetch\";\nimport type { TableFetchFn } from \"./types\";\n\ninterface Params {\n\tquery: Record<\n\t\tstring,\n\t\tstring | number | boolean | Record<string, string | number | boolean>\n\t>;\n}\n\ntype Client = ReturnType<typeof createClient<paths>>;\n\n// Helper type to extract valid GET paths\ntype GetPaths = {\n\t[P in keyof paths]: paths[P] extends { get: any } ? P : never;\n}[keyof paths];\n\nexport function createTableFetchFn<_any, Return>(\n\tctxclient: Client,\n\tpath: GetPaths,\n\t// TODO: Use generic type instead\n\tparams?: ParamsOption<any>,\n): TableFetchFn<Return> {\n\treturn async (pagination, sorting, searching) => {\n\t\tconst ab: { params: Params } = {\n\t\t\tparams: {\n\t\t\t\tquery: {\n\t\t\t\t\tpage: pagination.pageIndex + 1,\n\t\t\t\t\tlimit: pagination.pageSize,\n\t\t\t\t\tsort: generateSortParam(sorting[0]),\n\t\t\t\t\tquery: searching,\n\t\t\t\t},\n\t\t\t},\n\t\t};\n\n\t\tconst pathParams = merge(ab, params) as { params: Params };\n\n\t\treturn ctxclient.GET(path, pathParams).then((value) => {\n\t\t\tconst rowCount = Number.parseInt(\n\t\t\t\tvalue.response.headers.get(\"Pagination-Count\") || \"0\",\n\t\t\t);\n\t\t\treturn { total: rowCount, data: value.data };\n\t\t});\n\t};\n}\n\nfunction generateSortParam(\n\tsort: { id: string; desc: boolean } | undefined,\n): string {\n\tif (sort) {\n\t\tif (sort.desc) {\n\t\t\treturn `-${sort.id}`;\n\t\t} else {\n\t\t\treturn `+${sort.id}`;\n\t\t}\n\t} else {\n\t\treturn \"-createdAt\";\n\t}\n}\n"],"names":["createTableFetchFn","ctxclient","path","params","pagination","sorting","searching","ab","generateSortParam","pathParams","merge","value","sort"],"mappings":";AAoBO,SAASA,EACfC,GACAC,GAEAC,GACuB;AACvB,SAAO,OAAOC,GAAYC,GAASC,MAAc;AAChD,UAAMC,IAAyB;AAAA,MAC9B,QAAQ;AAAA,QACP,OAAO;AAAA,UACN,MAAMH,EAAW,YAAY;AAAA,UAC7B,OAAOA,EAAW;AAAA,UAClB,MAAMI,EAAkBH,EAAQ,CAAC,CAAC;AAAA,UAClC,OAAOC;AAAA,QAAA;AAAA,MACR;AAAA,IACD,GAGKG,IAAaC,EAAMH,GAAIJ,CAAM;AAEnC,WAAOF,EAAU,IAAIC,GAAMO,CAAU,EAAE,KAAK,CAACE,OAIrC,EAAE,OAHQ,OAAO;AAAA,MACvBA,EAAM,SAAS,QAAQ,IAAI,kBAAkB,KAAK;AAAA,IAAA,GAEzB,MAAMA,EAAM,KAAA,EACtC;AAAA,EACF;AACD;AAEA,SAASH,EACRI,GACS;AACT,SAAIA,IACCA,EAAK,OACD,IAAIA,EAAK,EAAE,KAEX,IAAIA,EAAK,EAAE,KAGZ;AAET;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"string.es.js","sources":["../../../../lib/components/data-table/table-utils/string.ts"],"sourcesContent":["/**\n *\n * @param input camelCase\n * @returns title case for the camelCase string\n */\nexport function convertToTitleCase(input: string): string {\n\treturn input\n\t\t.replace(/([A-Z])/g, \" $1\") // Insert space before capital letters\n\t\t.trim() // Remove any leading/trailing spaces\n\t\t.split(\" \") // Split into words\n\t\t.map((word) => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase()) // Capitalize each word\n\t\t.join(\" \"); // Join back into a single string\n}\nexport function pluralizeTimes(resourceName: string, count: number) {\n\tif (count > 1) {\n\t\tif (/y$/.test(resourceName)) {\n\t\t\tif (resourceName === \"Day\") return \"Days\";\n\t\t\treturn resourceName.replace(/y$/, \"ies\");\n\t\t}\n\t\treturn resourceName.concat(\"s\");\n\t}\n\treturn resourceName;\n}\n\n/**\n * Converts a string from 'camelCase' to 'Title Case'\n * @param string String to convert to `Title Case`\n */\nexport function convertCamelCaseToTitleCase(string: string) {\n\tif (string) {\n\t\tconst spacedString = string.replace(/([A-Z])/g, \" $1\");\n\t\treturn spacedString\n\t\t\t.charAt(0)\n\t\t\t.toUpperCase()\n\t\t\t.concat(spacedString.slice(1))\n\t\t\t.replace(/\\.[a-z]/, (substr: string) => {\n\t\t\t\treturn substr.replace(\".\", \" \").toUpperCase();\n\t\t\t});\n\t}\n\treturn string;\n}\n"],"names":["convertToTitleCase","input","word","pluralizeTimes","resourceName","count","convertCamelCaseToTitleCase","string","spacedString","substr"],"mappings":"AAKO,SAASA,EAAmBC,GAAuB;AACzD,SAAOA,EACL,QAAQ,YAAY,KAAK,EACzB,KAAA,EACA,MAAM,GAAG,EACT,IAAI,CAACC,MAASA,EAAK,OAAO,CAAC,EAAE,YAAA,IAAgBA,EAAK,MAAM,CAAC,EAAE,YAAA,CAAa,EACxE,KAAK,GAAG;AACX;AACO,SAASC,EAAeC,GAAsBC,GAAe;AACnE,SAAIA,IAAQ,IACP,KAAK,KAAKD,CAAY,IACrBA,MAAiB,QAAc,SAC5BA,EAAa,QAAQ,MAAM,KAAK,IAEjCA,EAAa,OAAO,GAAG,IAExBA;AACR;AAMO,SAASE,EAA4BC,GAAgB;AAC3D,MAAIA,GAAQ;AACX,UAAMC,IAAeD,EAAO,QAAQ,YAAY,KAAK;AACrD,WAAOC,EACL,OAAO,CAAC,EACR,cACA,OAAOA,EAAa,MAAM,CAAC,CAAC,EAC5B,QAAQ,WAAW,CAACC,MACbA,EAAO,QAAQ,KAAK,GAAG,EAAE,YAAA,CAChC;AAAA,
|
|
1
|
+
{"version":3,"file":"string.es.js","sources":["../../../../lib/components/data-table/table-utils/string.ts"],"sourcesContent":["/**\n *\n * @param input camelCase\n * @returns title case for the camelCase string\n */\nexport function convertToTitleCase(input: string): string {\n\treturn input\n\t\t.replace(/([A-Z])/g, \" $1\") // Insert space before capital letters\n\t\t.trim() // Remove any leading/trailing spaces\n\t\t.split(\" \") // Split into words\n\t\t.map((word) => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase()) // Capitalize each word\n\t\t.join(\" \"); // Join back into a single string\n}\nexport function pluralizeTimes(resourceName: string, count: number) {\n\tif (count > 1) {\n\t\tif (/y$/.test(resourceName)) {\n\t\t\tif (resourceName === \"Day\") return \"Days\";\n\t\t\treturn resourceName.replace(/y$/, \"ies\");\n\t\t}\n\t\treturn resourceName.concat(\"s\");\n\t}\n\treturn resourceName;\n}\n\n/**\n * Converts a string from 'camelCase' to 'Title Case'\n * @param string String to convert to `Title Case`\n */\nexport function convertCamelCaseToTitleCase(string: string) {\n\tif (string) {\n\t\tconst spacedString = string.replace(/([A-Z])/g, \" $1\");\n\t\treturn spacedString\n\t\t\t.charAt(0)\n\t\t\t.toUpperCase()\n\t\t\t.concat(spacedString.slice(1))\n\t\t\t.replace(/\\.[a-z]/, (substr: string) => {\n\t\t\t\treturn substr.replace(\".\", \" \").toUpperCase();\n\t\t\t});\n\t}\n\treturn string;\n}\n"],"names":["convertToTitleCase","input","word","pluralizeTimes","resourceName","count","convertCamelCaseToTitleCase","string","spacedString","substr"],"mappings":"AAKO,SAASA,EAAmBC,GAAuB;AACzD,SAAOA,EACL,QAAQ,YAAY,KAAK,EACzB,KAAA,EACA,MAAM,GAAG,EACT,IAAI,CAACC,MAASA,EAAK,OAAO,CAAC,EAAE,YAAA,IAAgBA,EAAK,MAAM,CAAC,EAAE,YAAA,CAAa,EACxE,KAAK,GAAG;AACX;AACO,SAASC,EAAeC,GAAsBC,GAAe;AACnE,SAAIA,IAAQ,IACP,KAAK,KAAKD,CAAY,IACrBA,MAAiB,QAAc,SAC5BA,EAAa,QAAQ,MAAM,KAAK,IAEjCA,EAAa,OAAO,GAAG,IAExBA;AACR;AAMO,SAASE,EAA4BC,GAAgB;AAC3D,MAAIA,GAAQ;AACX,UAAMC,IAAeD,EAAO,QAAQ,YAAY,KAAK;AACrD,WAAOC,EACL,OAAO,CAAC,EACR,cACA,OAAOA,EAAa,MAAM,CAAC,CAAC,EAC5B,QAAQ,WAAW,CAACC,MACbA,EAAO,QAAQ,KAAK,GAAG,EAAE,YAAA,CAChC;AAAA,EACH;AACA,SAAOF;AACR;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"country-select.es.js","sources":["../../../lib/components/inputs/country-select.tsx"],"sourcesContent":["import {\n\tMultiSelect,\n\tTfMultiSelect,\n\ttype MultiSelectProps,\n\ttype TfMultiSelectProps,\n} from \"@/components/inputs/multi-select\";\n\n/**\n * Creates Unicode flag from a two-letter ISO country code.\n * https://stackoverflow.com/questions/24050671/how-to-put-japan-flag-character-in-a-string\n * @param {string} country — A two-letter ISO country code (case-insensitive).\n * @return {string}\n */\nfunction getCountryFlag(country: string) {\n\tfunction getRegionalIndicatorSymbol(letter: string) {\n\t\treturn String.fromCodePoint(\n\t\t\t0x1f1e6 - 65 + letter.toUpperCase().charCodeAt(0),\n\t\t);\n\t}\n\n\treturn (\n\t\tgetRegionalIndicatorSymbol(country[0]) +\n\t\tgetRegionalIndicatorSymbol(country[1])\n\t);\n}\n\nconst ALL_COUNTRIES: { [key: string]: string } = {\n\tAF: \"Afghanistan\",\n\tAX: \"Åland Islands\",\n\tAL: \"Albania\",\n\tDZ: \"Algeria\",\n\tAS: \"American Samoa\",\n\tAD: \"Andorra\",\n\tAO: \"Angola\",\n\tAI: \"Anguilla\",\n\tAQ: \"Antarctica\",\n\tAG: \"Antigua and Barbuda\",\n\tAR: \"Argentina\",\n\tAM: \"Armenia\",\n\tAW: \"Aruba\",\n\tAU: \"Australia\",\n\tAT: \"Austria\",\n\tAZ: \"Azerbaijan\",\n\tBS: \"Bahamas\",\n\tBH: \"Bahrain\",\n\tBD: \"Bangladesh\",\n\tBB: \"Barbados\",\n\tBY: \"Belarus\",\n\tBE: \"Belgium\",\n\tBZ: \"Belize\",\n\tBJ: \"Benin\",\n\tBM: \"Bermuda\",\n\tBT: \"Bhutan\",\n\tBO: \"Bolivia (Plurinational State of)\",\n\tBQ: \"Bonaire, Sint Eustatius and Saba\",\n\tBA: \"Bosnia and Herzegovina\",\n\tBW: \"Botswana\",\n\tBV: \"Bouvet Island\",\n\tBR: \"Brazil\",\n\tIO: \"British Indian Ocean Territory\",\n\tBN: \"Brunei Darussalam\",\n\tBG: \"Bulgaria\",\n\tBF: \"Burkina Faso\",\n\tBI: \"Burundi\",\n\tCV: \"Caboe Verde\",\n\tKH: \"Cambodia\",\n\tCM: \"Cameroon\",\n\tCA: \"Canada\",\n\tKY: \"Cayman Islands\",\n\tCF: \"Central African Republic\",\n\tTD: \"Chad\",\n\tCL: \"Chile\",\n\tCN: \"China\",\n\tCX: \"Christmas Island\",\n\tCC: \"Cocos (Keeling) Islands\",\n\tCO: \"Colombia\",\n\tKM: \"Comoros\",\n\tCG: \"Congo\",\n\tCD: \"Congo, Democratic Republic of the\",\n\tCK: \"Cook Islands\",\n\tCR: \"Costa Rica\",\n\tCI: \"Côte d'voire\",\n\tHR: \"Croatia\",\n\tCU: \"Cuba\",\n\tCW: \"Curaçao\",\n\tCY: \"Cyprus\",\n\tCZ: \"Czechia\",\n\tDK: \"Denmark\",\n\tDJ: \"Djibouti\",\n\tDM: \"Dominica\",\n\tDO: \"Dominican Republic\",\n\tEC: \"Ecuador\",\n\tEG: \"Egypt\",\n\tSV: \"El Salvador\",\n\tGQ: \"Equatorial Guinea\",\n\tER: \"Eritrea\",\n\tEE: \"Estonia\",\n\tSZ: \"Eswatini\",\n\tET: \"Ethiopia\",\n\tFK: \"Falkland Islands (Malvinas)\",\n\tFO: \"Faroe Islands\",\n\tFJ: \"Fiji\",\n\tFI: \"Finland\",\n\tFR: \"France\",\n\tGF: \"French Guiana\",\n\tPF: \"French Polynesia\",\n\tTF: \"French Southern Territories\",\n\tGA: \"Gabon\",\n\tGM: \"Gambia\",\n\tGE: \"Georgia\",\n\tDE: \"Germany\",\n\tGH: \"Ghana\",\n\tGI: \"Gibraltar\",\n\tGR: \"Greece\",\n\tGL: \"Greenland\",\n\tGD: \"Grenada\",\n\tGP: \"Guadeloupe\",\n\tGU: \"Guam\",\n\tGT: \"Guatemala\",\n\tGG: \"Guernsey\",\n\tGN: \"Guinea\",\n\tGW: \"Guinea-Bissau\",\n\tGY: \"Guyana\",\n\tHT: \"Haiti\",\n\tHM: \"Heard Island and Mcdonald Islands\",\n\tVA: \"Holy See\",\n\tHN: \"Honduras\",\n\tHK: \"Hong Kong\",\n\tHU: \"Hungary\",\n\tIS: \"Iceland\",\n\tIN: \"India\",\n\tID: \"Indonesia\",\n\tIR: \"Iran (Islamic Republic of)\",\n\tIQ: \"Iraq\",\n\tIE: \"Ireland\",\n\tIM: \"Isle of Man\",\n\tIL: \"Israel\",\n\tIT: \"Italy\",\n\tJM: \"Jamaica\",\n\tJP: \"Japan\",\n\tJE: \"Jersey\",\n\tJO: \"Jordan\",\n\tKZ: \"Kazakhstan\",\n\tKE: \"Kenya\",\n\tKI: \"Kiribati\",\n\tKP: \"Korea (Democratic People's Republic of)\",\n\tKR: \"Korea (Republic of)\",\n\tKW: \"Kuwait\",\n\tKG: \"Kyrgyzstan\",\n\tLA: \"Lao People's Democratic Republic\",\n\tLV: \"Latvia\",\n\tLB: \"Lebanon\",\n\tLS: \"Lesotho\",\n\tLR: \"Liberia\",\n\tLY: \"Libya\",\n\tLI: \"Liechtenstein\",\n\tLT: \"Lithuania\",\n\tLU: \"Luxembourg\",\n\tMO: \"Macao\",\n\tMG: \"Madagascar\",\n\tMW: \"Malawi\",\n\tMY: \"Malaysia\",\n\tMV: \"Maldives\",\n\tML: \"Mali\",\n\tMT: \"Malta\",\n\tMH: \"Marshall Islands\",\n\tMQ: \"Martinique\",\n\tMR: \"Mauritania\",\n\tMU: \"Mauritius\",\n\tYT: \"Mayotte\",\n\tMX: \"Mexico\",\n\tFM: \"Micronesia (Federated States of)\",\n\tMD: \"Moldova, Republic of\",\n\tMC: \"Monaco\",\n\tMN: \"Mongolia\",\n\tME: \"Montenegro\",\n\tMS: \"Montserrat\",\n\tMA: \"Morocco\",\n\tMZ: \"Mozambique\",\n\tMM: \"Myanmar\",\n\tNA: \"Namibia\",\n\tNR: \"Nauru\",\n\tNP: \"Nepal\",\n\tNL: \"Netherlands, Kingdom of the\",\n\tNC: \"New Caledonia\",\n\tNZ: \"New Zealand\",\n\tNI: \"Nicaragua\",\n\tNE: \"Niger\",\n\tNG: \"Nigeria\",\n\tNU: \"Niue\",\n\tNF: \"Norfolk Island\",\n\tMK: \"North Macedonia\",\n\tMP: \"Northern Mariana Islands\",\n\tNO: \"Norway\",\n\tOM: \"Oman\",\n\tPK: \"Pakistan\",\n\tPW: \"Palau\",\n\tPS: \"Palestine, State of\",\n\tPA: \"Panama\",\n\tPG: \"Papua New Guinea\",\n\tPY: \"Paraguay\",\n\tPE: \"Peru\",\n\tPH: \"Philippines\",\n\tPN: \"Pitcairn\",\n\tPL: \"Poland\",\n\tPT: \"Portugal\",\n\tPR: \"Puerto Rico\",\n\tQA: \"Qatar\",\n\tRE: \"Réunion\",\n\tRO: \"Romania\",\n\tRU: \"Russian Federation\",\n\tRW: \"Rwanda\",\n\tBL: \"Saint Barthélemy\",\n\tSH: \"Saint Helena, Ascension Island, Tristan da Cunha\",\n\tKN: \"Saint Kitts and Nevis\",\n\tLC: \"Saint Lucia\",\n\tMF: \"Saint Martin (French part)\",\n\tPM: \"Saint Pierre and Miquelon\",\n\tVC: \"Saint Vincent and the Grenadines\",\n\tWS: \"Samoa\",\n\tSM: \"San Marino\",\n\tST: \"Sao Tome and Principe\",\n\tSA: \"Saudi Arabia\",\n\tSN: \"Senegal\",\n\tRS: \"Serbia\",\n\tSC: \"Seychelles\",\n\tSL: \"Sierra Leone\",\n\tSG: \"Singapore\",\n\tSX: \"Sint Maarten (Dutch part)\",\n\tSK: \"Slovakia\",\n\tSI: \"Slovenia\",\n\tSB: \"Solomon Islands\",\n\tSO: \"Somalia\",\n\tZA: \"South Africa\",\n\tGS: \"South Georgia and the South Sandwich Islands\",\n\tSS: \"South Sudan\",\n\tES: \"Spain\",\n\tLK: \"Sri Lanka\",\n\tSD: \"Sudan\",\n\tSR: \"Suriname\",\n\tSJ: \"Svalbard and Jan Mayen\",\n\tSE: \"Sweden\",\n\tCH: \"Switzerland\",\n\tSY: \"Syrian Arab Republic\",\n\tTW: \"Taiwan, Province of China\",\n\tTJ: \"Tajikistan\",\n\tTZ: \"Tanzania, United Republic of\",\n\tTH: \"Thailand\",\n\tTL: \"Timor-Leste\",\n\tTG: \"Togo\",\n\tTK: \"Tokelau\",\n\tTO: \"Tonga\",\n\tTT: \"Trinidad and Tobago\",\n\tTN: \"Tunisia\",\n\tTR: \"Türkiye\",\n\tTM: \"Turkmenistan\",\n\tTC: \"Turks and Caicos Islands\",\n\tTV: \"Tuvalu\",\n\tUG: \"Uganda\",\n\tUA: \"Ukraine\",\n\tAE: \"United Arab Emirates\",\n\tGB: \"United Kingdom of Great Britain and Northern Ireland\",\n\tUM: \"United States Minor Outlying Islands\",\n\tUS: \"United States of America\",\n\tUY: \"Uruguay\",\n\tUZ: \"Uzbekistan\",\n\tVU: \"Vanuatu\",\n\tVE: \"Venezuela (Bolivarian Republic of)\",\n\tVN: \"Viet Nam\",\n\tVG: \"Virgin Islands (British)\",\n\tVI: \"Virgin Islands (U.S)\",\n\tWF: \"Wallis and Futuna\",\n\tEH: \"Western Sahara\",\n\tYE: \"Yemen\",\n\tZM: \"Zambia\",\n\tZW: \"Zimbabwe\",\n};\n\n/** Options for MultiSelect component */\nconst options = Object.entries(ALL_COUNTRIES).map((v) => {\n\treturn {\n\t\tlabel: (\n\t\t\t<>\n\t\t\t\t{getCountryFlag(v[0])} {v[1]}\n\t\t\t</>\n\t\t),\n\t\tvalue: v[0],\n\t};\n});\n\nexport function CountrySelect({\n\t...props\n}: Omit<MultiSelectProps, \"options\">) {\n\treturn <MultiSelect {...props} options={options} />;\n};\n\nexport function TfCountrySelect({\n\t...props\n}: Omit<TfMultiSelectProps, \"options\">) {\n\treturn <TfMultiSelect {...props} options={options} />;\n};\n"],"names":["getCountryFlag","country","getRegionalIndicatorSymbol","letter","ALL_COUNTRIES","options","v","jsxs","Fragment","CountrySelect","props","jsx","MultiSelect","TfCountrySelect","TfMultiSelect"],"mappings":";;AAaA,SAASA,EAAeC,GAAiB;AACxC,WAASC,EAA2BC,GAAgB;AACnD,WAAO,OAAO;AAAA,MACb,SAAeA,EAAO,YAAA,EAAc,WAAW,CAAC;AAAA,IAAA;AAAA,EACjD;AAGD,SACCD,EAA2BD,EAAQ,CAAC,CAAC,IACrCC,EAA2BD,EAAQ,CAAC,CAAC;AAEvC;AAEA,MAAMG,IAA2C;AAAA,EAChD,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AACL,GAGMC,IAAU,OAAO,QAAQD,CAAa,EAAE,IAAI,CAACE,OAC3C;AAAA,EACN,OACC,gBAAAC,EAAAC,GAAA,EACE,UAAA;AAAA,IAAAR,EAAeM,EAAE,CAAC,CAAC;AAAA,IAAE;AAAA,IAAEA,EAAE,CAAC;AAAA,EAAA,GAC5B;AAAA,EAED,OAAOA,EAAE,CAAC;AAAA,EAEX;AAEM,SAASG,EAAc;AAAA,EAC7B,GAAGC;AACJ,GAAsC;AACrC,SAAO,gBAAAC,EAACC,GAAA,EAAa,GAAGF,GAAO,SAAAL,EAAA,CAAkB;AAClD;AAEO,SAASQ,EAAgB;AAAA,EAC/B,GAAGH;AACJ,GAAwC;AACvC,SAAO,gBAAAC,EAACG,GAAA,EAAe,GAAGJ,GAAO,SAAAL,EAAA,CAAkB;AACpD;"}
|
|
1
|
+
{"version":3,"file":"country-select.es.js","sources":["../../../lib/components/inputs/country-select.tsx"],"sourcesContent":["import {\n\tMultiSelect,\n\tTfMultiSelect,\n\ttype MultiSelectProps,\n\ttype TfMultiSelectProps,\n} from \"@/components/inputs/multi-select\";\n\n/**\n * Creates Unicode flag from a two-letter ISO country code.\n * https://stackoverflow.com/questions/24050671/how-to-put-japan-flag-character-in-a-string\n * @param {string} country — A two-letter ISO country code (case-insensitive).\n * @return {string}\n */\nfunction getCountryFlag(country: string) {\n\tfunction getRegionalIndicatorSymbol(letter: string) {\n\t\treturn String.fromCodePoint(\n\t\t\t0x1f1e6 - 65 + letter.toUpperCase().charCodeAt(0),\n\t\t);\n\t}\n\n\treturn (\n\t\tgetRegionalIndicatorSymbol(country[0]) +\n\t\tgetRegionalIndicatorSymbol(country[1])\n\t);\n}\n\nconst ALL_COUNTRIES: { [key: string]: string } = {\n\tAF: \"Afghanistan\",\n\tAX: \"Åland Islands\",\n\tAL: \"Albania\",\n\tDZ: \"Algeria\",\n\tAS: \"American Samoa\",\n\tAD: \"Andorra\",\n\tAO: \"Angola\",\n\tAI: \"Anguilla\",\n\tAQ: \"Antarctica\",\n\tAG: \"Antigua and Barbuda\",\n\tAR: \"Argentina\",\n\tAM: \"Armenia\",\n\tAW: \"Aruba\",\n\tAU: \"Australia\",\n\tAT: \"Austria\",\n\tAZ: \"Azerbaijan\",\n\tBS: \"Bahamas\",\n\tBH: \"Bahrain\",\n\tBD: \"Bangladesh\",\n\tBB: \"Barbados\",\n\tBY: \"Belarus\",\n\tBE: \"Belgium\",\n\tBZ: \"Belize\",\n\tBJ: \"Benin\",\n\tBM: \"Bermuda\",\n\tBT: \"Bhutan\",\n\tBO: \"Bolivia (Plurinational State of)\",\n\tBQ: \"Bonaire, Sint Eustatius and Saba\",\n\tBA: \"Bosnia and Herzegovina\",\n\tBW: \"Botswana\",\n\tBV: \"Bouvet Island\",\n\tBR: \"Brazil\",\n\tIO: \"British Indian Ocean Territory\",\n\tBN: \"Brunei Darussalam\",\n\tBG: \"Bulgaria\",\n\tBF: \"Burkina Faso\",\n\tBI: \"Burundi\",\n\tCV: \"Caboe Verde\",\n\tKH: \"Cambodia\",\n\tCM: \"Cameroon\",\n\tCA: \"Canada\",\n\tKY: \"Cayman Islands\",\n\tCF: \"Central African Republic\",\n\tTD: \"Chad\",\n\tCL: \"Chile\",\n\tCN: \"China\",\n\tCX: \"Christmas Island\",\n\tCC: \"Cocos (Keeling) Islands\",\n\tCO: \"Colombia\",\n\tKM: \"Comoros\",\n\tCG: \"Congo\",\n\tCD: \"Congo, Democratic Republic of the\",\n\tCK: \"Cook Islands\",\n\tCR: \"Costa Rica\",\n\tCI: \"Côte d'voire\",\n\tHR: \"Croatia\",\n\tCU: \"Cuba\",\n\tCW: \"Curaçao\",\n\tCY: \"Cyprus\",\n\tCZ: \"Czechia\",\n\tDK: \"Denmark\",\n\tDJ: \"Djibouti\",\n\tDM: \"Dominica\",\n\tDO: \"Dominican Republic\",\n\tEC: \"Ecuador\",\n\tEG: \"Egypt\",\n\tSV: \"El Salvador\",\n\tGQ: \"Equatorial Guinea\",\n\tER: \"Eritrea\",\n\tEE: \"Estonia\",\n\tSZ: \"Eswatini\",\n\tET: \"Ethiopia\",\n\tFK: \"Falkland Islands (Malvinas)\",\n\tFO: \"Faroe Islands\",\n\tFJ: \"Fiji\",\n\tFI: \"Finland\",\n\tFR: \"France\",\n\tGF: \"French Guiana\",\n\tPF: \"French Polynesia\",\n\tTF: \"French Southern Territories\",\n\tGA: \"Gabon\",\n\tGM: \"Gambia\",\n\tGE: \"Georgia\",\n\tDE: \"Germany\",\n\tGH: \"Ghana\",\n\tGI: \"Gibraltar\",\n\tGR: \"Greece\",\n\tGL: \"Greenland\",\n\tGD: \"Grenada\",\n\tGP: \"Guadeloupe\",\n\tGU: \"Guam\",\n\tGT: \"Guatemala\",\n\tGG: \"Guernsey\",\n\tGN: \"Guinea\",\n\tGW: \"Guinea-Bissau\",\n\tGY: \"Guyana\",\n\tHT: \"Haiti\",\n\tHM: \"Heard Island and Mcdonald Islands\",\n\tVA: \"Holy See\",\n\tHN: \"Honduras\",\n\tHK: \"Hong Kong\",\n\tHU: \"Hungary\",\n\tIS: \"Iceland\",\n\tIN: \"India\",\n\tID: \"Indonesia\",\n\tIR: \"Iran (Islamic Republic of)\",\n\tIQ: \"Iraq\",\n\tIE: \"Ireland\",\n\tIM: \"Isle of Man\",\n\tIL: \"Israel\",\n\tIT: \"Italy\",\n\tJM: \"Jamaica\",\n\tJP: \"Japan\",\n\tJE: \"Jersey\",\n\tJO: \"Jordan\",\n\tKZ: \"Kazakhstan\",\n\tKE: \"Kenya\",\n\tKI: \"Kiribati\",\n\tKP: \"Korea (Democratic People's Republic of)\",\n\tKR: \"Korea (Republic of)\",\n\tKW: \"Kuwait\",\n\tKG: \"Kyrgyzstan\",\n\tLA: \"Lao People's Democratic Republic\",\n\tLV: \"Latvia\",\n\tLB: \"Lebanon\",\n\tLS: \"Lesotho\",\n\tLR: \"Liberia\",\n\tLY: \"Libya\",\n\tLI: \"Liechtenstein\",\n\tLT: \"Lithuania\",\n\tLU: \"Luxembourg\",\n\tMO: \"Macao\",\n\tMG: \"Madagascar\",\n\tMW: \"Malawi\",\n\tMY: \"Malaysia\",\n\tMV: \"Maldives\",\n\tML: \"Mali\",\n\tMT: \"Malta\",\n\tMH: \"Marshall Islands\",\n\tMQ: \"Martinique\",\n\tMR: \"Mauritania\",\n\tMU: \"Mauritius\",\n\tYT: \"Mayotte\",\n\tMX: \"Mexico\",\n\tFM: \"Micronesia (Federated States of)\",\n\tMD: \"Moldova, Republic of\",\n\tMC: \"Monaco\",\n\tMN: \"Mongolia\",\n\tME: \"Montenegro\",\n\tMS: \"Montserrat\",\n\tMA: \"Morocco\",\n\tMZ: \"Mozambique\",\n\tMM: \"Myanmar\",\n\tNA: \"Namibia\",\n\tNR: \"Nauru\",\n\tNP: \"Nepal\",\n\tNL: \"Netherlands, Kingdom of the\",\n\tNC: \"New Caledonia\",\n\tNZ: \"New Zealand\",\n\tNI: \"Nicaragua\",\n\tNE: \"Niger\",\n\tNG: \"Nigeria\",\n\tNU: \"Niue\",\n\tNF: \"Norfolk Island\",\n\tMK: \"North Macedonia\",\n\tMP: \"Northern Mariana Islands\",\n\tNO: \"Norway\",\n\tOM: \"Oman\",\n\tPK: \"Pakistan\",\n\tPW: \"Palau\",\n\tPS: \"Palestine, State of\",\n\tPA: \"Panama\",\n\tPG: \"Papua New Guinea\",\n\tPY: \"Paraguay\",\n\tPE: \"Peru\",\n\tPH: \"Philippines\",\n\tPN: \"Pitcairn\",\n\tPL: \"Poland\",\n\tPT: \"Portugal\",\n\tPR: \"Puerto Rico\",\n\tQA: \"Qatar\",\n\tRE: \"Réunion\",\n\tRO: \"Romania\",\n\tRU: \"Russian Federation\",\n\tRW: \"Rwanda\",\n\tBL: \"Saint Barthélemy\",\n\tSH: \"Saint Helena, Ascension Island, Tristan da Cunha\",\n\tKN: \"Saint Kitts and Nevis\",\n\tLC: \"Saint Lucia\",\n\tMF: \"Saint Martin (French part)\",\n\tPM: \"Saint Pierre and Miquelon\",\n\tVC: \"Saint Vincent and the Grenadines\",\n\tWS: \"Samoa\",\n\tSM: \"San Marino\",\n\tST: \"Sao Tome and Principe\",\n\tSA: \"Saudi Arabia\",\n\tSN: \"Senegal\",\n\tRS: \"Serbia\",\n\tSC: \"Seychelles\",\n\tSL: \"Sierra Leone\",\n\tSG: \"Singapore\",\n\tSX: \"Sint Maarten (Dutch part)\",\n\tSK: \"Slovakia\",\n\tSI: \"Slovenia\",\n\tSB: \"Solomon Islands\",\n\tSO: \"Somalia\",\n\tZA: \"South Africa\",\n\tGS: \"South Georgia and the South Sandwich Islands\",\n\tSS: \"South Sudan\",\n\tES: \"Spain\",\n\tLK: \"Sri Lanka\",\n\tSD: \"Sudan\",\n\tSR: \"Suriname\",\n\tSJ: \"Svalbard and Jan Mayen\",\n\tSE: \"Sweden\",\n\tCH: \"Switzerland\",\n\tSY: \"Syrian Arab Republic\",\n\tTW: \"Taiwan, Province of China\",\n\tTJ: \"Tajikistan\",\n\tTZ: \"Tanzania, United Republic of\",\n\tTH: \"Thailand\",\n\tTL: \"Timor-Leste\",\n\tTG: \"Togo\",\n\tTK: \"Tokelau\",\n\tTO: \"Tonga\",\n\tTT: \"Trinidad and Tobago\",\n\tTN: \"Tunisia\",\n\tTR: \"Türkiye\",\n\tTM: \"Turkmenistan\",\n\tTC: \"Turks and Caicos Islands\",\n\tTV: \"Tuvalu\",\n\tUG: \"Uganda\",\n\tUA: \"Ukraine\",\n\tAE: \"United Arab Emirates\",\n\tGB: \"United Kingdom of Great Britain and Northern Ireland\",\n\tUM: \"United States Minor Outlying Islands\",\n\tUS: \"United States of America\",\n\tUY: \"Uruguay\",\n\tUZ: \"Uzbekistan\",\n\tVU: \"Vanuatu\",\n\tVE: \"Venezuela (Bolivarian Republic of)\",\n\tVN: \"Viet Nam\",\n\tVG: \"Virgin Islands (British)\",\n\tVI: \"Virgin Islands (U.S)\",\n\tWF: \"Wallis and Futuna\",\n\tEH: \"Western Sahara\",\n\tYE: \"Yemen\",\n\tZM: \"Zambia\",\n\tZW: \"Zimbabwe\",\n};\n\n/** Options for MultiSelect component */\nconst options = Object.entries(ALL_COUNTRIES).map((v) => {\n\treturn {\n\t\tlabel: (\n\t\t\t<>\n\t\t\t\t{getCountryFlag(v[0])} {v[1]}\n\t\t\t</>\n\t\t),\n\t\tvalue: v[0],\n\t};\n});\n\nexport function CountrySelect({\n\t...props\n}: Omit<MultiSelectProps, \"options\">) {\n\treturn <MultiSelect {...props} options={options} />;\n};\n\nexport function TfCountrySelect({\n\t...props\n}: Omit<TfMultiSelectProps, \"options\">) {\n\treturn <TfMultiSelect {...props} options={options} />;\n};\n"],"names":["getCountryFlag","country","getRegionalIndicatorSymbol","letter","ALL_COUNTRIES","options","v","jsxs","Fragment","CountrySelect","props","jsx","MultiSelect","TfCountrySelect","TfMultiSelect"],"mappings":";;AAaA,SAASA,EAAeC,GAAiB;AACxC,WAASC,EAA2BC,GAAgB;AACnD,WAAO,OAAO;AAAA,MACb,SAAeA,EAAO,YAAA,EAAc,WAAW,CAAC;AAAA,IAAA;AAAA,EAElD;AAEA,SACCD,EAA2BD,EAAQ,CAAC,CAAC,IACrCC,EAA2BD,EAAQ,CAAC,CAAC;AAEvC;AAEA,MAAMG,IAA2C;AAAA,EAChD,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AACL,GAGMC,IAAU,OAAO,QAAQD,CAAa,EAAE,IAAI,CAACE,OAC3C;AAAA,EACN,OACC,gBAAAC,EAAAC,GAAA,EACE,UAAA;AAAA,IAAAR,EAAeM,EAAE,CAAC,CAAC;AAAA,IAAE;AAAA,IAAEA,EAAE,CAAC;AAAA,EAAA,GAC5B;AAAA,EAED,OAAOA,EAAE,CAAC;AAAA,EAEX;AAEM,SAASG,EAAc;AAAA,EAC7B,GAAGC;AACJ,GAAsC;AACrC,SAAO,gBAAAC,EAACC,GAAA,EAAa,GAAGF,GAAO,SAAAL,EAAA,CAAkB;AAClD;AAEO,SAASQ,EAAgB;AAAA,EAC/B,GAAGH;AACJ,GAAwC;AACvC,SAAO,gBAAAC,EAACG,GAAA,EAAe,GAAGJ,GAAO,SAAAL,EAAA,CAAkB;AACpD;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"multi-select.es.js","sources":["../../../lib/components/inputs/multi-select.tsx"],"sourcesContent":["import {\n\tDropdownMenu,\n\tDropdownMenuCheckboxItem,\n\tDropdownMenuContent,\n\tDropdownMenuGroup,\n\tDropdownMenuTrigger,\n} from \"@/components/ui/dropdown-menu\";\nimport { cn } from \"@/utils\";\nimport { useFieldContext } from \"@/utils/form-context\";\nimport React, { useCallback } from \"react\";\n\nexport interface SelectionProps<V extends number | string | string[]>\n\textends Omit<\n\t\tReact.ComponentProps<\"button\">,\n\t\t\"value\" | \"values\" | \"defaultValue\"\n\t> {\n\tvalue: V;\n\tsetValue: (v: V) => void;\n\tbuttonLabel?: React.ReactNode;\n\toptions: {\n\t\tvalue: string;\n\t\tlabel: React.ReactElement;\n\t\tdisabled?: boolean;\n\t}[];\n}\n\nexport interface MultiSelectProps extends SelectionProps<string[]> { }\n\nexport function MultiSelect({\n\toptions,\n\tvalue,\n\tsetValue,\n\tbuttonLabel,\n\tclassName,\n\t...props\n}: MultiSelectProps) {\n\t// Returns an array of labels for every value that’s currently selected.\n\t// If nothing is selected, it returns an empty array.\n\tconst defaultButtonLabel = React.useCallback(() => {\n\t\tconst selected = value ?? [];\n\t\treturn options\n\t\t\t.filter((o) => selected.includes(o.value))\n\t\t\t.map((o, i, arr) => (\n\t\t\t\t<>\n\t\t\t\t\t{o.label}\n\t\t\t\t\t{i + 1 !== arr.length && <>, </>}\n\t\t\t\t</>\n\t\t\t));\n\t}, [value]);\n\n\tconst toggleValue = (v: string) => {\n\t\tvalue.includes(v)\n\t\t\t? setValue([...value.filter((vx) => vx !== v)])\n\t\t\t: setValue([...value, v]);\n\t};\n\n\t// Select/deselect all\n\tconst toggleAll = () => {\n\t\tareAllSelected() ? setValue([]) : setValue(options.map((opt) => opt.value));\n\t};\n\n\tconst isChecked = useCallback((v: string) => value.includes(v), [value]);\n\n\tconst areAllSelected = useCallback(() => {\n\t\treturn value.length === options.length;\n\t}, [value, options]);\n\n\treturn (\n\t\t<>\n\t\t\t<DropdownMenu>\n\t\t\t\t<DropdownMenuTrigger {...props} asChild>\n\t\t\t\t\t<button {...props} className={cn(\"btn-dropdown\", className)}>\n\t\t\t\t\t\t{buttonLabel ? buttonLabel : defaultButtonLabel()}\n\t\t\t\t\t</button>\n\t\t\t\t</DropdownMenuTrigger>\n\t\t\t\t<DropdownMenuContent>\n\t\t\t\t\t<DropdownMenuGroup>\n\t\t\t\t\t\t<DropdownMenuCheckboxItem\n\t\t\t\t\t\t\tclassName=\"italic\"\n\t\t\t\t\t\t\tonSelect={(e) => {\n\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t\ttoggleAll();\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\tchecked={areAllSelected()}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t(Select all)\n\t\t\t\t\t\t</DropdownMenuCheckboxItem>\n\t\t\t\t\t\t{options.map((opt) => (\n\t\t\t\t\t\t\t<DropdownMenuCheckboxItem\n\t\t\t\t\t\t\t\tonSelect={(e) => {\n\t\t\t\t\t\t\t\t\t// Don't close the popover when selecting items\n\t\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t\t\ttoggleValue(opt.value);\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\tkey={opt.value}\n\t\t\t\t\t\t\t\tdisabled={opt.disabled}\n\t\t\t\t\t\t\t\tchecked={isChecked(opt.value)}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{opt.label}\n\t\t\t\t\t\t\t</DropdownMenuCheckboxItem>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</DropdownMenuGroup>\n\t\t\t\t</DropdownMenuContent>\n\t\t\t</DropdownMenu>\n\t\t</>\n\t);\n};\n\nexport interface TfMultiSelectProps\n\textends Omit<MultiSelectProps, \"value\" | \"setValue\"> { }\nexport function TfMultiSelect({ ...props }: TfMultiSelectProps) {\n\tconst field = useFieldContext<string[]>();\n\n\treturn (\n\t\t<MultiSelect\n\t\t\tvalue={field.state.value}\n\t\t\tsetValue={field.setValue}\n\t\t\tonBlur={field.handleBlur}\n\t\t\t{...props}\n\t\t/>\n\t);\n};\n"],"names":["MultiSelect","options","value","setValue","buttonLabel","className","props","defaultButtonLabel","React","selected","o","i","arr","jsxs","Fragment","toggleValue","v","vx","toggleAll","areAllSelected","opt","isChecked","useCallback","jsx","DropdownMenu","DropdownMenuTrigger","cn","DropdownMenuContent","DropdownMenuGroup","DropdownMenuCheckboxItem","e","TfMultiSelect","field","useFieldContext"],"mappings":";;;;;AA4BO,SAASA,EAAY;AAAA,EAC3B,SAAAC;AAAA,EACA,OAAAC;AAAA,EACA,UAAAC;AAAA,EACA,aAAAC;AAAA,EACA,WAAAC;AAAA,EACA,GAAGC;AACJ,GAAqB;AAGpB,QAAMC,IAAqBC,EAAM,YAAY,MAAM;AAClD,UAAMC,IAAWP,KAAS,CAAA;AAC1B,WAAOD,EACL,OAAO,CAACS,MAAMD,EAAS,SAASC,EAAE,KAAK,CAAC,EACxC,IAAI,CAACA,GAAGC,GAAGC,MACX,gBAAAC,EAAAC,GAAA,EACE,UAAA;AAAA,MAAAJ,EAAE;AAAA,MACFC,IAAI,MAAMC,EAAI,iCAAY,UAAA,KAAA,CAAE;AAAA,IAAA,EAAA,CAC9B,CACA;AAAA,
|
|
1
|
+
{"version":3,"file":"multi-select.es.js","sources":["../../../lib/components/inputs/multi-select.tsx"],"sourcesContent":["import {\n\tDropdownMenu,\n\tDropdownMenuCheckboxItem,\n\tDropdownMenuContent,\n\tDropdownMenuGroup,\n\tDropdownMenuTrigger,\n} from \"@/components/ui/dropdown-menu\";\nimport { cn } from \"@/utils\";\nimport { useFieldContext } from \"@/utils/form-context\";\nimport React, { useCallback } from \"react\";\n\nexport interface SelectionProps<V extends number | string | string[]>\n\textends Omit<\n\t\tReact.ComponentProps<\"button\">,\n\t\t\"value\" | \"values\" | \"defaultValue\"\n\t> {\n\tvalue: V;\n\tsetValue: (v: V) => void;\n\tbuttonLabel?: React.ReactNode;\n\toptions: {\n\t\tvalue: string;\n\t\tlabel: React.ReactElement;\n\t\tdisabled?: boolean;\n\t}[];\n}\n\nexport interface MultiSelectProps extends SelectionProps<string[]> { }\n\nexport function MultiSelect({\n\toptions,\n\tvalue,\n\tsetValue,\n\tbuttonLabel,\n\tclassName,\n\t...props\n}: MultiSelectProps) {\n\t// Returns an array of labels for every value that’s currently selected.\n\t// If nothing is selected, it returns an empty array.\n\tconst defaultButtonLabel = React.useCallback(() => {\n\t\tconst selected = value ?? [];\n\t\treturn options\n\t\t\t.filter((o) => selected.includes(o.value))\n\t\t\t.map((o, i, arr) => (\n\t\t\t\t<>\n\t\t\t\t\t{o.label}\n\t\t\t\t\t{i + 1 !== arr.length && <>, </>}\n\t\t\t\t</>\n\t\t\t));\n\t}, [value]);\n\n\tconst toggleValue = (v: string) => {\n\t\tvalue.includes(v)\n\t\t\t? setValue([...value.filter((vx) => vx !== v)])\n\t\t\t: setValue([...value, v]);\n\t};\n\n\t// Select/deselect all\n\tconst toggleAll = () => {\n\t\tareAllSelected() ? setValue([]) : setValue(options.map((opt) => opt.value));\n\t};\n\n\tconst isChecked = useCallback((v: string) => value.includes(v), [value]);\n\n\tconst areAllSelected = useCallback(() => {\n\t\treturn value.length === options.length;\n\t}, [value, options]);\n\n\treturn (\n\t\t<>\n\t\t\t<DropdownMenu>\n\t\t\t\t<DropdownMenuTrigger {...props} asChild>\n\t\t\t\t\t<button {...props} className={cn(\"btn-dropdown\", className)}>\n\t\t\t\t\t\t{buttonLabel ? buttonLabel : defaultButtonLabel()}\n\t\t\t\t\t</button>\n\t\t\t\t</DropdownMenuTrigger>\n\t\t\t\t<DropdownMenuContent>\n\t\t\t\t\t<DropdownMenuGroup>\n\t\t\t\t\t\t<DropdownMenuCheckboxItem\n\t\t\t\t\t\t\tclassName=\"italic\"\n\t\t\t\t\t\t\tonSelect={(e) => {\n\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t\ttoggleAll();\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\tchecked={areAllSelected()}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t(Select all)\n\t\t\t\t\t\t</DropdownMenuCheckboxItem>\n\t\t\t\t\t\t{options.map((opt) => (\n\t\t\t\t\t\t\t<DropdownMenuCheckboxItem\n\t\t\t\t\t\t\t\tonSelect={(e) => {\n\t\t\t\t\t\t\t\t\t// Don't close the popover when selecting items\n\t\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t\t\ttoggleValue(opt.value);\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\tkey={opt.value}\n\t\t\t\t\t\t\t\tdisabled={opt.disabled}\n\t\t\t\t\t\t\t\tchecked={isChecked(opt.value)}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{opt.label}\n\t\t\t\t\t\t\t</DropdownMenuCheckboxItem>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</DropdownMenuGroup>\n\t\t\t\t</DropdownMenuContent>\n\t\t\t</DropdownMenu>\n\t\t</>\n\t);\n};\n\nexport interface TfMultiSelectProps\n\textends Omit<MultiSelectProps, \"value\" | \"setValue\"> { }\nexport function TfMultiSelect({ ...props }: TfMultiSelectProps) {\n\tconst field = useFieldContext<string[]>();\n\n\treturn (\n\t\t<MultiSelect\n\t\t\tvalue={field.state.value}\n\t\t\tsetValue={field.setValue}\n\t\t\tonBlur={field.handleBlur}\n\t\t\t{...props}\n\t\t/>\n\t);\n};\n"],"names":["MultiSelect","options","value","setValue","buttonLabel","className","props","defaultButtonLabel","React","selected","o","i","arr","jsxs","Fragment","toggleValue","v","vx","toggleAll","areAllSelected","opt","isChecked","useCallback","jsx","DropdownMenu","DropdownMenuTrigger","cn","DropdownMenuContent","DropdownMenuGroup","DropdownMenuCheckboxItem","e","TfMultiSelect","field","useFieldContext"],"mappings":";;;;;AA4BO,SAASA,EAAY;AAAA,EAC3B,SAAAC;AAAA,EACA,OAAAC;AAAA,EACA,UAAAC;AAAA,EACA,aAAAC;AAAA,EACA,WAAAC;AAAA,EACA,GAAGC;AACJ,GAAqB;AAGpB,QAAMC,IAAqBC,EAAM,YAAY,MAAM;AAClD,UAAMC,IAAWP,KAAS,CAAA;AAC1B,WAAOD,EACL,OAAO,CAACS,MAAMD,EAAS,SAASC,EAAE,KAAK,CAAC,EACxC,IAAI,CAACA,GAAGC,GAAGC,MACX,gBAAAC,EAAAC,GAAA,EACE,UAAA;AAAA,MAAAJ,EAAE;AAAA,MACFC,IAAI,MAAMC,EAAI,iCAAY,UAAA,KAAA,CAAE;AAAA,IAAA,EAAA,CAC9B,CACA;AAAA,EACH,GAAG,CAACV,CAAK,CAAC,GAEJa,IAAc,CAACC,MAAc;AAClC,IAAAd,EAAM,SAASc,CAAC,IACbb,EAAS,CAAC,GAAGD,EAAM,OAAO,CAACe,MAAOA,MAAOD,CAAC,CAAC,CAAC,IAC5Cb,EAAS,CAAC,GAAGD,GAAOc,CAAC,CAAC;AAAA,EAC1B,GAGME,IAAY,MAAM;AACvB,IAAAC,MAAmBhB,EAAS,CAAA,CAAE,IAAIA,EAASF,EAAQ,IAAI,CAACmB,MAAQA,EAAI,KAAK,CAAC;AAAA,EAC3E,GAEMC,IAAYC,EAAY,CAACN,MAAcd,EAAM,SAASc,CAAC,GAAG,CAACd,CAAK,CAAC,GAEjEiB,IAAiBG,EAAY,MAC3BpB,EAAM,WAAWD,EAAQ,QAC9B,CAACC,GAAOD,CAAO,CAAC;AAEnB,SACC,gBAAAsB,EAAAT,GAAA,EACC,4BAACU,GAAA,EACA,UAAA;AAAA,IAAA,gBAAAD,EAACE,KAAqB,GAAGnB,GAAO,SAAO,IACtC,UAAA,gBAAAiB,EAAC,YAAQ,GAAGjB,GAAO,WAAWoB,EAAG,gBAAgBrB,CAAS,GACxD,eAA4BE,KAC9B,GACD;AAAA,IACA,gBAAAgB,EAACI,GAAA,EACA,UAAA,gBAAAd,EAACe,GAAA,EACA,UAAA;AAAA,MAAA,gBAAAL;AAAA,QAACM;AAAA,QAAA;AAAA,UACA,WAAU;AAAA,UACV,UAAU,CAAC,MAAM;AAChB,cAAE,eAAA,GACFX,EAAA;AAAA,UACD;AAAA,UACA,SAASC,EAAA;AAAA,UACT,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,MAGAlB,EAAQ,IAAI,CAACmB,MACb,gBAAAG;AAAA,QAACM;AAAA,QAAA;AAAA,UACA,UAAU,CAACC,MAAM;AAEhB,YAAAA,EAAE,eAAA,GACFf,EAAYK,EAAI,KAAK;AAAA,UACtB;AAAA,UAEA,UAAUA,EAAI;AAAA,UACd,SAASC,EAAUD,EAAI,KAAK;AAAA,UAE3B,UAAAA,EAAI;AAAA,QAAA;AAAA,QAJAA,EAAI;AAAA,MAAA,CAMV;AAAA,IAAA,EAAA,CACF,EAAA,CACD;AAAA,EAAA,EAAA,CACD,EAAA,CACD;AAEF;AAIO,SAASW,EAAc,EAAE,GAAGzB,KAA6B;AAC/D,QAAM0B,IAAQC,EAAA;AAEd,SACC,gBAAAV;AAAA,IAACvB;AAAA,IAAA;AAAA,MACA,OAAOgC,EAAM,MAAM;AAAA,MACnB,UAAUA,EAAM;AAAA,MAChB,QAAQA,EAAM;AAAA,MACb,GAAG1B;AAAA,IAAA;AAAA,EAAA;AAGP;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search-input.es.js","sources":["../../../lib/components/inputs/search-input.tsx"],"sourcesContent":["\"use client\";\nimport { Input, type InputProps } from \"@/components/inputs/input\";\nimport { Search, X } from \"lucide-react\"; // Assuming LucideIcon is the type of your icons\nimport type React from \"react\";\nimport { useState } from \"react\";\n\ninterface SearchInputProps extends Omit<InputProps, \"onChange\"> {\n\tonChange?: (value: string) => void; // Function to handle input value changes\n}\n\nexport function SearchInput({\n\tonChange,\n\t...props\n}: SearchInputProps) {\n\tconst [value, setValue] = useState<string>(\"\");\n\n\tconst handleInputChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n\t\tconst newValue = event.target.value;\n\t\tsetValue(newValue);\n\t\tonChange?.(newValue); // Call the custom onChange handler with the new value\n\t};\n\n\tconst handleClearClick = () => {\n\t\tsetValue(\"\");\n\t\tonChange?.(\"\"); // Notify the parent that the input has been cleared\n\t};\n\n\treturn (\n\t\t<Input\n\t\t\ticon={Search}\n\t\t\t{...props}\n\t\t\tvalue={value}\n\t\t\tonChange={handleInputChange} // Use the internal handler\n\t\t\tbuttonProps={{\n\t\t\t\tonClick: handleClearClick,\n\t\t\t\ticon: () => X,\n\t\t\t}}\n\t\t/>\n\t);\n};\n"],"names":["SearchInput","onChange","props","value","setValue","useState","jsx","Input","Search","event","newValue","X"],"mappings":";;;;;AAUO,SAASA,EAAY;AAAA,EAC3B,UAAAC;AAAA,EACA,GAAGC;AACJ,GAAqB;AACpB,QAAM,CAACC,GAAOC,CAAQ,IAAIC,EAAiB,EAAE;AAa7C,SACC,gBAAAC;AAAA,IAACC;AAAA,IAAA;AAAA,MACA,MAAMC;AAAA,MACL,GAAGN;AAAA,MACJ,OAAAC;AAAA,MACA,UAhBwB,CAACM,MAA+C;AACzE,cAAMC,IAAWD,EAAM,OAAO;AAC9B,QAAAL,EAASM,CAAQ,GACjBT,KAAA,QAAAA,EAAWS;AAAA,
|
|
1
|
+
{"version":3,"file":"search-input.es.js","sources":["../../../lib/components/inputs/search-input.tsx"],"sourcesContent":["\"use client\";\nimport { Input, type InputProps } from \"@/components/inputs/input\";\nimport { Search, X } from \"lucide-react\"; // Assuming LucideIcon is the type of your icons\nimport type React from \"react\";\nimport { useState } from \"react\";\n\ninterface SearchInputProps extends Omit<InputProps, \"onChange\"> {\n\tonChange?: (value: string) => void; // Function to handle input value changes\n}\n\nexport function SearchInput({\n\tonChange,\n\t...props\n}: SearchInputProps) {\n\tconst [value, setValue] = useState<string>(\"\");\n\n\tconst handleInputChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n\t\tconst newValue = event.target.value;\n\t\tsetValue(newValue);\n\t\tonChange?.(newValue); // Call the custom onChange handler with the new value\n\t};\n\n\tconst handleClearClick = () => {\n\t\tsetValue(\"\");\n\t\tonChange?.(\"\"); // Notify the parent that the input has been cleared\n\t};\n\n\treturn (\n\t\t<Input\n\t\t\ticon={Search}\n\t\t\t{...props}\n\t\t\tvalue={value}\n\t\t\tonChange={handleInputChange} // Use the internal handler\n\t\t\tbuttonProps={{\n\t\t\t\tonClick: handleClearClick,\n\t\t\t\ticon: () => X,\n\t\t\t}}\n\t\t/>\n\t);\n};\n"],"names":["SearchInput","onChange","props","value","setValue","useState","jsx","Input","Search","event","newValue","X"],"mappings":";;;;;AAUO,SAASA,EAAY;AAAA,EAC3B,UAAAC;AAAA,EACA,GAAGC;AACJ,GAAqB;AACpB,QAAM,CAACC,GAAOC,CAAQ,IAAIC,EAAiB,EAAE;AAa7C,SACC,gBAAAC;AAAA,IAACC;AAAA,IAAA;AAAA,MACA,MAAMC;AAAA,MACL,GAAGN;AAAA,MACJ,OAAAC;AAAA,MACA,UAhBwB,CAACM,MAA+C;AACzE,cAAMC,IAAWD,EAAM,OAAO;AAC9B,QAAAL,EAASM,CAAQ,GACjBT,KAAA,QAAAA,EAAWS;AAAA,MACZ;AAAA,MAaE,aAAa;AAAA,QACZ,SAZsB,MAAM;AAC9B,UAAAN,EAAS,EAAE,GACXH,KAAA,QAAAA,EAAW;AAAA,QACZ;AAAA,QAUG,MAAM,MAAMU;AAAA,MAAA;AAAA,IACb;AAAA,EAAA;AAGH;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"select.es.js","sources":["../../../lib/components/inputs/select.tsx"],"sourcesContent":["\"use client\";\nimport type { SelectionProps } from \"@/components/inputs/multi-select\";\nimport {\n\tDropdownMenu,\n\tDropdownMenuContent,\n\tDropdownMenuRadioGroup,\n\tDropdownMenuRadioItem,\n\tDropdownMenuTrigger,\n} from \"@/components/ui\";\nimport { cn } from \"@/utils\";\nimport { useFieldContext } from \"@/utils/form-context\";\nimport * as React from \"react\";\n\nexport interface SingleSelectProps extends SelectionProps<string> { }\n\nexport function SingleSelect({\n\tvalue,\n\tsetValue,\n\toptions,\n\tclassName,\n\tbuttonLabel,\n\t...props\n}: SingleSelectProps) {\n\tconst defaultButtonLabel = React.useCallback(() => {\n\t\treturn options.find((o) => o.value === value)?.label;\n\t}, [value]);\n\n\treturn (\n\t\t<>\n\t\t\t<DropdownMenu>\n\t\t\t\t<DropdownMenuTrigger {...props} asChild>\n\t\t\t\t\t<button className={cn(\"btn-dropdown\", className)} {...props}>\n\t\t\t\t\t\t{buttonLabel ? buttonLabel : defaultButtonLabel()}\n\t\t\t\t\t</button>\n\t\t\t\t</DropdownMenuTrigger>\n\t\t\t\t<DropdownMenuContent>\n\t\t\t\t\t<DropdownMenuRadioGroup value={value}>\n\t\t\t\t\t\t{options.map((opt) => (\n\t\t\t\t\t\t\t<DropdownMenuRadioItem\n\t\t\t\t\t\t\t\tonSelect={() => {\n\t\t\t\t\t\t\t\t\tsetValue(opt.value);\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\tvalue={opt.value}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{opt.label}\n\t\t\t\t\t\t\t</DropdownMenuRadioItem>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</DropdownMenuRadioGroup>\n\t\t\t\t</DropdownMenuContent>\n\t\t\t</DropdownMenu>\n\t\t</>\n\t);\n}\n\nexport interface TfSingleSelectProps\n\textends Omit<SingleSelectProps, \"value\" | \"setValue\"> { }\nexport function TfSingleSelect({ ...props }: TfSingleSelectProps) {\n\tconst field = useFieldContext<string>();\n\n\treturn (\n\t\t<SingleSelect\n\t\t\tvalue={field.state.value}\n\t\t\tsetValue={field.handleChange}\n\t\t\tonBlur={field.handleBlur}\n\t\t\t{...props}\n\t\t/>\n\t);\n};\n"],"names":["SingleSelect","value","setValue","options","className","buttonLabel","props","defaultButtonLabel","React","_a","o","jsx","Fragment","DropdownMenu","DropdownMenuTrigger","cn","DropdownMenuContent","DropdownMenuRadioGroup","opt","DropdownMenuRadioItem","TfSingleSelect","field","useFieldContext"],"mappings":";;;;;;AAeO,SAASA,EAAa;AAAA,EAC5B,OAAAC;AAAA,EACA,UAAAC;AAAA,EACA,SAAAC;AAAA,EACA,WAAAC;AAAA,EACA,aAAAC;AAAA,EACA,GAAGC;AACJ,GAAsB;AACrB,QAAMC,IAAqBC,EAAM,YAAY,MAAM;;AAClD,YAAOC,IAAAN,EAAQ,KAAK,CAACO,MAAMA,EAAE,UAAUT,CAAK,MAArC,gBAAAQ,EAAwC;AAAA,
|
|
1
|
+
{"version":3,"file":"select.es.js","sources":["../../../lib/components/inputs/select.tsx"],"sourcesContent":["\"use client\";\nimport type { SelectionProps } from \"@/components/inputs/multi-select\";\nimport {\n\tDropdownMenu,\n\tDropdownMenuContent,\n\tDropdownMenuRadioGroup,\n\tDropdownMenuRadioItem,\n\tDropdownMenuTrigger,\n} from \"@/components/ui\";\nimport { cn } from \"@/utils\";\nimport { useFieldContext } from \"@/utils/form-context\";\nimport * as React from \"react\";\n\nexport interface SingleSelectProps extends SelectionProps<string> { }\n\nexport function SingleSelect({\n\tvalue,\n\tsetValue,\n\toptions,\n\tclassName,\n\tbuttonLabel,\n\t...props\n}: SingleSelectProps) {\n\tconst defaultButtonLabel = React.useCallback(() => {\n\t\treturn options.find((o) => o.value === value)?.label;\n\t}, [value]);\n\n\treturn (\n\t\t<>\n\t\t\t<DropdownMenu>\n\t\t\t\t<DropdownMenuTrigger {...props} asChild>\n\t\t\t\t\t<button className={cn(\"btn-dropdown\", className)} {...props}>\n\t\t\t\t\t\t{buttonLabel ? buttonLabel : defaultButtonLabel()}\n\t\t\t\t\t</button>\n\t\t\t\t</DropdownMenuTrigger>\n\t\t\t\t<DropdownMenuContent>\n\t\t\t\t\t<DropdownMenuRadioGroup value={value}>\n\t\t\t\t\t\t{options.map((opt) => (\n\t\t\t\t\t\t\t<DropdownMenuRadioItem\n\t\t\t\t\t\t\t\tonSelect={() => {\n\t\t\t\t\t\t\t\t\tsetValue(opt.value);\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\tvalue={opt.value}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{opt.label}\n\t\t\t\t\t\t\t</DropdownMenuRadioItem>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</DropdownMenuRadioGroup>\n\t\t\t\t</DropdownMenuContent>\n\t\t\t</DropdownMenu>\n\t\t</>\n\t);\n}\n\nexport interface TfSingleSelectProps\n\textends Omit<SingleSelectProps, \"value\" | \"setValue\"> { }\nexport function TfSingleSelect({ ...props }: TfSingleSelectProps) {\n\tconst field = useFieldContext<string>();\n\n\treturn (\n\t\t<SingleSelect\n\t\t\tvalue={field.state.value}\n\t\t\tsetValue={field.handleChange}\n\t\t\tonBlur={field.handleBlur}\n\t\t\t{...props}\n\t\t/>\n\t);\n};\n"],"names":["SingleSelect","value","setValue","options","className","buttonLabel","props","defaultButtonLabel","React","_a","o","jsx","Fragment","DropdownMenu","DropdownMenuTrigger","cn","DropdownMenuContent","DropdownMenuRadioGroup","opt","DropdownMenuRadioItem","TfSingleSelect","field","useFieldContext"],"mappings":";;;;;;AAeO,SAASA,EAAa;AAAA,EAC5B,OAAAC;AAAA,EACA,UAAAC;AAAA,EACA,SAAAC;AAAA,EACA,WAAAC;AAAA,EACA,aAAAC;AAAA,EACA,GAAGC;AACJ,GAAsB;AACrB,QAAMC,IAAqBC,EAAM,YAAY,MAAM;;AAClD,YAAOC,IAAAN,EAAQ,KAAK,CAACO,MAAMA,EAAE,UAAUT,CAAK,MAArC,gBAAAQ,EAAwC;AAAA,EAChD,GAAG,CAACR,CAAK,CAAC;AAEV,SACC,gBAAAU,EAAAC,GAAA,EACC,4BAACC,GAAA,EACA,UAAA;AAAA,IAAA,gBAAAF,EAACG,KAAqB,GAAGR,GAAO,SAAO,IACtC,UAAA,gBAAAK,EAAC,YAAO,WAAWI,EAAG,gBAAgBX,CAAS,GAAI,GAAGE,GACpD,eAA4BC,KAC9B,GACD;AAAA,IACA,gBAAAI,EAACK,KACA,UAAA,gBAAAL,EAACM,GAAA,EAAuB,OAAAhB,GACtB,UAAAE,EAAQ,IAAI,CAACe,MACb,gBAAAP;AAAA,MAACQ;AAAA,MAAA;AAAA,QACA,UAAU,MAAM;AACf,UAAAjB,EAASgB,EAAI,KAAK;AAAA,QACnB;AAAA,QACA,OAAOA,EAAI;AAAA,QAEV,UAAAA,EAAI;AAAA,MAAA;AAAA,IAAA,CAEN,GACF,EAAA,CACD;AAAA,EAAA,EAAA,CACD,EAAA,CACD;AAEF;AAIO,SAASE,EAAe,EAAE,GAAGd,KAA8B;AACjE,QAAMe,IAAQC,EAAA;AAEd,SACC,gBAAAX;AAAA,IAACX;AAAA,IAAA;AAAA,MACA,OAAOqB,EAAM,MAAM;AAAA,MACnB,UAAUA,EAAM;AAAA,MAChB,QAAQA,EAAM;AAAA,MACb,GAAGf;AAAA,IAAA;AAAA,EAAA;AAGP;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"key-value-card.es.js","sources":["../../../lib/components/key-value-card/key-value-card.tsx"],"sourcesContent":["import { Badge } from \"@/components/ui/badge\";\nimport {\n\tCard,\n\tCardContent,\n\tCardHeader,\n\tCardTitle,\n\tCopyButton,\n\tFormatDate,\n\tSkeleton,\n} from \"@/index\";\n\n// Utility type to handle nested keys (dot notation) in any object\ntype NestedKeyOf<T> = T extends object\n\t? {\n\t\t\t[K in keyof T]: K extends string | number\n\t\t\t\t? `${K & string}` | `${K & string}.${NestedKeyOf<T[K]>}`\n\t\t\t\t: never;\n\t\t}[keyof T]\n\t: never;\n\n// DisplayField type that works with nested keys\nexport type DisplayField<T> = {\n\tdisplay: string;\n\taccessor: NestedKeyOf<T>;\n\ttype?:\n\t\t| \"text\"\n\t\t| \"badge\"\n\t\t| \"boolean\"\n\t\t| \"date\"\n\t\t| \"yesno\"\n\t\t| \"copyButton\"\n\t\t| \"link\"; // Field types\n\ttransform?: (value: any) => React.ReactNode;\n};\n\nexport interface KeyValueCardProps<T> {\n\tdata: T; // Ensure data is of type T\n\tlabel: string;\n\tfields: DisplayField<T>[];\n\tclassName?: string;\n}\n\nexport const KeyValueCard = <T extends {}>({\n\tdata,\n\tlabel,\n\tfields,\n}: KeyValueCardProps<T>) => {\n\tconst renderValue = (field: DisplayField<T>, value: any) => {\n\t\tif (field.transform) {\n\t\t\treturn field.transform(value);\n\t\t}\n\t\tif (value === undefined || value === null) {\n\t\t\treturn \"-\";\n\t\t}\n\t\tswitch (field.type) {\n\t\t\tcase \"link\":\n\t\t\t// return <Link to={value}>{value}</Link>;\n\t\t\tcase \"copyButton\":\n\t\t\t\treturn (\n\t\t\t\t\t<span className=\"flex items-center gap-2\">\n\t\t\t\t\t\t{value}\n\t\t\t\t\t\t<CopyButton value={value} />\n\t\t\t\t\t</span>\n\t\t\t\t);\n\t\t\tcase \"date\":\n\t\t\t\treturn <span>{FormatDate(value)}</span>;\n\t\t\tcase \"yesno\":\n\t\t\t\treturn <span>{value ? \"Yes\" : \"No\"}</span>;\n\t\t\tcase \"badge\":\n\t\t\t\treturn (\n\t\t\t\t\t<div className=\"flex flex-wrap gap-1\">\n\t\t\t\t\t\t{Array.isArray(value)\n\t\t\t\t\t\t\t? value.map((item, index) => (\n\t\t\t\t\t\t\t\t\t<Badge key={index}>\n\t\t\t\t\t\t\t\t\t\t{typeof item === \"object\" ? item?.name || item?.id : item}\n\t\t\t\t\t\t\t\t\t</Badge>\n\t\t\t\t\t\t\t\t))\n\t\t\t\t\t\t\t: value}\n\t\t\t\t\t</div>\n\t\t\t\t);\n\n\t\t\tcase \"boolean\":\n\t\t\t\treturn <span>{value.toString()}</span>;\n\t\t\tdefault:\n\t\t\t\treturn <span>{value}</span>;\n\t\t}\n\t};\n\n\treturn (\n\t\t<Card>\n\t\t\t<CardHeader>\n\t\t\t\t<CardTitle>{label}</CardTitle>\n\t\t\t</CardHeader>\n\t\t\t<CardContent>\n\t\t\t\t<div className=\"flex flex-col gap-2\">\n\t\t\t\t\t{data\n\t\t\t\t\t\t? fields.map((field) => {\n\t\t\t\t\t\t\t\t// TODO: improve this\n\t\t\t\t\t\t\t\tconst value = field.accessor\n\t\t\t\t\t\t\t\t\t? field.accessor\n\t\t\t\t\t\t\t\t\t\t\t.split(\".\")\n\t\t\t\t\t\t\t\t\t\t\t.reduce(\n\t\t\t\t\t\t\t\t\t\t\t\t(obj, key) =>\n\t\t\t\t\t\t\t\t\t\t\t\t\tobj && key in obj ? obj[key] : undefined,\n\t\t\t\t\t\t\t\t\t\t\t\tdata as Record<string, any>,\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t: null;\n\n\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\tkey={field.display}\n\t\t\t\t\t\t\t\t\t\tclassName=\"flex w-full flex-col md:flex-row justify-between first:pt-0 last:pb-0\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<p className=\"text-sm flex w-full justify-start col-span-1\">\n\t\t\t\t\t\t\t\t\t\t\t{field.display}\n\t\t\t\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t\t\t\t<div className=\"text-sm flex w-full justify-start text-wrap break-all\">\n\t\t\t\t\t\t\t\t\t\t\t{renderValue(field, value)}\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t: fields.map((_, index) => (\n\t\t\t\t\t\t\t\t<Skeleton key={index} className=\"h-12 w-full\" />\n\t\t\t\t\t\t\t))}\n\t\t\t\t</div>\n\t\t\t</CardContent>\n\t\t</Card>\n\t);\n};\n"],"names":["KeyValueCard","data","label","fields","renderValue","field","value","jsxs","jsx","CopyButton","FormatDate","item","index","Badge","Card","CardHeader","CardTitle","CardContent","obj","key","_","Skeleton"],"mappings":";;;;;;;;;AA0CO,MAAMA,IAAe,CAAe;AAAA,EAC1C,MAAAC;AAAA,EACA,OAAAC;AAAA,EACA,QAAAC;AACD,MAA4B;AAC3B,QAAMC,IAAc,CAACC,GAAwBC,MAAe;AAC3D,QAAID,EAAM;AACT,aAAOA,EAAM,UAAUC,CAAK;AAE7B,QAA2BA,KAAU;AACpC,aAAO;AAER,YAAQD,EAAM,MAAA;AAAA,MACb,KAAK;AAAA,MAEL,KAAK;AACJ,eACC,gBAAAE,EAAC,QAAA,EAAK,WAAU,2BACd,UAAA;AAAA,UAAAD;AAAA,UACD,gBAAAE,EAACC,KAAW,OAAAH,EAAA,CAAc;AAAA,QAAA,GAC3B;AAAA,MAEF,KAAK;AACJ,eAAO,gBAAAE,EAAC,QAAA,EAAM,UAAAE,EAAWJ,CAAK,GAAE;AAAA,MACjC,KAAK;AACJ,eAAO,gBAAAE,EAAC,QAAA,EAAM,UAAAF,IAAQ,QAAQ,MAAK;AAAA,MACpC,KAAK;AACJ,eACC,gBAAAE,EAAC,OAAA,EAAI,WAAU,wBACb,UAAA,MAAM,QAAQF,CAAK,IACjBA,EAAM,IAAI,CAACK,GAAMC,wBAChBC,GAAA,EACC,UAAA,OAAOF,KAAS,YAAWA,KAAA,gBAAAA,EAAM,UAAQA,KAAA,gBAAAA,EAAM,MAAKA,EAAA,GAD1CC,CAEZ,CACA,IACAN,EAAA,CACJ;AAAA,MAGF,KAAK;AACJ,eAAO,gBAAAE,EAAC,QAAA,EAAM,UAAAF,EAAM,SAAA,GAAW;AAAA,MAChC;AACC,eAAO,gBAAAE,EAAC,UAAM,UAAAF,EAAA,CAAM;AAAA,IAAA;AAAA,
|
|
1
|
+
{"version":3,"file":"key-value-card.es.js","sources":["../../../lib/components/key-value-card/key-value-card.tsx"],"sourcesContent":["import { Badge } from \"@/components/ui/badge\";\nimport {\n\tCard,\n\tCardContent,\n\tCardHeader,\n\tCardTitle,\n\tCopyButton,\n\tFormatDate,\n\tSkeleton,\n} from \"@/index\";\n\n// Utility type to handle nested keys (dot notation) in any object\ntype NestedKeyOf<T> = T extends object\n\t? {\n\t\t\t[K in keyof T]: K extends string | number\n\t\t\t\t? `${K & string}` | `${K & string}.${NestedKeyOf<T[K]>}`\n\t\t\t\t: never;\n\t\t}[keyof T]\n\t: never;\n\n// DisplayField type that works with nested keys\nexport type DisplayField<T> = {\n\tdisplay: string;\n\taccessor: NestedKeyOf<T>;\n\ttype?:\n\t\t| \"text\"\n\t\t| \"badge\"\n\t\t| \"boolean\"\n\t\t| \"date\"\n\t\t| \"yesno\"\n\t\t| \"copyButton\"\n\t\t| \"link\"; // Field types\n\ttransform?: (value: any) => React.ReactNode;\n};\n\nexport interface KeyValueCardProps<T> {\n\tdata: T; // Ensure data is of type T\n\tlabel: string;\n\tfields: DisplayField<T>[];\n\tclassName?: string;\n}\n\nexport const KeyValueCard = <T extends {}>({\n\tdata,\n\tlabel,\n\tfields,\n}: KeyValueCardProps<T>) => {\n\tconst renderValue = (field: DisplayField<T>, value: any) => {\n\t\tif (field.transform) {\n\t\t\treturn field.transform(value);\n\t\t}\n\t\tif (value === undefined || value === null) {\n\t\t\treturn \"-\";\n\t\t}\n\t\tswitch (field.type) {\n\t\t\tcase \"link\":\n\t\t\t// return <Link to={value}>{value}</Link>;\n\t\t\tcase \"copyButton\":\n\t\t\t\treturn (\n\t\t\t\t\t<span className=\"flex items-center gap-2\">\n\t\t\t\t\t\t{value}\n\t\t\t\t\t\t<CopyButton value={value} />\n\t\t\t\t\t</span>\n\t\t\t\t);\n\t\t\tcase \"date\":\n\t\t\t\treturn <span>{FormatDate(value)}</span>;\n\t\t\tcase \"yesno\":\n\t\t\t\treturn <span>{value ? \"Yes\" : \"No\"}</span>;\n\t\t\tcase \"badge\":\n\t\t\t\treturn (\n\t\t\t\t\t<div className=\"flex flex-wrap gap-1\">\n\t\t\t\t\t\t{Array.isArray(value)\n\t\t\t\t\t\t\t? value.map((item, index) => (\n\t\t\t\t\t\t\t\t\t<Badge key={index}>\n\t\t\t\t\t\t\t\t\t\t{typeof item === \"object\" ? item?.name || item?.id : item}\n\t\t\t\t\t\t\t\t\t</Badge>\n\t\t\t\t\t\t\t\t))\n\t\t\t\t\t\t\t: value}\n\t\t\t\t\t</div>\n\t\t\t\t);\n\n\t\t\tcase \"boolean\":\n\t\t\t\treturn <span>{value.toString()}</span>;\n\t\t\tdefault:\n\t\t\t\treturn <span>{value}</span>;\n\t\t}\n\t};\n\n\treturn (\n\t\t<Card>\n\t\t\t<CardHeader>\n\t\t\t\t<CardTitle>{label}</CardTitle>\n\t\t\t</CardHeader>\n\t\t\t<CardContent>\n\t\t\t\t<div className=\"flex flex-col gap-2\">\n\t\t\t\t\t{data\n\t\t\t\t\t\t? fields.map((field) => {\n\t\t\t\t\t\t\t\t// TODO: improve this\n\t\t\t\t\t\t\t\tconst value = field.accessor\n\t\t\t\t\t\t\t\t\t? field.accessor\n\t\t\t\t\t\t\t\t\t\t\t.split(\".\")\n\t\t\t\t\t\t\t\t\t\t\t.reduce(\n\t\t\t\t\t\t\t\t\t\t\t\t(obj, key) =>\n\t\t\t\t\t\t\t\t\t\t\t\t\tobj && key in obj ? obj[key] : undefined,\n\t\t\t\t\t\t\t\t\t\t\t\tdata as Record<string, any>,\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t: null;\n\n\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\tkey={field.display}\n\t\t\t\t\t\t\t\t\t\tclassName=\"flex w-full flex-col md:flex-row justify-between first:pt-0 last:pb-0\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<p className=\"text-sm flex w-full justify-start col-span-1\">\n\t\t\t\t\t\t\t\t\t\t\t{field.display}\n\t\t\t\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t\t\t\t<div className=\"text-sm flex w-full justify-start text-wrap break-all\">\n\t\t\t\t\t\t\t\t\t\t\t{renderValue(field, value)}\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t: fields.map((_, index) => (\n\t\t\t\t\t\t\t\t<Skeleton key={index} className=\"h-12 w-full\" />\n\t\t\t\t\t\t\t))}\n\t\t\t\t</div>\n\t\t\t</CardContent>\n\t\t</Card>\n\t);\n};\n"],"names":["KeyValueCard","data","label","fields","renderValue","field","value","jsxs","jsx","CopyButton","FormatDate","item","index","Badge","Card","CardHeader","CardTitle","CardContent","obj","key","_","Skeleton"],"mappings":";;;;;;;;;AA0CO,MAAMA,IAAe,CAAe;AAAA,EAC1C,MAAAC;AAAA,EACA,OAAAC;AAAA,EACA,QAAAC;AACD,MAA4B;AAC3B,QAAMC,IAAc,CAACC,GAAwBC,MAAe;AAC3D,QAAID,EAAM;AACT,aAAOA,EAAM,UAAUC,CAAK;AAE7B,QAA2BA,KAAU;AACpC,aAAO;AAER,YAAQD,EAAM,MAAA;AAAA,MACb,KAAK;AAAA,MAEL,KAAK;AACJ,eACC,gBAAAE,EAAC,QAAA,EAAK,WAAU,2BACd,UAAA;AAAA,UAAAD;AAAA,UACD,gBAAAE,EAACC,KAAW,OAAAH,EAAA,CAAc;AAAA,QAAA,GAC3B;AAAA,MAEF,KAAK;AACJ,eAAO,gBAAAE,EAAC,QAAA,EAAM,UAAAE,EAAWJ,CAAK,GAAE;AAAA,MACjC,KAAK;AACJ,eAAO,gBAAAE,EAAC,QAAA,EAAM,UAAAF,IAAQ,QAAQ,MAAK;AAAA,MACpC,KAAK;AACJ,eACC,gBAAAE,EAAC,OAAA,EAAI,WAAU,wBACb,UAAA,MAAM,QAAQF,CAAK,IACjBA,EAAM,IAAI,CAACK,GAAMC,wBAChBC,GAAA,EACC,UAAA,OAAOF,KAAS,YAAWA,KAAA,gBAAAA,EAAM,UAAQA,KAAA,gBAAAA,EAAM,MAAKA,EAAA,GAD1CC,CAEZ,CACA,IACAN,EAAA,CACJ;AAAA,MAGF,KAAK;AACJ,eAAO,gBAAAE,EAAC,QAAA,EAAM,UAAAF,EAAM,SAAA,GAAW;AAAA,MAChC;AACC,eAAO,gBAAAE,EAAC,UAAM,UAAAF,EAAA,CAAM;AAAA,IAAA;AAAA,EAEvB;AAEA,2BACEQ,GAAA,EACA,UAAA;AAAA,IAAA,gBAAAN,EAACO,GAAA,EACA,UAAA,gBAAAP,EAACQ,GAAA,EAAW,UAAAd,EAAA,CAAM,GACnB;AAAA,IACA,gBAAAM,EAACS,GAAA,EACA,UAAA,gBAAAT,EAAC,OAAA,EAAI,WAAU,uBACb,UAAAP,IACEE,EAAO,IAAI,CAACE,MAAU;AAEtB,YAAMC,IAAQD,EAAM,WACjBA,EAAM,SACL,MAAM,GAAG,EACT;AAAA,QACA,CAACa,GAAKC,MACLD,KAAOC,KAAOD,IAAMA,EAAIC,CAAG,IAAI;AAAA,QAChClB;AAAA,MAAA,IAED;AAEH,aACC,gBAAAM;AAAA,QAAC;AAAA,QAAA;AAAA,UAEA,WAAU;AAAA,UAEV,UAAA;AAAA,YAAA,gBAAAC,EAAC,KAAA,EAAE,WAAU,gDACX,UAAAH,EAAM,SACR;AAAA,8BACC,OAAA,EAAI,WAAU,yDACb,UAAAD,EAAYC,GAAOC,CAAK,EAAA,CAC1B;AAAA,UAAA;AAAA,QAAA;AAAA,QARKD,EAAM;AAAA,MAAA;AAAA,IAWd,CAAC,IACAF,EAAO,IAAI,CAACiB,GAAGR,MACf,gBAAAJ,EAACa,GAAA,EAAqB,WAAU,cAAA,GAAjBT,CAA+B,CAC9C,GACJ,EAAA,CACD;AAAA,EAAA,GACD;AAEF;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"copy-button.es.js","sources":["../../../lib/components/ui/copy-button.tsx"],"sourcesContent":["\"use client\";\nimport {\n\tButton,\n\tTooltip,\n\tTooltipContent,\n\tTooltipProvider,\n\tTooltipTrigger,\n} from \"@/index\";\nimport { CheckCheck, Copy } from \"lucide-react\";\nimport { useState } from \"react\";\n\ninterface CopyProps {\n\tvalue: string;\n\ttooltipMessage?: string;\n\tonCopy?: () => void;\n}\n\nexport const COPY_BUTTON_STATE_TIMEOUT = 5000;\nexport function CopyButton({\n\tvalue,\n\ttooltipMessage = \"Copy to clipboard\",\n\tonCopy,\n}: CopyProps) {\n\tconst [copied, setCopied] = useState(false);\n\n\tconst copyToClipboard = async () => {\n\t\ttry {\n\t\t\tawait navigator.clipboard.writeText(value);\n\t\t\tsetCopied(true);\n\t\t\tonCopy?.();\n\n\t\t\tsetTimeout(() => {\n\t\t\t\tsetCopied(false);\n\t\t\t}, COPY_BUTTON_STATE_TIMEOUT);\n\t\t} catch (err) {\n\t\t\tconsole.error(\"Failed to copy text:\", err);\n\t\t}\n\t};\n\tif (!value) return;\n\treturn (\n\t\t<TooltipProvider>\n\t\t\t<Tooltip delayDuration={0}>\n\t\t\t\t<TooltipTrigger asChild>\n\t\t\t\t\t<Button\n\t\t\t\t\t\tonClick={copyToClipboard}\n\t\t\t\t\t\tvariant=\"outline\"\n\t\t\t\t\t\tsize=\"xs\"\n\t\t\t\t\t\ticon={() => (copied ? CheckCheck : Copy)}\n\t\t\t\t\t/>\n\t\t\t\t</TooltipTrigger>\n\t\t\t\t<TooltipContent>{copied ? \"Copied\" : tooltipMessage}</TooltipContent>\n\t\t\t</Tooltip>\n\t\t</TooltipProvider>\n\t);\n}\n"],"names":["COPY_BUTTON_STATE_TIMEOUT","CopyButton","value","tooltipMessage","onCopy","copied","setCopied","useState","copyToClipboard","err","jsx","TooltipProvider","jsxs","Tooltip","TooltipTrigger","Button","CheckCheck","Copy","TooltipContent"],"mappings":";;;;;;;;AAiBO,MAAMA,IAA4B;AAClC,SAASC,EAAW;AAAA,EAC1B,OAAAC;AAAA,EACA,gBAAAC,IAAiB;AAAA,EACjB,QAAAC;AACD,GAAc;AACb,QAAM,CAACC,GAAQC,CAAS,IAAIC,EAAS,EAAK,GAEpCC,IAAkB,YAAY;AACnC,QAAI;AACH,YAAM,UAAU,UAAU,UAAUN,CAAK,GACzCI,EAAU,EAAI,GACdF,KAAA,QAAAA,KAEA,WAAW,MAAM;AAChB,QAAAE,EAAU,EAAK;AAAA,
|
|
1
|
+
{"version":3,"file":"copy-button.es.js","sources":["../../../lib/components/ui/copy-button.tsx"],"sourcesContent":["\"use client\";\nimport {\n\tButton,\n\tTooltip,\n\tTooltipContent,\n\tTooltipProvider,\n\tTooltipTrigger,\n} from \"@/index\";\nimport { CheckCheck, Copy } from \"lucide-react\";\nimport { useState } from \"react\";\n\ninterface CopyProps {\n\tvalue: string;\n\ttooltipMessage?: string;\n\tonCopy?: () => void;\n}\n\nexport const COPY_BUTTON_STATE_TIMEOUT = 5000;\nexport function CopyButton({\n\tvalue,\n\ttooltipMessage = \"Copy to clipboard\",\n\tonCopy,\n}: CopyProps) {\n\tconst [copied, setCopied] = useState(false);\n\n\tconst copyToClipboard = async () => {\n\t\ttry {\n\t\t\tawait navigator.clipboard.writeText(value);\n\t\t\tsetCopied(true);\n\t\t\tonCopy?.();\n\n\t\t\tsetTimeout(() => {\n\t\t\t\tsetCopied(false);\n\t\t\t}, COPY_BUTTON_STATE_TIMEOUT);\n\t\t} catch (err) {\n\t\t\tconsole.error(\"Failed to copy text:\", err);\n\t\t}\n\t};\n\tif (!value) return;\n\treturn (\n\t\t<TooltipProvider>\n\t\t\t<Tooltip delayDuration={0}>\n\t\t\t\t<TooltipTrigger asChild>\n\t\t\t\t\t<Button\n\t\t\t\t\t\tonClick={copyToClipboard}\n\t\t\t\t\t\tvariant=\"outline\"\n\t\t\t\t\t\tsize=\"xs\"\n\t\t\t\t\t\ticon={() => (copied ? CheckCheck : Copy)}\n\t\t\t\t\t/>\n\t\t\t\t</TooltipTrigger>\n\t\t\t\t<TooltipContent>{copied ? \"Copied\" : tooltipMessage}</TooltipContent>\n\t\t\t</Tooltip>\n\t\t</TooltipProvider>\n\t);\n}\n"],"names":["COPY_BUTTON_STATE_TIMEOUT","CopyButton","value","tooltipMessage","onCopy","copied","setCopied","useState","copyToClipboard","err","jsx","TooltipProvider","jsxs","Tooltip","TooltipTrigger","Button","CheckCheck","Copy","TooltipContent"],"mappings":";;;;;;;;AAiBO,MAAMA,IAA4B;AAClC,SAASC,EAAW;AAAA,EAC1B,OAAAC;AAAA,EACA,gBAAAC,IAAiB;AAAA,EACjB,QAAAC;AACD,GAAc;AACb,QAAM,CAACC,GAAQC,CAAS,IAAIC,EAAS,EAAK,GAEpCC,IAAkB,YAAY;AACnC,QAAI;AACH,YAAM,UAAU,UAAU,UAAUN,CAAK,GACzCI,EAAU,EAAI,GACdF,KAAA,QAAAA,KAEA,WAAW,MAAM;AAChB,QAAAE,EAAU,EAAK;AAAA,MAChB,GAAGN,CAAyB;AAAA,IAC7B,SAASS,GAAK;AACb,cAAQ,MAAM,wBAAwBA,CAAG;AAAA,IAC1C;AAAA,EACD;AACA,MAAKP;AACL,WACC,gBAAAQ,EAACC,GAAA,EACA,UAAA,gBAAAC,EAACC,GAAA,EAAQ,eAAe,GACvB,UAAA;AAAA,MAAA,gBAAAH,EAACI,GAAA,EAAe,SAAO,IACtB,UAAA,gBAAAJ;AAAA,QAACK;AAAA,QAAA;AAAA,UACA,SAASP;AAAA,UACT,SAAQ;AAAA,UACR,MAAK;AAAA,UACL,MAAM,MAAOH,IAASW,IAAaC;AAAA,QAAA;AAAA,MAAA,GAErC;AAAA,MACA,gBAAAP,EAACQ,GAAA,EAAgB,UAAAb,IAAS,WAAWF,EAAA,CAAe;AAAA,IAAA,EAAA,CACrD,EAAA,CACD;AAEF;"}
|
|
@@ -1,26 +1,26 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { jsx as
|
|
3
|
-
import { Root as d, Trigger as l, Close as n, Portal as c, Overlay as m, Content as f, Title as u, Description as
|
|
4
|
-
import { cva as
|
|
5
|
-
import { cn as
|
|
6
|
-
import {
|
|
7
|
-
const
|
|
8
|
-
function
|
|
9
|
-
className:
|
|
10
|
-
...
|
|
2
|
+
import { jsx as a, jsxs as s } from "react/jsx-runtime";
|
|
3
|
+
import { Root as d, Trigger as l, Close as n, Portal as c, Overlay as m, Content as f, Title as u, Description as h } from "../../node_modules/.pnpm/@radix-ui_react-dialog@1.1.14_@types_react-dom@19.1.0_@types_react@19.1.0_react-dom@19.1.0_react@19.1.0/node_modules/@radix-ui/react-dialog/dist/index.es.js";
|
|
4
|
+
import { cva as p } from "class-variance-authority";
|
|
5
|
+
import { cn as o } from "../../utils/index.es.js";
|
|
6
|
+
import { X as x } from "lucide-react";
|
|
7
|
+
const j = d, T = l, z = n, b = c;
|
|
8
|
+
function g({
|
|
9
|
+
className: e,
|
|
10
|
+
...t
|
|
11
11
|
}) {
|
|
12
|
-
return /* @__PURE__ */
|
|
12
|
+
return /* @__PURE__ */ a(
|
|
13
13
|
m,
|
|
14
14
|
{
|
|
15
|
-
className:
|
|
15
|
+
className: o(
|
|
16
16
|
"fixed inset-0 z-50 bg-background/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
|
|
17
|
-
|
|
17
|
+
e
|
|
18
18
|
),
|
|
19
|
-
...
|
|
19
|
+
...t
|
|
20
20
|
}
|
|
21
21
|
);
|
|
22
22
|
}
|
|
23
|
-
const
|
|
23
|
+
const N = p(
|
|
24
24
|
"fixed z-50 gap-4 bg-background p-4 transition ease-in-out data-[state=closed]:duration-300 data-[state=open]:duration-500 data-[state=open]:animate-in data-[state=closed]:animate-out",
|
|
25
25
|
{
|
|
26
26
|
variants: {
|
|
@@ -36,88 +36,92 @@ const y = h(
|
|
|
36
36
|
}
|
|
37
37
|
}
|
|
38
38
|
);
|
|
39
|
-
function
|
|
40
|
-
side:
|
|
41
|
-
className:
|
|
39
|
+
function k({
|
|
40
|
+
side: e = "right",
|
|
41
|
+
className: t,
|
|
42
42
|
children: i,
|
|
43
43
|
...r
|
|
44
44
|
}) {
|
|
45
45
|
return /* @__PURE__ */ s(b, { children: [
|
|
46
|
-
/* @__PURE__ */
|
|
47
|
-
/* @__PURE__ */
|
|
46
|
+
/* @__PURE__ */ a(g, {}),
|
|
47
|
+
/* @__PURE__ */ a(
|
|
48
48
|
f,
|
|
49
49
|
{
|
|
50
|
-
className:
|
|
50
|
+
className: o(N({ side: e }), t),
|
|
51
51
|
...r,
|
|
52
|
-
children:
|
|
53
|
-
/* @__PURE__ */ s(n, { className: "absolute right-4 top-4 opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-hidden focus:ring-1 focus:ring-ring disabled:pointer-events-none data-[state=open]:bg-secondary", children: [
|
|
54
|
-
/* @__PURE__ */ o(g, { className: "size-icon" }),
|
|
55
|
-
/* @__PURE__ */ o("span", { className: "sr-only", children: "Close" })
|
|
56
|
-
] }),
|
|
57
|
-
i
|
|
58
|
-
]
|
|
52
|
+
children: i
|
|
59
53
|
}
|
|
60
54
|
)
|
|
61
55
|
] });
|
|
62
56
|
}
|
|
63
|
-
function D({
|
|
64
|
-
|
|
57
|
+
function D({
|
|
58
|
+
className: e,
|
|
59
|
+
...t
|
|
60
|
+
}) {
|
|
61
|
+
return /* @__PURE__ */ s(
|
|
65
62
|
"div",
|
|
66
63
|
{
|
|
67
|
-
className:
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
64
|
+
className: o("flex justify-between items-start", e),
|
|
65
|
+
...t,
|
|
66
|
+
children: [
|
|
67
|
+
/* @__PURE__ */ a("div", { className: "flex flex-col space-y-2 text-left", children: t.children }),
|
|
68
|
+
/* @__PURE__ */ s(n, { className: "btn", children: [
|
|
69
|
+
/* @__PURE__ */ a(x, { className: "size-icon" }),
|
|
70
|
+
/* @__PURE__ */ a("span", { className: "sr-only", children: "Close" })
|
|
71
|
+
] })
|
|
72
|
+
]
|
|
72
73
|
}
|
|
73
74
|
);
|
|
74
75
|
}
|
|
75
|
-
function O({
|
|
76
|
-
|
|
76
|
+
function O({
|
|
77
|
+
className: e,
|
|
78
|
+
...t
|
|
79
|
+
}) {
|
|
80
|
+
return /* @__PURE__ */ a(
|
|
77
81
|
"div",
|
|
78
82
|
{
|
|
79
|
-
className:
|
|
83
|
+
className: o(
|
|
80
84
|
"flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2",
|
|
81
|
-
|
|
85
|
+
e
|
|
82
86
|
),
|
|
83
|
-
...
|
|
87
|
+
...t
|
|
84
88
|
}
|
|
85
89
|
);
|
|
86
90
|
}
|
|
87
91
|
function P({
|
|
88
|
-
className:
|
|
89
|
-
...
|
|
92
|
+
className: e,
|
|
93
|
+
...t
|
|
90
94
|
}) {
|
|
91
|
-
return /* @__PURE__ */
|
|
95
|
+
return /* @__PURE__ */ a(
|
|
92
96
|
u,
|
|
93
97
|
{
|
|
94
|
-
className:
|
|
95
|
-
...
|
|
98
|
+
className: o("h3 font-semibold text-foreground", e),
|
|
99
|
+
...t
|
|
96
100
|
}
|
|
97
101
|
);
|
|
98
102
|
}
|
|
99
103
|
function V({
|
|
100
|
-
className:
|
|
101
|
-
...
|
|
104
|
+
className: e,
|
|
105
|
+
...t
|
|
102
106
|
}) {
|
|
103
|
-
return /* @__PURE__ */
|
|
104
|
-
|
|
107
|
+
return /* @__PURE__ */ a(
|
|
108
|
+
h,
|
|
105
109
|
{
|
|
106
|
-
className:
|
|
107
|
-
...
|
|
110
|
+
className: o("body text-muted-foreground", e),
|
|
111
|
+
...t
|
|
108
112
|
}
|
|
109
113
|
);
|
|
110
114
|
}
|
|
111
115
|
export {
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
116
|
+
j as Sheet,
|
|
117
|
+
z as SheetClose,
|
|
118
|
+
k as SheetContent,
|
|
115
119
|
V as SheetDescription,
|
|
116
120
|
O as SheetFooter,
|
|
117
121
|
D as SheetHeader,
|
|
118
|
-
|
|
122
|
+
g as SheetOverlay,
|
|
119
123
|
b as SheetPortal,
|
|
120
124
|
P as SheetTitle,
|
|
121
|
-
|
|
125
|
+
T as SheetTrigger
|
|
122
126
|
};
|
|
123
127
|
//# sourceMappingURL=sheet.es.js.map
|