react-bootstrap-plugins 1.0.2 → 1.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. package/README.md +32 -265
  2. package/dist/DatePicker.cjs +1 -1
  3. package/dist/DatePicker.js +1 -1
  4. package/dist/Label.cjs +1 -1
  5. package/dist/Label.js +1 -1
  6. package/dist/SearchSelect.cjs +1 -1
  7. package/dist/SearchSelect.d.ts +5 -2
  8. package/dist/SearchSelect.js +1 -1
  9. package/dist/TableLoading.cjs +2 -0
  10. package/dist/TableLoading.cjs.map +1 -0
  11. package/dist/TableLoading.d.ts +13 -0
  12. package/dist/TableLoading.js +2 -0
  13. package/dist/TableLoading.js.map +1 -0
  14. package/dist/chunk-2JC4VIKL.cjs +2 -0
  15. package/dist/chunk-2JC4VIKL.cjs.map +1 -0
  16. package/dist/chunk-J4TRPVD4.cjs +2 -0
  17. package/dist/chunk-J4TRPVD4.cjs.map +1 -0
  18. package/dist/{chunk-4ISYCPRB.cjs → chunk-KZEOI42M.cjs} +2 -2
  19. package/dist/chunk-KZEOI42M.cjs.map +1 -0
  20. package/dist/chunk-MQRJBL7S.cjs +2 -0
  21. package/dist/chunk-MQRJBL7S.cjs.map +1 -0
  22. package/dist/{chunk-DIUGH74M.js → chunk-MTRPXJ3C.js} +2 -2
  23. package/dist/chunk-MTRPXJ3C.js.map +1 -0
  24. package/dist/chunk-W6UBCMKG.js +2 -0
  25. package/dist/chunk-W6UBCMKG.js.map +1 -0
  26. package/dist/chunk-WPTHY5AJ.js +2 -0
  27. package/dist/chunk-WPTHY5AJ.js.map +1 -0
  28. package/dist/chunk-XFHLZ7I3.js +2 -0
  29. package/dist/chunk-XFHLZ7I3.js.map +1 -0
  30. package/dist/index.cjs +1 -1
  31. package/dist/index.d.ts +4 -1
  32. package/dist/index.js +1 -1
  33. package/docs/DATEPICKER.md +157 -0
  34. package/docs/LABEL.md +89 -0
  35. package/docs/SEARCHSELECT.md +123 -0
  36. package/docs/TABLELOADING.md +98 -0
  37. package/package.json +18 -3
  38. package/src/components/DatePicker.jsx +1 -0
  39. package/src/components/Label.jsx +1 -0
  40. package/src/components/SearchSelect.d.ts +5 -2
  41. package/src/components/SearchSelect.jsx +5 -2
  42. package/src/components/TableLoading.d.ts +13 -0
  43. package/src/components/TableLoading.jsx +43 -0
  44. package/src/index.js +2 -1
  45. package/dist/chunk-4ISYCPRB.cjs.map +0 -1
  46. package/dist/chunk-CZV7QBHA.cjs +0 -2
  47. package/dist/chunk-CZV7QBHA.cjs.map +0 -1
  48. package/dist/chunk-DIUGH74M.js.map +0 -1
  49. package/dist/chunk-F3KMQZXU.js +0 -2
  50. package/dist/chunk-F3KMQZXU.js.map +0 -1
  51. package/dist/chunk-HBS6VOGV.cjs +0 -2
  52. package/dist/chunk-HBS6VOGV.cjs.map +0 -1
  53. package/dist/chunk-NOGRIWSU.js +0 -2
  54. package/dist/chunk-NOGRIWSU.js.map +0 -1
package/docs/LABEL.md ADDED
@@ -0,0 +1,89 @@
1
+ # Label
2
+
3
+ > A simple Bootstrap-styled form label with a required field indicator.
4
+
5
+ ---
6
+
7
+ ## Import
8
+
9
+ ```js
10
+ // Default import (recommended for single-component tree-shaking)
11
+ import Label from 'react-bootstrap-plugins/Label'
12
+
13
+ // Named import from individual entry point
14
+ import { Label } from 'react-bootstrap-plugins/Label'
15
+
16
+ // Barrel import
17
+ import { Label } from 'react-bootstrap-plugins'
18
+ ```
19
+
20
+ ---
21
+
22
+ ## Basic Usage
23
+
24
+ ```jsx
25
+ import { Label } from 'react-bootstrap-plugins'
26
+
27
+ <Label hf="studentName" label="Student Name" />
28
+ // Renders: <label for="studentName">Student Name <b class="text-danger">*</b></label>
29
+ ```
30
+
31
+ ---
32
+
33
+ ## Props
34
+
35
+ | Prop | Type | Default | Description |
36
+ |---|---|---|---|
37
+ | `hf` | `string` | `'default'` | `htmlFor` attribute — matches input `id` |
38
+ | `label` | `string` | `'Title'` | Label text |
39
+ | `required` | `boolean` | `true` | Show red asterisk |
40
+ | `className` | `string` | — | Additional CSS classes |
41
+
42
+ ---
43
+
44
+ ## Examples
45
+
46
+ ### With required indicator
47
+
48
+ ```jsx
49
+ <Label hf="email" label="Email Address" required />
50
+ ```
51
+
52
+ ### Optional field (no asterisk)
53
+
54
+ ```jsx
55
+ <Label hf="middleName" label="Middle Name" required={false} />
56
+ ```
57
+
58
+ ### With Bootstrap grid
59
+
60
+ ```jsx
61
+ <div className="mb-3 row">
62
+ <div className="col-sm-3">
63
+ <Label hf="phone" label="Phone Number" className="col-form-label" />
64
+ </div>
65
+ <div className="col-sm-9">
66
+ <input id="phone" type="tel" className="form-control" />
67
+ </div>
68
+ </div>
69
+ ```
70
+
71
+ ---
72
+
73
+ ## Dark Mode
74
+
75
+ The Label respects Bootstrap 5's dark mode. Set `data-bs-theme="dark"` on any parent element.
76
+
77
+ ---
78
+
79
+ ## Bundle Size
80
+
81
+ ~0.3 KB (min+gzip).
82
+
83
+ ---
84
+
85
+ ## See Also
86
+
87
+ - [DatePicker](./DATEPICKER.md) — Date, time, and datetime picker
88
+ - [SearchSelect](./SEARCHSELECT.md) — Filterable, searchable select dropdown
89
+ - [Main README](../README.md) — Package overview, installation, and general info
@@ -0,0 +1,123 @@
1
+ # SearchSelect
2
+
3
+ > A filterable, searchable select dropdown styled with Bootstrap 5. Supports both primitive arrays and object arrays with configurable label/value keys.
4
+
5
+ ---
6
+
7
+ ## Import
8
+
9
+ ```js
10
+ // Default import (recommended for single-component tree-shaking)
11
+ import SearchSelect from 'react-bootstrap-plugins/SearchSelect'
12
+
13
+ // Named import from individual entry point
14
+ import { SearchSelect } from 'react-bootstrap-plugins/SearchSelect'
15
+
16
+ // Barrel import
17
+ import { SearchSelect } from 'react-bootstrap-plugins'
18
+ ```
19
+
20
+ ---
21
+
22
+ ## Basic Usage
23
+
24
+ ### Primitive array (strings/numbers)
25
+
26
+ ```jsx
27
+ import { useState } from 'react'
28
+ import { SearchSelect } from 'react-bootstrap-plugins'
29
+
30
+ function FruitPicker() {
31
+ const [fruit, setFruit] = useState('')
32
+
33
+ return (
34
+ <SearchSelect
35
+ options={['Apple', 'Banana', 'Orange', 'Mango', 'Pineapple']}
36
+ placeholder="Choose a fruit..."
37
+ value={fruit}
38
+ onChange={(e) => setFruit(e.target.value)}
39
+ />
40
+ )
41
+ }
42
+ ```
43
+
44
+ ### Object array with label/value mapping
45
+
46
+ ```jsx
47
+ function UserPicker() {
48
+ const [userId, setUserId] = useState(null)
49
+
50
+ const users = [
51
+ { id: 101, fullName: 'Alice Johnson', email: 'alice@example.com' },
52
+ { id: 102, fullName: 'Bob Smith', email: 'bob@example.com' },
53
+ { id: 103, fullName: 'Charlie Brown', email: 'charlie@example.com' },
54
+ ]
55
+
56
+ return (
57
+ <SearchSelect
58
+ options={users}
59
+ labelKey="fullName"
60
+ valueKey="id"
61
+ placeholder="Select a user..."
62
+ value={userId}
63
+ onChange={(e) => setUserId(e.target.value)}
64
+ />
65
+ )
66
+ }
67
+ ```
68
+
69
+ ---
70
+
71
+ ## Props
72
+
73
+ | Prop | Type | Default | Description |
74
+ |---|---|---|---|
75
+ | `options` | `Array<string\|number\|boolean\|object>` | `[]` | Selectable options |
76
+ | `labelKey` | `string` | `'label'` | Key for display text (object options only) |
77
+ | `valueKey` | `string` | `'value'` | Key for the value (object options only) |
78
+ | `placeholder` | `string` | `'Select...'` | Placeholder text |
79
+ | `value` | `any` | `null` | Currently selected value |
80
+ | `onChange` | `(e: { target: { value, name } }) => void` | — | Synthetic event; `e.target.value` is the selected value, `e.target.name` is the input name |
81
+ | `id` | `string` | `'filterable-select'` | Input element ID |
82
+ | `name` | `string` | — | Input name attribute — surfaces as `e.target.name` in `onChange` |
83
+ | `disabled` | `boolean` | `false` | Disable the input |
84
+ | `className` | `string` | — | Additional CSS classes on wrapper |
85
+
86
+ ---
87
+
88
+ ## Inside Bootstrap Input Groups
89
+
90
+ ```jsx
91
+ <div className="input-group mb-3">
92
+ <span className="input-group-text">Subject</span>
93
+ <SearchSelect
94
+ name="subjectId"
95
+ options={subjects}
96
+ labelKey="name"
97
+ valueKey="id"
98
+ placeholder="Search subject..."
99
+ value={subjectId}
100
+ onChange={(e) => setSubjectId(e.target.value)}
101
+ />
102
+ </div>
103
+ ```
104
+
105
+ ---
106
+
107
+ ## Dark Mode
108
+
109
+ The SearchSelect respects Bootstrap 5's dark mode. Set `data-bs-theme="dark"` on any parent element.
110
+
111
+ ---
112
+
113
+ ## Bundle Size
114
+
115
+ ~1.2 KB (min+gzip).
116
+
117
+ ---
118
+
119
+ ## See Also
120
+
121
+ - [DatePicker](./DATEPICKER.md) — Date, time, and datetime picker
122
+ - [Label](./LABEL.md) — Bootstrap-styled form label with required indicator
123
+ - [Main README](../README.md) — Package overview, installation, and general info
@@ -0,0 +1,98 @@
1
+ # TableLoading
2
+
3
+ > Bootstrap 5 placeholder loading skeleton for table `<tbody>` elements. Renders shimmer placeholder rows that match your table's column layout during data fetching.
4
+
5
+ ---
6
+
7
+ ## Import
8
+
9
+ ```js
10
+ // Default import (recommended for single-component tree-shaking)
11
+ import TableLoading from 'react-bootstrap-plugins/TableLoading'
12
+
13
+ // Named import from individual entry point
14
+ import { TableLoading } from 'react-bootstrap-plugins/TableLoading'
15
+
16
+ // Barrel import
17
+ import { TableLoading } from 'react-bootstrap-plugins'
18
+ ```
19
+
20
+ ---
21
+
22
+ ## Basic Usage
23
+
24
+ The component is designed to be placed **inside a `<tbody>`** element, replacing real data rows during loading:
25
+
26
+ ```jsx
27
+ import { useState, useEffect } from 'react'
28
+ import { TableLoading } from 'react-bootstrap-plugins'
29
+
30
+ function StudentTable() {
31
+ const [students, setStudents] = useState([])
32
+ const [loading, setLoading] = useState(true)
33
+
34
+ useEffect(() => {
35
+ fetchStudents().then(data => {
36
+ setStudents(data)
37
+ setLoading(false)
38
+ })
39
+ }, [])
40
+
41
+ return (
42
+ <table className="table table-striped">
43
+ <thead>
44
+ <tr>
45
+ <th>Name</th>
46
+ <th>Class</th>
47
+ <th>Status</th>
48
+ <th>Fees</th>
49
+ </tr>
50
+ </thead>
51
+ <tbody>
52
+ {loading ? (
53
+ <TableLoading rows={8} columns={4} />
54
+ ) : (
55
+ students.map(s => (
56
+ <tr key={s.id}>
57
+ <td>{s.name}</td>
58
+ <td>{s.class}</td>
59
+ <td>{s.status}</td>
60
+ <td>{s.fees}</td>
61
+ </tr>
62
+ ))
63
+ )}
64
+ </tbody>
65
+ </table>
66
+ )
67
+ }
68
+ ```
69
+
70
+ ---
71
+
72
+ ## Props
73
+
74
+ | Prop | Type | Default | Description |
75
+ |---|---|---|---|
76
+ | `rows` | `number` | `5` | Number of placeholder rows to render |
77
+ | `columns` | `number` | `4` | Number of placeholder columns per row |
78
+
79
+ ---
80
+
81
+ ## Dark Mode
82
+
83
+ The TableLoading uses Bootstrap's `placeholder-glow` and `placeholder` classes, which automatically adapt to dark mode. Set `data-bs-theme="dark"` on any parent element.
84
+
85
+ ---
86
+
87
+ ## Bundle Size
88
+
89
+ ~0.2 KB (min+gzip).
90
+
91
+ ---
92
+
93
+ ## See Also
94
+
95
+ - [DatePicker](./DATEPICKER.md) — Date, time, and datetime picker
96
+ - [SearchSelect](./SEARCHSELECT.md) — Filterable, searchable select dropdown
97
+ - [Label](./LABEL.md) — Bootstrap-styled form label with required indicator
98
+ - [Main README](../README.md) — Package overview, installation, and general info
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "react-bootstrap-plugins",
3
- "version": "1.0.2",
4
- "description": "Production-grade Bootstrap 5 UI plugins for React — DatePicker, SearchSelect, Label, and more. Zero runtime dependencies beyond React.",
3
+ "version": "1.0.5",
4
+ "description": "Production-grade Bootstrap 5 UI plugins for React — DatePicker, SearchSelect, Label, TableLoading, and more. Zero runtime dependencies beyond React.",
5
5
  "license": "MIT",
6
6
  "author": {
7
7
  "name": "Tumwesigye Robert",
@@ -52,6 +52,16 @@
52
52
  "default": "./dist/Label.cjs"
53
53
  }
54
54
  },
55
+ "./TableLoading": {
56
+ "import": {
57
+ "types": "./dist/TableLoading.d.ts",
58
+ "default": "./dist/TableLoading.js"
59
+ },
60
+ "require": {
61
+ "types": "./dist/TableLoading.d.ts",
62
+ "default": "./dist/TableLoading.cjs"
63
+ }
64
+ },
55
65
  "./css/datepicker.css": "./dist/css/datepicker.css"
56
66
  },
57
67
  "sideEffects": [
@@ -59,6 +69,7 @@
59
69
  "./dist/css/*.css"
60
70
  ],
61
71
  "files": [
72
+ "docs",
62
73
  "dist",
63
74
  "src",
64
75
  "LICENSE",
@@ -71,7 +82,8 @@
71
82
  "dev": "tsup --watch",
72
83
  "prepublishOnly": "pnpm run build",
73
84
  "lint": "echo 'Lint passed'",
74
- "test": "echo 'Tests passed'"
85
+ "test": "echo 'Tests passed'",
86
+ "push-npm": "npm publish --no-git-checks"
75
87
  },
76
88
  "keywords": [
77
89
  "react",
@@ -83,6 +95,9 @@
83
95
  "search-select",
84
96
  "select",
85
97
  "label",
98
+ "table-loading",
99
+ "placeholder",
100
+ "skeleton",
86
101
  "ui-components",
87
102
  "react-bootstrap",
88
103
  "form-controls",
@@ -688,3 +688,4 @@ const DatePicker = React.forwardRef(({
688
688
  DatePicker.displayName = 'DatePicker'
689
689
 
690
690
  export { DatePicker }
691
+ export default DatePicker
@@ -19,3 +19,4 @@ const Label = React.forwardRef(({ className, hf = 'default', required = true, la
19
19
  Label.displayName = 'Label'
20
20
 
21
21
  export { Label }
22
+ export default Label
@@ -13,10 +13,12 @@ export interface SearchSelectProps<T = any> {
13
13
  placeholder?: string
14
14
  /** Currently selected value */
15
15
  value?: any
16
- /** Called with the selected value when user picks */
17
- onChange?: (value: any) => void
16
+ /** Called with synthetic event; e.target.value is the selected value, e.target.name is the input name */
17
+ onChange?: (e: { target: { value: any; name: string } }) => void
18
18
  /** Input element ID */
19
19
  id?: string
20
+ /** Input name attribute — surfaces as e.target.name in onChange */
21
+ name?: string
20
22
  /** Disable the input */
21
23
  disabled?: boolean
22
24
  }
@@ -26,3 +28,4 @@ declare const SearchSelect: React.ForwardRefExoticComponent<
26
28
  >
27
29
 
28
30
  export default SearchSelect
31
+ export { SearchSelect }
@@ -11,8 +11,9 @@ import { cn } from '../lib/cn.js'
11
11
  * @param {string} [valueKey='value'] - Key for the value when options are objects
12
12
  * @param {string} [placeholder='Select...'] - Placeholder text
13
13
  * @param {any} [value=null] - Currently selected value
14
- * @param {(value: any) => void} [onChange] - Called with the selected value when user picks
14
+ * @param {(e: { target: { value: any, name: string } }) => void} [onChange] - Called with synthetic event; e.target.value is selected value, e.target.name is input name
15
15
  * @param {string} [id='filterable-select'] - Input element ID
16
+ * @param {string} [name] - Input name attribute — surfaces as e.target.name in onChange
16
17
  * @param {boolean} [disabled=false] - Disable the input
17
18
  */
18
19
  const SearchSelect = React.forwardRef(({
@@ -24,6 +25,7 @@ const SearchSelect = React.forwardRef(({
24
25
  value = null,
25
26
  onChange = null,
26
27
  id = 'filterable-select',
28
+ name,
27
29
  disabled = false,
28
30
  ...props
29
31
  }, ref) => {
@@ -76,7 +78,7 @@ const SearchSelect = React.forwardRef(({
76
78
  const selectedValue = getValue(option)
77
79
  setSearchTerm(getLabel(option))
78
80
  setIsOpen(false)
79
- if (onChange) onChange(selectedValue)
81
+ if (onChange) onChange({ target: { value: selectedValue, name: name || id } })
80
82
  }
81
83
 
82
84
  return (
@@ -150,3 +152,4 @@ const SearchSelect = React.forwardRef(({
150
152
  SearchSelect.displayName = 'SearchSelect'
151
153
 
152
154
  export default SearchSelect
155
+ export { SearchSelect }
@@ -0,0 +1,13 @@
1
+ import * as React from 'react'
2
+
3
+ export interface TableLoadingProps {
4
+ /** Number of placeholder rows to render (default 5) */
5
+ rows?: number
6
+ /** Number of placeholder columns per row (default 4) */
7
+ columns?: number
8
+ }
9
+
10
+ declare const TableLoading: React.FC<TableLoadingProps>
11
+
12
+ export default TableLoading
13
+ export { TableLoading }
@@ -0,0 +1,43 @@
1
+ import * as React from 'react'
2
+
3
+ /**
4
+ * Bootstrap 5 placeholder loading rows for table `<tbody>` elements.
5
+ * Renders a grid of shimmer placeholders matching the table column count.
6
+ *
7
+ * @param {number} [rows=5] - Number of placeholder rows to render
8
+ * @param {number} [columns=4] - Number of placeholder columns per row
9
+ *
10
+ * @example
11
+ * // Inside a table
12
+ * <table className="table">
13
+ * <thead><tr><th>Name</th><th>Class</th><th>Status</th></tr></thead>
14
+ * <tbody>
15
+ * {loading ? (
16
+ * <TableLoading rows={8} columns={3} />
17
+ * ) : (
18
+ * data.map(row => <tr key={row.id}>...</tr>)
19
+ * )}
20
+ * </tbody>
21
+ * </table>
22
+ */
23
+ const TableLoading = ({ rows = 5, columns = 4 }) => (
24
+ <>
25
+ {Array.from({ length: rows }, (_, r) => (
26
+ <tr key={r}>
27
+ {Array.from({ length: columns }, (_, c) => (
28
+ <td key={c} className="placeholder-glow">
29
+ <span
30
+ className="placeholder rounded py-2 col-12"
31
+ style={{ height: 14, display: 'block' }}
32
+ />
33
+ </td>
34
+ ))}
35
+ </tr>
36
+ ))}
37
+ </>
38
+ )
39
+
40
+ TableLoading.displayName = 'TableLoading'
41
+
42
+ export { TableLoading }
43
+ export default TableLoading
package/src/index.js CHANGED
@@ -11,5 +11,6 @@
11
11
  */
12
12
 
13
13
  export { DatePicker } from './components/DatePicker.jsx'
14
- export { default as SearchSelect } from './components/SearchSelect.jsx'
14
+ export { SearchSelect } from './components/SearchSelect.jsx'
15
15
  export { Label } from './components/Label.jsx'
16
+ export { TableLoading } from './components/TableLoading.jsx'
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/DatePicker.jsx"],"names":["DAYS_OF_WEEK","MONTHS","MINUTES","_","i","YEARS_PER_PAGE","daysInMonth","year","month","isSameDay","a","b","isDateInRange","date","min","max","buildCalendarGrid","firstDay","totalDays","cells","prevMonthDays","day","remaining","formatValue","mode","fmt","y","M","d","h","m","hh","makeEvent","value","inputName","type","POPOVER_GUESS","getScrollParent","el","parent","style","overflowY","calcPopoverStyle","inputEl","popoverHeight","rect","spaceBelow","spaceAbove","placeAbove","minW","DatePicker","className","selected","onChange","dateFormat","placeholderText","size","isClearable","disabled","minDate","maxDate","timeIntervals","timezone","id","name","props","ref","resolveValue","v","timeMatch","ap","now","dtMatch","resolvedValue","showCalendar","showTime","isOpen","setIsOpen","viewYear","setViewYear","viewMonth","setViewMonth","tempDate","setTempDate","tempHours","setTempHours","tempMins","setTempMins","tempAmPm","setTempAmPm","showYearPicker","setShowYearPicker","yearPage","setYearPage","popoverStyle","setPopoverStyle","inputRef","popoverRef","portalRef","getHeight","scrollParent","update","handler","e","buildDate","base","h12","mins","ampm","fireChange","formatted","commit","commitDateOnly","grid","handlePrevMonth","newY","newM","maxD","newDate","handleNextMonth","today","minDt","maxDt","handleHourChange","handleMinChange","handleAmPmChange","openYearPicker","handleYearSelect","yearPageStart","years","handleClear","handleInputKeyDown","mergeInputRef","node","placeholder","popover","jsxs","cn","jsx","isCurrentYear","isSelected","Fragment","cell","isToday","inRange","isDisabledDay","createPortal"],"mappings":"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","file":"chunk-4ISYCPRB.cjs","sourcesContent":["import * as React from 'react'\nimport { createPortal } from 'react-dom'\nimport { cn } from '../lib/cn.js'\n\n/* ------------------------------------------------------------------ */\n/* Constants */\n/* ------------------------------------------------------------------ */\n\nconst DAYS_OF_WEEK = ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa']\nconst MONTHS = [\n 'January', 'February', 'March', 'April', 'May', 'June',\n 'July', 'August', 'September', 'October', 'November', 'December',\n]\nconst MINUTES = Array.from({ length: 60 }, (_, i) => i)\nconst YEARS_PER_PAGE = 12\n\n/* ------------------------------------------------------------------ */\n/* Helpers */\n/* ------------------------------------------------------------------ */\n\nconst daysInMonth = (year, month) => new Date(year, month + 1, 0).getDate()\n\nconst isSameDay = (a, b) =>\n a && b && a.getFullYear() === b.getFullYear() && a.getMonth() === b.getMonth() && a.getDate() === b.getDate()\n\nconst isDateInRange = (date, min, max) => {\n if (min && date < new Date(min.getFullYear(), min.getMonth(), min.getDate())) return false\n if (max && date > new Date(max.getFullYear(), max.getMonth(), max.getDate())) return false\n return true\n}\n\nconst buildCalendarGrid = (year, month) => {\n const firstDay = new Date(year, month, 1).getDay()\n const totalDays = daysInMonth(year, month)\n const cells = []\n\n const prevMonthDays = daysInMonth(year, month - 1)\n for (let i = firstDay - 1; i >= 0; i--) {\n const day = prevMonthDays - i\n cells.push({ day, date: new Date(year, month - 1, day), isOutside: true })\n }\n\n for (let d = 1; d <= totalDays; d++) {\n cells.push({ day: d, date: new Date(year, month, d), isOutside: false })\n }\n\n const remaining = 42 - cells.length\n for (let d = 1; d <= remaining; d++) {\n cells.push({ day: d, date: new Date(year, month + 1, d), isOutside: true })\n }\n\n return cells\n}\n\nconst formatValue = (date, mode, fmt) => {\n if (!date || isNaN(date.getTime())) return ''\n\n const y = date.getFullYear()\n const M = String(date.getMonth() + 1).padStart(2, '0')\n const d = String(date.getDate()).padStart(2, '0')\n let h = date.getHours()\n const m = String(date.getMinutes()).padStart(2, '0')\n const a = h >= 12 ? 'PM' : 'AM'\n h = h % 12 || 12\n const hh = String(h).padStart(2, '0')\n\n if (fmt) {\n return fmt.replace('yyyy', y).replace('MM', M).replace('dd', d).replace('hh', hh).replace('mm', m).replace('aa', a)\n }\n\n switch (mode) {\n case 'time': return `${hh}:${m} ${a}`\n case 'datetime': return `${y}-${M}-${d} ${hh}:${m} ${a}`\n default: return `${y}-${M}-${d}`\n }\n}\n\n/**\n * Build a synthetic event object like a native input's onChange.\n * { target: { value, name, type }, preventDefault, stopPropagation }\n */\nconst makeEvent = (value, inputName, type = 'date') => ({\n target: {\n value,\n name: inputName,\n type,\n },\n preventDefault: () => {},\n stopPropagation: () => {},\n nativeEvent: null,\n})\n\n/* ------------------------------------------------------------------ */\n/* Popover positioning */\n/* ------------------------------------------------------------------ */\n\n/** Approximate heights — used as a first guess before the real DOM height is measured. */\nconst POPOVER_GUESS = { date: 300, time: 300, datetime: 400, year: 250 }\n\n/**\n * Find the nearest scrollable ancestor (for capturing scroll events inside\n * modals / side panels / custom containers).\n */\nconst getScrollParent = (el) => {\n if (!el) return document.documentElement\n let parent = el.parentElement\n while (parent) {\n const style = window.getComputedStyle(parent)\n const overflowY = style.overflowY || style.overflow\n if (overflowY === 'auto' || overflowY === 'scroll') return parent\n parent = parent.parentElement\n }\n return document.documentElement\n}\n\nconst calcPopoverStyle = (inputEl, popoverHeight) => {\n if (!inputEl) return {}\n const rect = inputEl.getBoundingClientRect()\n const h = popoverHeight || 300\n\n const spaceBelow = window.innerHeight - rect.bottom\n const spaceAbove = rect.top\n\n /* Only flip above when below is truly too tight AND above offers more room */\n const placeAbove = spaceBelow < h && spaceAbove > spaceBelow\n\n /* Responsive: use smaller min-width on mobile to prevent overflow */\n const minW = Math.max(rect.width, window.innerWidth < 576 ? 220 : 260)\n\n return {\n position: 'fixed',\n top: placeAbove ? Math.max(4, rect.top - h - 4) : rect.bottom + 4,\n left: Math.max(4, Math.min(rect.left, window.innerWidth - minW - 4)),\n minWidth: minW,\n maxWidth: window.innerWidth - 8,\n zIndex: 1070,\n }\n}\n\n/* ------------------------------------------------------------------ */\n/* DatePicker */\n/* ------------------------------------------------------------------ */\n\n/**\n * Custom Bootstrap-styled date / time / datetime picker. Zero dependencies.\n *\n * **Important:** The accompanying CSS **must** be imported for the picker to render correctly:\n * ```js\n * import 'react-bootstrap-plugins/css/datepicker.css'\n * ```\n *\n * @param {'date'|'time'|'datetime'} mode - Picker mode (default 'date')\n * @param {Date|null} value - Currently selected Date (aliases: selected)\n * @param {(e: { target: { value: string|null, name: string, type: string } }) => void} onChange\n * - Synthetic event handler — e.target.value is a pre-formatted string\n * (date → \"YYYY-MM-DD\", time → \"hh:mm AA\", datetime → \"YYYY-MM-DD hh:mm AA\")\n * @param {string} [dateFormat] - Display format (yyyy, MM, dd, hh, mm, aa)\n * @param {string} [placeholderText] - Placeholder when empty\n * @param {'sm'|'lg'} [size] - Bootstrap size variant\n * @param {boolean} [isClearable=false] - Show a clear button on the input\n * @param {boolean} [disabled=false] - Disable the input\n * @param {Date} [minDate] - Earliest selectable date\n * @param {Date} [maxDate] - Latest selectable date\n * @param {number} [timeIntervals=5] - Minute step in the time list\n * @param {string} [timezone='Kampala'] - Timezone identifier for the picker\n * @param {string} [className] - Additional classes on the input\n */\nconst DatePicker = React.forwardRef(({\n className,\n mode = 'date',\n selected,\n value,\n onChange,\n dateFormat,\n placeholderText,\n size,\n isClearable = false,\n disabled = false,\n minDate,\n maxDate,\n timeIntervals = 5,\n timezone = 'Kampala',\n id,\n name,\n ...props\n}, ref) => {\n /* ---- derived ---- */\n const resolveValue = (v) => {\n if (!v) return null\n if (v instanceof Date) return isNaN(v.getTime()) ? null : v\n if (typeof v === 'string' || typeof v === 'number') {\n // Standard Date parsing (works for ISO 8601, \"YYYY-MM-DD\", etc.)\n const d = new Date(v)\n if (!isNaN(d.getTime())) return d\n\n // Handle time-only strings from formatValue: \"hh:mm AA\"\n if (typeof v === 'string') {\n const timeMatch = v.match(/^(\\d{1,2}):(\\d{2})\\s*(AM|PM)$/i)\n if (timeMatch) {\n let h = parseInt(timeMatch[1], 10)\n const m = parseInt(timeMatch[2], 10)\n const ap = timeMatch[3].toUpperCase()\n if (h === 12 && ap === 'AM') h = 0\n if (h !== 12 && ap === 'PM') h += 12\n const now = new Date()\n return new Date(now.getFullYear(), now.getMonth(), now.getDate(), h, m, 0, 0)\n }\n\n // Handle datetime strings from formatValue: \"YYYY-MM-DD hh:mm AA\"\n const dtMatch = v.match(/^(\\d{4})-(\\d{2})-(\\d{2})\\s+(\\d{1,2}):(\\d{2})\\s*(AM|PM)$/i)\n if (dtMatch) {\n let h = parseInt(dtMatch[4], 10)\n const m = parseInt(dtMatch[5], 10)\n const ap = dtMatch[6].toUpperCase()\n if (h === 12 && ap === 'AM') h = 0\n if (h !== 12 && ap === 'PM') h += 12\n return new Date(parseInt(dtMatch[1]), parseInt(dtMatch[2]) - 1, parseInt(dtMatch[3]), h, m, 0, 0)\n }\n }\n return null\n }\n return null\n }\n const resolvedValue = React.useMemo(\n () => resolveValue(selected ?? value),\n [\n selected instanceof Date ? selected.getTime() : selected,\n value instanceof Date ? value.getTime() : value,\n ],\n )\n const showCalendar = mode === 'date' || mode === 'datetime'\n const showTime = mode === 'time' || mode === 'datetime'\n\n /* ---- internal state ---- */\n const [isOpen, setIsOpen] = React.useState(false)\n const [viewYear, setViewYear] = React.useState(() =>\n resolvedValue ? resolvedValue.getFullYear() : new Date().getFullYear())\n const [viewMonth, setViewMonth] = React.useState(() =>\n resolvedValue ? resolvedValue.getMonth() : new Date().getMonth())\n const [tempDate, setTempDate] = React.useState(resolvedValue)\n const [tempHours, setTempHours] = React.useState(() =>\n resolvedValue ? (resolvedValue.getHours() % 12 || 12) : 12)\n const [tempMins, setTempMins] = React.useState(() =>\n resolvedValue ? resolvedValue.getMinutes() : 0)\n const [tempAmPm, setTempAmPm] = React.useState(() =>\n resolvedValue ? (resolvedValue.getHours() >= 12 ? 'PM' : 'AM') : 'AM')\n const [showYearPicker, setShowYearPicker] = React.useState(false)\n const [yearPage, setYearPage] = React.useState(() =>\n Math.floor((resolvedValue ? resolvedValue.getFullYear() : new Date().getFullYear()) / YEARS_PER_PAGE) * YEARS_PER_PAGE\n )\n const [popoverStyle, setPopoverStyle] = React.useState({})\n\n const inputRef = React.useRef(null)\n const popoverRef = React.useRef(null)\n const portalRef = React.useRef(null)\n\n /* ---- portal container ---- */\n React.useEffect(() => {\n const el = document.createElement('div')\n el.className = 'datepicker-portal-root'\n document.body.appendChild(el)\n portalRef.current = el\n return () => {\n if (el.parentNode) document.body.removeChild(el)\n portalRef.current = null\n }\n }, [])\n\n /* ---- sync temp state when value changes externally ---- */\n React.useEffect(() => {\n if (resolvedValue && !isNaN(resolvedValue.getTime())) {\n setTempDate(resolvedValue)\n setViewYear(resolvedValue.getFullYear())\n setViewMonth(resolvedValue.getMonth())\n setTempHours(resolvedValue.getHours() % 12 || 12)\n setTempMins(resolvedValue.getMinutes())\n setTempAmPm(resolvedValue.getHours() >= 12 ? 'PM' : 'AM')\n setYearPage(Math.floor(resolvedValue.getFullYear() / YEARS_PER_PAGE) * YEARS_PER_PAGE)\n } else {\n setTempDate(null)\n }\n }, [resolvedValue])\n\n /* ---- reposition popover on open / scroll / resize ---- */\n React.useEffect(() => {\n if (!isOpen) return\n\n /* Measure actual popover height so we position with no wasted space */\n const getHeight = () => {\n if (popoverRef.current) {\n return popoverRef.current.getBoundingClientRect().height\n }\n return POPOVER_GUESS[showYearPicker ? 'year' : mode] || 300\n }\n\n const scrollParent = getScrollParent(inputRef.current)\n\n const update = () => {\n /* Force a paint frame so the popover has its real size */\n requestAnimationFrame(() => {\n setPopoverStyle(calcPopoverStyle(inputRef.current, getHeight()))\n })\n }\n update()\n\n /* Listen on the nearest scrollable ancestor (e.g. modal body) AND the window */\n scrollParent.addEventListener('scroll', update, { passive: true })\n window.addEventListener('resize', update)\n return () => {\n scrollParent.removeEventListener('scroll', update)\n window.removeEventListener('resize', update)\n }\n }, [isOpen, mode, showYearPicker])\n\n /* ---- click outside to close ---- */\n React.useEffect(() => {\n if (!isOpen) return\n const handler = (e) => {\n if (popoverRef.current && !popoverRef.current.contains(e.target) &&\n inputRef.current && !inputRef.current.contains(e.target)) {\n setIsOpen(false)\n setShowYearPicker(false)\n }\n }\n document.addEventListener('mousedown', handler)\n return () => document.removeEventListener('mousedown', handler)\n }, [isOpen])\n\n /* ---- commit helpers ---- */\n const buildDate = (base, h12, mins, ampm) => {\n const d = new Date(base)\n let h = h12 % 12\n if (ampm === 'PM') h += 12\n if (h === 12 && ampm === 'AM') h = 0\n d.setHours(h, mins, 0, 0)\n return d\n }\n\n /**\n * Fire onChange with a pre-built date without closing the popover.\n * Callers must build the complete date (including time) before passing it in.\n */\n const fireChange = (date) => {\n if (!date || isNaN(date.getTime())) return\n const formatted = formatValue(date, mode, dateFormat)\n onChange?.(makeEvent(formatted, name, mode))\n }\n\n const commit = (date) => {\n if (!date) {\n onChange?.(makeEvent(null, name, mode))\n setIsOpen(false)\n setShowYearPicker(false)\n return\n }\n fireChange(date)\n if (mode === 'date') { setIsOpen(false); setShowYearPicker(false) }\n }\n\n const commitDateOnly = (date) => {\n setTempDate(date)\n if (mode === 'date') {\n commit(date)\n } else if (mode === 'datetime') {\n // Build full datetime (date + current time selection) and fire\n const d = buildDate(date, tempHours, tempMins, tempAmPm)\n fireChange(d)\n }\n }\n\n /* ---- calendar grid ---- */\n const grid = buildCalendarGrid(viewYear, viewMonth)\n\n const handlePrevMonth = () => {\n let newY = viewYear, newM = viewMonth\n if (viewMonth === 0) { newY = viewYear - 1; newM = 11 }\n else newM = viewMonth - 1\n setViewYear(newY); setViewMonth(newM)\n const base = tempDate || new Date()\n const maxD = daysInMonth(newY, newM)\n const newDate = new Date(newY, newM, Math.min(base.getDate(), maxD))\n setTempDate(newDate)\n fireChange(showTime ? buildDate(newDate, tempHours, tempMins, tempAmPm) : newDate)\n }\n const handleNextMonth = () => {\n let newY = viewYear, newM = viewMonth\n if (viewMonth === 11) { newY = viewYear + 1; newM = 0 }\n else newM = viewMonth + 1\n setViewYear(newY); setViewMonth(newM)\n const base = tempDate || new Date()\n const maxD = daysInMonth(newY, newM)\n const newDate = new Date(newY, newM, Math.min(base.getDate(), maxD))\n setTempDate(newDate)\n fireChange(showTime ? buildDate(newDate, tempHours, tempMins, tempAmPm) : newDate)\n }\n\n const today = new Date()\n const minDt = minDate ? new Date(minDate.getFullYear(), minDate.getMonth(), minDate.getDate()) : null\n const maxDt = maxDate ? new Date(maxDate.getFullYear(), maxDate.getMonth(), maxDate.getDate()) : null\n\n /* ---- time change handlers ---- */\n const handleHourChange = (h) => {\n setTempHours(h)\n if (showTime) {\n const d = buildDate(tempDate || new Date(), h, tempMins, tempAmPm)\n onChange?.(makeEvent(formatValue(d, mode, dateFormat), name, mode))\n }\n }\n const handleMinChange = (m) => {\n setTempMins(m)\n if (showTime) {\n const d = buildDate(tempDate || new Date(), tempHours, m, tempAmPm)\n onChange?.(makeEvent(formatValue(d, mode, dateFormat), name, mode))\n }\n }\n const handleAmPmChange = (ap) => {\n setTempAmPm(ap)\n if (showTime) {\n const d = buildDate(tempDate || new Date(), tempHours, tempMins, ap)\n onChange?.(makeEvent(formatValue(d, mode, dateFormat), name, mode))\n }\n }\n\n /* ---- year picker ---- */\n const openYearPicker = () => {\n setYearPage(Math.floor(viewYear / YEARS_PER_PAGE) * YEARS_PER_PAGE)\n setShowYearPicker(true)\n }\n\n const handleYearSelect = (y) => {\n setViewYear(y)\n setShowYearPicker(false)\n const base = tempDate || new Date()\n const maxD = daysInMonth(y, viewMonth)\n const newDate = new Date(y, viewMonth, Math.min(base.getDate(), maxD))\n setTempDate(newDate)\n fireChange(showTime ? buildDate(newDate, tempHours, tempMins, tempAmPm) : newDate)\n }\n\n const yearPageStart = Math.floor(yearPage / YEARS_PER_PAGE) * YEARS_PER_PAGE\n const years = Array.from({ length: YEARS_PER_PAGE }, (_, i) => yearPageStart + i)\n\n /* ---- clear ---- */\n const handleClear = (e) => {\n e.stopPropagation()\n setTempDate(null)\n onChange?.(makeEvent(null, name))\n }\n\n /* ---- keyboard ---- */\n const handleInputKeyDown = (e) => {\n if (e.key === 'Escape') { setIsOpen(false); setShowYearPicker(false); inputRef.current?.blur() }\n if (e.key === 'ArrowDown' || e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n setIsOpen(true)\n }\n }\n\n /* ---- merged ref ---- */\n const mergeInputRef = React.useCallback((node) => {\n inputRef.current = node\n if (typeof ref === 'function') ref(node)\n else if (ref) ref.current = node\n }, [ref])\n\n /* ---- render ---- */\n const placeholder = placeholderText\n ?? (mode === 'time' ? 'Select time' : mode === 'datetime' ? 'Select date & time' : 'Select date')\n\n const popover = (\n <div\n ref={popoverRef}\n className={cn(\n 'datepicker-popover card border shadow-sm',\n mode === 'datetime' && 'datepicker-popover--wide'\n )}\n style={popoverStyle}\n >\n {/* ============== YEAR PICKER ============== */}\n {showYearPicker && showCalendar && (\n <div className=\"datepicker-year-picker p-3\">\n <div className=\"d-flex align-items-center justify-content-between mb-2\">\n <button type=\"button\" className=\"btn btn-sm btn-outline-secondary border-0 px-1\" onClick={() => setYearPage(yearPage - YEARS_PER_PAGE)} aria-label=\"Previous years\">&lsaquo;</button>\n <span className=\"fw-semibold small\">{yearPageStart} – {yearPageStart + YEARS_PER_PAGE - 1}</span>\n <button type=\"button\" className=\"btn btn-sm btn-outline-secondary border-0 px-1\" onClick={() => setYearPage(yearPage + YEARS_PER_PAGE)} aria-label=\"Next years\">&rsaquo;</button>\n </div>\n <div className=\"datepicker-year-grid\">\n {years.map((y) => {\n const isCurrentYear = y === new Date().getFullYear()\n const isSelected = tempDate && y === tempDate.getFullYear()\n return (\n <button\n key={y}\n type=\"button\"\n className={cn(\n 'datepicker-year-cell btn btn-sm',\n isSelected && 'btn-primary',\n !isSelected && isCurrentYear && 'btn-outline-primary',\n !isSelected && !isCurrentYear && 'btn-light border'\n )}\n onClick={() => handleYearSelect(y)}\n >\n {y}\n </button>\n )\n })}\n </div>\n </div>\n )}\n\n {/* ============== CALENDAR + TIME ============== */}\n {!showYearPicker && (\n <>\n\n {/* ---- CALENDAR + TIME CONTAINER ---- */}\n <div className={cn('d-flex', mode === 'datetime' ? 'flex-row' : 'flex-column')}>\n\n {/* ---- CALENDAR ---- */}\n {showCalendar && (\n <div className=\"datepicker-calendar p-2\">\n {/* Month / Year header */}\n <div className=\"d-flex align-items-center justify-content-between mb-2\">\n <button type=\"button\" className=\"btn btn-sm btn-outline-secondary border-0 px-1\" onClick={handlePrevMonth} aria-label=\"Previous month\">&lsaquo;</button>\n <div className=\"d-flex align-items-center gap-1\">\n <span className=\"fw-semibold small\">{MONTHS[viewMonth]}</span>\n <button\n type=\"button\"\n className=\"btn btn-sm btn-link text-decoration-none text-primary fw-semibold small p-0\"\n onClick={openYearPicker}\n aria-label=\"Choose year\"\n >{viewYear}</button>\n </div>\n <button type=\"button\" className=\"btn btn-sm btn-outline-secondary border-0 px-1\" onClick={handleNextMonth} aria-label=\"Next month\">&rsaquo;</button>\n </div>\n\n {/* Day-of-week headers */}\n <div className=\"datepicker-days-header\">\n {DAYS_OF_WEEK.map(d => (\n <div key={d} className=\"datepicker-day-label\">{d}</div>\n ))}\n </div>\n\n {/* Day grid */}\n <div className=\"datepicker-days-grid\">\n {grid.map((cell, i) => {\n const isToday = isSameDay(cell.date, today)\n const isSelected = tempDate && isSameDay(cell.date, tempDate)\n const inRange = isDateInRange(cell.date, minDt, maxDt)\n const isDisabledDay = cell.isOutside || !inRange\n\n return (\n <button\n key={i}\n type=\"button\"\n disabled={isDisabledDay}\n className={cn(\n 'datepicker-day',\n isToday && 'datepicker-day--today',\n isSelected && 'datepicker-day--selected',\n cell.isOutside && 'datepicker-day--outside',\n !inRange && 'datepicker-day--disabled'\n )}\n onClick={() => commitDateOnly(cell.date)}\n tabIndex={cell.isOutside ? -1 : 0}\n >\n {cell.day}\n </button>\n )\n })}\n </div>\n </div>\n )}\n\n {/* ---- DIVIDER (datetime mode) ---- */}\n {mode === 'datetime' && <div className=\"vr mx-1 my-2\" />}\n\n {/* ---- TIME ---- */}\n {showTime && (\n <div className=\"datepicker-time p-2 d-flex flex-column\" style={{ minWidth: 180 }}>\n {mode === 'datetime' && <div className=\"small fw-semibold text-muted text-center mb-1\">Time</div>}\n <div className=\"d-flex justify-content-center gap-2\">\n {/* Hour column */}\n <div className=\"datepicker-time-col\">\n <div className=\"datepicker-time-col-label\">Hour</div>\n <div className=\"datepicker-time-col-scroll\">\n {Array.from({ length: 12 }, (_, i) => i + 1).map(h => (\n <button\n key={h}\n type=\"button\"\n className={cn('datepicker-time-item', h === tempHours && 'active')}\n onClick={() => handleHourChange(h)}\n >\n {String(h).padStart(2, '0')}\n </button>\n ))}\n </div>\n </div>\n <span className=\"datepicker-time-separator\">:</span>\n {/* Minute column */}\n <div className=\"datepicker-time-col\">\n <div className=\"datepicker-time-col-label\">Min</div>\n <div className=\"datepicker-time-col-scroll\">\n {MINUTES.map(m => (\n <button\n key={m}\n type=\"button\"\n className={cn('datepicker-time-item', m === tempMins && 'active')}\n onClick={() => handleMinChange(m)}\n >\n {String(m).padStart(2, '0')}\n </button>\n ))}\n </div>\n </div>\n {/* AM/PM column */}\n <div className=\"datepicker-time-col\">\n <div className=\"datepicker-time-col-label\">&nbsp;</div>\n <div className=\"d-flex flex-column gap-1 mt-1\">\n {['AM', 'PM'].map(ap => (\n <button\n key={ap}\n type=\"button\"\n className={cn('datepicker-time-item', 'datepicker-time-item--ampm', tempAmPm === ap && 'active')}\n onClick={() => handleAmPmChange(ap)}\n >\n {ap}\n </button>\n ))}\n </div>\n </div>\n </div>\n </div>\n )}\n </div>\n </>\n )}\n </div>\n )\n\n return (\n <div className=\"position-relative d-inline-block w-100\" style={{ minWidth: 0 }}>\n {/* ---- Input ---- */}\n <div className=\"position-relative\">\n <input\n ref={mergeInputRef}\n id={id}\n name={name}\n type=\"text\"\n readOnly\n disabled={disabled}\n className={cn(\n 'form-control',\n size === 'sm' && 'form-control-sm',\n size === 'lg' && 'form-control-lg',\n 'pe-5',\n className\n )}\n placeholder={placeholder}\n value={formatValue(resolvedValue, mode, dateFormat)}\n onClick={() => !disabled && setIsOpen(!isOpen)}\n onKeyDown={handleInputKeyDown}\n aria-haspopup=\"dialog\"\n aria-expanded={isOpen}\n autoComplete=\"off\"\n {...props}\n />\n {/* clear button */}\n {isClearable && resolvedValue && !disabled && (\n <button\n type=\"button\"\n className=\"btn btn-sm btn-link position-absolute top-50 end-0 translate-middle-y pe-2 text-secondary\"\n style={{ zIndex: 2 }}\n onClick={handleClear}\n tabIndex={-1}\n aria-label=\"Clear\"\n >\n &times;\n </button>\n )}\n </div>\n\n {/* ---- Portal the popover to document.body ---- */}\n {isOpen && !disabled && portalRef.current && createPortal(popover, portalRef.current)}\n </div>\n )\n})\n\nDatePicker.displayName = 'DatePicker'\n\nexport { DatePicker }\n"]}
@@ -1,2 +0,0 @@
1
- 'use strict';var e=require('react'),jsxRuntime=require('react/jsx-runtime');function _interopNamespace(e){if(e&&e.__esModule)return e;var n=Object.create(null);if(e){Object.keys(e).forEach(function(k){if(k!=='default'){var d=Object.getOwnPropertyDescriptor(e,k);Object.defineProperty(n,k,d.get?d:{enumerable:true,get:function(){return e[k]}});}})}n.default=e;return Object.freeze(n)}var e__namespace=/*#__PURE__*/_interopNamespace(e);var o=e__namespace.forwardRef(({className:a,hf:l="default",required:t=true,label:r="Title"},b)=>jsxRuntime.jsxs("label",{htmlFor:l,className:a,ref:b,children:[r,t?jsxRuntime.jsx("b",{className:"text-danger",children:"*"}):""]}));o.displayName="Label";exports.a=o;//# sourceMappingURL=chunk-CZV7QBHA.cjs.map
2
- //# sourceMappingURL=chunk-CZV7QBHA.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/Label.jsx"],"names":["Label","e","className","hf","required","label","ref","jsxs","jsx"],"mappings":"kbAUA,IAAMA,CAAAA,CAAcC,wBAAW,CAAC,CAAE,UAAAC,CAAAA,CAAW,EAAA,CAAAC,EAAK,SAAA,CAAW,QAAA,CAAAC,CAAAA,CAAW,IAAA,CAAM,KAAA,CAAAC,CAAAA,CAAQ,OAAQ,CAAA,CAAGC,CAAAA,GAE7FC,gBAAC,OAAA,CAAA,CAAM,OAAA,CAASJ,EAAI,SAAA,CAAWD,CAAAA,CAAW,GAAA,CAAKI,CAAAA,CAC5C,QAAA,CAAA,CAAAD,CAAAA,CAAOD,EAAWI,cAAAA,CAAC,GAAA,CAAA,CAAE,UAAU,aAAA,CAAc,QAAA,CAAA,GAAA,CAAC,EAAO,EAAA,CAAA,CACxD,CAEH,EAEDR,CAAAA,CAAM,WAAA,CAAc,OAAA","file":"chunk-CZV7QBHA.cjs","sourcesContent":["import * as React from 'react'\n\n/**\n * A simple Bootstrap-styled form label with an optional required indicator.\n *\n * @param {string} [className] - Additional CSS classes\n * @param {string} [hf='default'] - htmlFor attribute (associates label with input ID)\n * @param {boolean} [required=true] - Whether to show the required asterisk\n * @param {string} [label='Title'] - Label text content\n */\nconst Label = React.forwardRef(({ className, hf = 'default', required = true, label = 'Title' }, ref) => {\n return (\n <label htmlFor={hf} className={className} ref={ref}>\n {label}{required ? <b className=\"text-danger\">*</b> : ''}\n </label>\n )\n})\n\nLabel.displayName = 'Label'\n\nexport { Label }\n"]}